loading...
Titration curve: pH against titrant volume (dashed: exact model, orange: your run)
Start the titration.
running...
How to use
Choose a preset or build your own: analyte, concentrations, indicator, temperature. Open the stopcock with the slider (or press +1 drop, +0.1 mL, +1 mL) and watch the burette level, the flask colour and the pH meter. The panel under the controls says in words which part of the curve you are in. Fast-forward runs to the end; Auto-slow mimics a careful chemist who slows down at the steep jump. Drag to orbit, wheel to zoom. Space pauses, R restarts. Things to try: (1) titrate acetic acid and read the pH at half the equivalence volume - it equals the pKa; (2) repeat with methyl orange and compare the endpoint error in the readout; (3) switch to citric acid and see why a polyprotic buffer has no jump until the last proton; (4) in Blind mode find the unknown concentration from the endpoint, then press Reveal; (5) heat the flask to 60 C and see where neutral pH moves.
The 50 mL burette with graduations and stopcock, the wide-neck Erlenmeyer flask, magnetic stirrer with stir bar, pH meter and electrode, ring stand and clamps, reagent bottle, indicator dropper, wash bottle, beaker, pipette rack and bench were modelled in Blender 5.2 with baked PBR textures (brushed steel, aluminium, wood, painted plastic) and exported as one Draco GLB. Three.js r160 moves the burette meniscus, the stopcock handle, drops, the flask liquid level and colour, the stir bar and the live pH meter screen from the same model as the 2D page.
The science
In an acid-base titration a solution of known concentration (the titrant, from the burette) is added to a measured volume of the analyte until the reaction is complete. The pH of the flask is found at every step from an exact calculation, not from textbook shortcuts, so the same model gives the strong-acid jump, the weak-acid buffer plateau, the polyprotic staircase and the endpoint error of an indicator.
Exact pH from electroneutrality. The flask always has zero net charge. With analyte family HnX of total concentration Ca (diluted by the added titrant), titrant ions CNa or CCl, and any spectator ions of the salt, the charge balance is
CNa − CCl + zc Ca + [H+] − Kw/[H+] + Ca Σj αj (z0 − j) = 0
where αj is the fraction of the family that has lost j protons, from the stepwise acidity constants:
αj = [H+]n−j K1…Kj / Σi [H+]n−i K1…Ki, Ca = ca Va / (Va + Vb)
The left-hand side rises monotonically with [H+], so it has exactly one root, found by bisection to 10−15 in pH. The same equation covers strong acids and bases (empty pKa list), weak acids and bases, diprotic and triprotic acids and the dibasic salt Na2CO3.
Equivalence. The k-th step is complete at Ve,k = k ca Va / ct. The unknown concentration in a real lab follows from ca = ct Vend / (k Va). For a weak acid of pKa the equivalence pH is that of its conjugate base:
pHeq ≈ 7 + ½ (pKa + log10 Ceq), half-equivalence: pH = pKa (Henderson-Hasselbalch)
Buffer capacity measures resistance to pH change, β = dCtitrant/dpH. The closed form of Van Slyke is
β = ln10 [ Kw/[H+] + [H+] + Ca Var(j) ], Var(j) = Σ αj j2 − (Σ αj j)2
For a monoprotic acid this peaks at pH = pKa with βmax = ln10 Ca/4 = 0.576 Ca (plus the small water terms). The curve of β (graph 4) is highest in the buffer zones and in the very acidic or basic ends, and lowest at the equivalence point, which is why the pH jumps there.
Indicators are weak acids with a coloured conjugate pair. Their colour is the mixture of both forms, with base-form fraction f = 1/(1 + 10pKin−pH); the eye sees a change roughly between f = 0.1 and 0.9, i.e. pKin ± 1. The endpoint error is the difference between the volume where f = 0.5 and the nearest equivalence volume. A good indicator has its pKin inside the steep jump; for acetic acid that is phenolphthalein, not methyl orange.
Temperature. Only the ion product of water is changed: pKw(T) = 4470.99/T − 6.0875 + 0.01706 T (T in K, an empirical fit), so a neutral solution has pH = pKw/2, which is 6.5 at 60 C. The pKa values are held at their 25 C values.
Numerical checks run in the page. (1) HCl + NaOH equivalence pH = pKw/2; (2) acetic acid start pH against the quadratic closed form; (3) half-equivalence pH = pKa; (4) the weak-acid equivalence formula; (5) numerical β from electroneutrality against the Van Slyke closed form; (6) oxalic acid α(H2A) = α(A2−) at (pK1+pK2)/2; (7) the charge-balance residual for phosphoric acid; (8) an inverse solve for the volume at pH 7; (9) pKw at 25 C; (10) the species fractions sum to one.
Simplifications. All activities are taken as 1 (ideal solutions; real strong-electrolyte solutions above about 0.1 mol/L deviate by 0.05 to 0.1 pH units); pKa values are typical 25 C literature values and are not corrected for temperature or ionic strength; the indicator takes part only as a colour (its own acid-base buffering is ignored; the 0.2 mL of indicator solution is counted only as dilution); CO2 absorption from air, the burette tolerance (about 0.05 mL), drop size variation and electrode response lag are ignored; the colour mixing delay in the 3D flask is purely visual. It teaches the shape of titration curves and the logic of the method, it is not a substitute for a laboratory measurement.