Two adjustable end mirrors · arm lengths 125–175 mm with a micron fine adjust · 405–700 nm laser · trans and refl fringes on two white screens · 1 m × 1 m table, M6 on 25 mm grid
In short: A Michelson interferometer splits a laser beam in two, sends the halves down two arms and recombines them. The light comes out two ways, and each lands on its own white card. Moving or tilting either end mirror by less than a hair's width shifts the bright and dark stripes, and where one card is bright the other is dark.
Arm X (mirror EX)
Arm Y (mirror EY)
Coarse moves the whole mirror mount along its arm (0.1 mm steps, like a translation stage). Fine is a piezo-like push in micrometres: one bright-dark-bright cycle per λ/2 of mirror travel. Tilts are in µrad. In the 3D view: drag a knob up or down to turn it; grab the mirror mount or its post and drag along the arm to slide it (hold Shift while dragging for the fine adjust).
Beam splitter and arm balance
An unequal beam splitter dims the trans pattern (peak 4RT of the 50:50 value) but its fringes still go fully dark: both arms reach that port with the same weight R·T. Weakening one arm (ND filter, poor mirror) is what lowers the contrast. Light returning toward the laser (refl) loses contrast with either. Exposure is fixed to the ideal 50:50 case so you can see the dimming. Buttons are the stock Thorlabs 1″ non-polarizing cubes for 400–700 nm (R:T); the slider in between is a what-if. Stated ratios hold to about ±5 % and differ slightly between s and p polarization.
Dust
Each speck blocks a tiny disk of light. By Babinet's principle that is the same as adding a weak wave of opposite sign spreading from the speck; it interferes with the beams and prints small ring-shaped "bullseyes" on the screens. Dust upstream of a lens (on the beam splitter) makes bigger bullseyes with more rings, because the lens magnifies them; larger specks make stronger bullseyes, tiny specks faint, wide ones.
Optics: both splitters are 1″ non-polarizing cubes on fixed platforms and pedestal posts. A 10:90 (R:T) pickoff cube (BS025) sits in the input beam and sends the light returning from the BS to the refl screen. An f = −15 mm diverging lens 80 mm after the BS expands the trans beam, and a second one 80 mm after the pickoff expands the refl beam. Both screens are 260 mm beyond their lenses.
The two ports are complementary: where trans is bright, refl is dark (energy is conserved at a lossless beam splitter). The refl screen gets only 10 % of the returning light (the BS025 pickoff cube), so it is shown with its own exposure (about 10× brighter than it would look).
Each bright-to-bright period is λ/2 of mirror travel. Trans (solid) and refl (dashed) are out of step by half a period. The marker is the current fine setting.
A hands-on alignment trainer for the classic Michelson interferometer. It shows how the fringes on a screen respond to the two things you control in the lab: each arm's length (coarse, by millimetres, and fine, by fractions of a wavelength) and each end mirror's tilt (yaw and pitch). It shows both output ports side by side, so you can see that they are complementary, and why the laser's wavelength and coherence matter.
1. Two-beam interference at two ports. Each screen shows I = |E_X|² + |E_Y|² + 2·V_c·Re(E_X E_Y), where V_c is the coherence factor. For a lossless beam splitter the Stokes relation r′ = −r puts an extra π between the arms at the trans port and none at the refl port, so I_trans + I_refl is constant: the patterns are complementary.
Handled:* each arm's complex field is computed analytically at every pixel (240 × 240 per screen view, 160 × 160 for each 3D card texture). Powers per arm: 5 mW × 0.90 (pickoff cube) × 0.25 at the trans screen, and × 0.10 more at the refl screen. The π is added to arm X at the trans port.
2. Chief-ray trace with real 3D tilts. Each arm's central ray is traced from the laser through the pickoff, to the 45° beam splitter, to the tilted end mirror and back to the splitter. For the trans port it continues through the lens 80 mm after the BS to the screen 340 mm from the BS (260 mm after the lens); for the refl port it travels back to the pickoff, reflects (10 %, cube hypotenuse), passes the lens 80 mm after the pickoff and lands on the second screen 340 mm from the pickoff.
Handled: mirror normals n = (−1, −tan yaw, tan pitch) for EX and (tan yaw, −1, tan pitch) for EY; reflection d′ = d − 2(d·n)n; exact ray-plane intersections. The optical path length (OPL) is the sum of segment lengths; the thin lens adds −h²/(2f) and bends the ray by −h/f, where h is the ray's offset from the lens axis.
3. Gaussian beam per arm. The laser waist w₀ = 1.0 mm (a 2 mm beam) sits at the aperture. Complex beam parameter q = z + i·z_R, z_R = π w₀²/λ; free space q → q + d; thin lens 1/q → 1/q − 1/f; amplitude factor q_before/q_after on each free-space step (this carries the Gouy phase).
Handled: the q of each arm is propagated along its own unfolded, aligned path to each port (segment lengths taken from the aligned chief-ray trace, lens where it sits), so the two arms differ slightly in curvature when their lengths differ. With a 2 mm beam (z_R ≈ 5.9 m at 532 nm) and the lens after the recombination, this curvature difference is tiny, so the patterns are straight fringes set by the mirror tilts, not rings.
4. Field on the screen. For an offset ρ from the arm's chief-ray hit point: E = A·exp(−i k ρ²/(2q))·exp(−i k (ΔOPL + d·ρ)), with 1/q = 1/R − iλ/(πw²).
Handled: closed form. Straight fringes come from the relative tilt of the wavefronts. The number of fringes across the spot is fixed before the lens (about 2w·2θ/λ for a mirror tilt θ); the lens only magnifies the pattern (about 18.4× here).
5. Fine and coarse length. The mirror position is L = 150 mm + coarse + fine. One full bright-dark-bright cycle needs a mirror move of λ/2.
Handled: the same trace and Gaussian model are re-run with the new length (no special-case formula).
6. Coherence. V_c = exp(−(OPD/L_c)²), with OPD the chief-ray path difference.
Handled: L_c = ∞, 300 mm or 2 mm (ASSUMED illustrative values). With the multimode option, fringes vanish a millimetre or two away from equal arms.
7. Dust (Babinet's principle). A speck of radius a blocks a small disk of the local field. That equals the unobstructed field plus a weak wave of opposite sign, −E_local, leaving the speck. This wave spreads (far-field half-angle ≈ λ/(πa)) and interferes with the main beams, whose curvature at the screen differs slightly from the speck wave's, giving Fresnel-zone rings of radius ≈ √(n λ R_eff).
Handled: each speck is a Gaussian of 1/e amplitude radius a (same area as the disk) carrying −E_local of each arm separately (coherence kept per arm); its complex q is propagated from the speck (80 mm before the lens, or on the lens exit face) through the lens to the screen, its centre follows the local ray, and its phase includes the paraxial path to the screen. Specks are seeded random positions within 2.5 mm of the beam axis, log-normal sizes around the chosen diameter. Only the screen pixels within 3.5 beam radii of each speck's footprint are updated, so 120 specks per optic stay interactive.
8. Display. Colour from wavelength (Bruton-style piecewise RGB); screen brightness = card grey × (1 − 0.55·t) + laser colour × t, with t = 1 − exp(−I/I_ref) and I_ref = 0.6·(I_X,peak + I_Y,peak), so a fully constructive peak is near saturation and dark fringes show the grey card.
Handled: each screen's exposure is fixed by its own beam powers, not by the current pattern, so turning the fine adjust visibly dims and brightens the spots in opposite senses.
9. Unequal beam splitter and arm imbalance. For a lossless splitter with power reflectance R and transmittance T = 1 − R, and arm round-trip power returns t_X, t_Y (mirror reflectivity times any filter, passed twice), arm X is transmitted out and reflected back to the trans port, arm Y the reverse, so both arrive with weight R·T: I_trans = R·T·[t_X + t_Y + 2√(t_X t_Y) cos Δφ]. The peak is 4RT of the 50:50 value (1.00, 0.96, 0.84, 0.64, 0.36 for 50, 60, 70, 80, 90 % R), but the visibility V = 2√(t_X t_Y)/(t_X + t_Y) does not depend on R at all. Toward the laser the weights are T² and R²: I_refl = T² t_X + R² t_Y − 2RT√(t_X t_Y) cos Δφ, with V = 2RT/(R² + T²) for equal arms (0.92 at 60/40, 0.47 at 80/20). For t_X = t_Y = 1 the two ports add to 1 at every Δφ (energy conservation). An ND filter of round-trip transmission 25 % in one arm gives V = 0.80 at both ports.
Handled: each arm's field amplitude at each port is scaled by √(weight) before the per-pixel interference sum, so tilt, coherence and dust effects combine with the imbalance automatically. The screens and the centre-brightness trace keep the 50:50 exposure, so dimming shows. To recreate: multiply each arm's field by √(R·T·t) at the trans port and by T√t_X or R√t_Y at the refl port; keep the Stokes π on arm X at the trans port.
src/mf_model.js: geometry, mirror normals, chief-ray trace with OPL, Gaussian q propagation, screen field, intensity map and wavelength-to-colour. Pure functions; runs in Node.src/mf_app.js: knob dragging, mount/post dragging along the arms (raycast onto a horizontal plane, Shift for fine), dust specks drawn on the optics; three.js bench (table, kinematic mounts on sliding carriages, laser, pickoff and beam dump, two lens mounts, two white cards with the live patterns as textures), controls, readouts, knob dragging and the centre-brightness traces.src/clamps.js: the shared post/fork clamp solver; the mirror posts re-clamp as the carriages slide.src/build.py inlines everything into michelson_fringe_bench.html.cd src && python build.py, then open michelson_fringe_bench.html; or node -e "require('./mf_model.js')" to use the model directly.| Parameter | Value | Source |
|---|---|---|
| Arm length (nominal) | 150 mm; coarse ±25 mm; fine ±5 µm | design choice |
| Laser waist, power | 1.0 mm at the aperture (2 mm beam), 5 mW | design choice |
| Laser to BS | 200 mm | design choice |
| Wavelength | 405–700 nm | user setting |
| Pickoff | 10:90 (R:T) non-polarizing cube, Thorlabs BS025, hypotenuse at 45°, 130 mm before the BS | Thorlabs BS025 (stated 10:90 ± 5 %, 400–700 nm) |
| Expanding lenses | f = −15 mm, 80 mm after the BS and 80 mm after the pickoff | design choice |
| Screens | 340 mm from the BS (trans) and from the pickoff (refl), 260 mm after each lens; cards 100 × 100 mm | design choice |
| Beam splitter | ideal 50:50, zero thickness | ASSUMED |
| Coherence length | ∞ / 300 mm / 2 mm | ASSUMED |
| Tilt range | ±2000 µrad per axis | design choice |
| Dust | 0–120 specks per optic, 5–200 µm typical diameter, on the BS/pickoff faces (80 mm before the lenses) or on the lens exit faces | user setting |
| Screen sampling | 240 × 240 per view, 160 × 160 per 3D texture | design choice |
Table 1000 × 1000 mm, M6 on 25 mm grid; beam height 76.2 mmLaser visible laser module (wavelength selectable in the model), 2 mm beam diameter (waist 1.0 mm at the aperture), 5 mW, 200 mm before the BSPickoff 1″ 10:90 (R:T) non-polarizing cube (Thorlabs BS025) on a BSH1/M platform and pedestal post, 130 mm before the BS, plus a beam dump for the 10 % of the input it reflectsBS 1″ 50:50 non-polarizing cube (Thorlabs BS013; other stock ratios BS025 10:90, BS019 30:70, BS028 90:10) on a BSH1/M platform and pedestal post. A cube puts the same glass path in both arms, so no compensator plate is needed (the model treats it as ideal)EX, EY Ø1″ broadband dielectric mirrors in KM100-type kinematic mounts, each on a translation stage stand-in (±25 mm) with a piezo-like fine adjustLenses two ؽ″ plano-concave, f = −15 mm, in lens mounts: 80 mm after the BS (trans) and 80 mm after the pickoff (refl)Screens two 100 × 100 mm white cards on posts, side by side, 340 mm from the BS (trans) and from the pickoff (refl)Posts Ø12.7 mm posts in post holders on BE1/M pedestals, CF125C/M clamping forks on M6 holesShapes are simplified stand-ins with datasheet-like footprints. Verify part numbers before buying; Class 2 / 3R visible lasers only.