← Piezo Motor / Articles
§8Article · 8 of 13

Independent Research · 3D-Printed Piezo Stick-Slip Motor

Measuring Micrometers at Home: A Michelson Interferometer With a BPW34 Photodiode and a Rigol Scope

Published · Last updated

A perfectly working stick-slip motor on my bench, stepping happily at 5 Hz, moves a few micrometers per second. The human eye cannot see that. For about a month I ran experiments without fully realizing they were blind, and §M10 tells that story properly. The short version is that I didn't need a faster motor. I needed better eyes.

Commercial laser displacement sensors and interferometer systems are precision-instrument money. But the physics of interferometry doesn't know what you paid, so I built a Michelson interferometer out of hobby parts and wired its output into the $449 oscilloscope from §M3a. One cycle of the pattern it makes is 260 nanometers of travel, which is the resolution this project needs and cannot buy. It works. It has also never been pointed at the motor, because the bench day booked for that went somewhere else, and that is the state of it as I write this in late August. If you can align two mirrors and solder a photodiode, the build in this chapter is yours to copy.

01

What a Michelson does, in one paragraph

Split a laser beam in two with a 50:50 beamsplitter. Send one half to a fixed reference mirror and the other half to a mirror mounted on the thing that moves. Recombine the reflections and the two waves interfere. Move the measurement mirror and the light path changes by twice the motion, walking the combined beam through bright-dark-bright fringes. Every full fringe cycle equals half a wavelength of travel, and at my laser's 520 nm that's one fringe per 260 nm of slider motion (Derived: λ/2). Count fringes over time and you have displacement versus time, with resolution far below anything mechanical.

02

The parts, and the two-laser decision

The optics kit: two green laser modules, a 50:50 beamsplitter, mirrors, an ND filter, and a five-pack of BPW34 photodiodes (optics prices weren't recorded in the BOM, so I won't invent them, and none of these are precision-branded parts) [project CLAUDE.md §2].

Two lasers, because I hedged. Module (a) is a 532 nm, 30 mW unit sold for stage lighting. Powerful, but Class 3B, which means an ND filter (neutral density, a grey glass that simply attenuates the beam) is mandatory. Cheap green modules like it are usually DPSS (diode-pumped solid state, an infrared diode driving a crystal that halves the wavelength), and the classic caveat is that some of that infrared can leak out the front, invisible, where nothing warns you it is there. Module (b) is a 520 nm, 5 mW direct-diode dot module with a copper head, 7.9 mm in diameter and 18 mm long (listing string "7.9X18 Green 5mW 1PC"), running on 2.3–5 V [builder, 2026-08-07]. Class 3R, tamer, but as a bare diode its coherence length is expected to be short, which for an interferometer means the two arm lengths have to match within roughly millimeters or the fringes wash out [project CLAUDE.md §2].

The hedge got exercised immediately. The 532 nm unit actually went in first, at the very beginning, and got scrapped for exactly the reason it was suspect, too much power to work around comfortably. The tamer 520 nm module replaced it and never left. It's the one in the rig today [builder, 2026-08-07]. (Its 3D-printed mount is the Onshape Boolean case study from §M5.) The fringe math is wavelength-specific, so the analysis script takes the wavelength as a parameter, 260 nm per fringe at 520 and 266 at 532. Mixing that up would silently scale every measurement by about 2.3%.

A safety line, kept short. Even 5 mW deserves respect, and the 30 mW unit is genuinely hazardous. ND filter always in the path, no eye-level beams, and treat any cheap DPSS green as if it also carries invisible IR unless proven otherwise.

03

One photodiode, five resistors

The detector is a BPW34 photodiode, reverse-biased, feeding a 50 kΩ load resistor, and the voltage across that load goes straight into the DHO804's 1 MΩ input. Brighter fringe, more photocurrent, more volts. The fringe pattern becomes a waveform on CH1 (wiring diagram, bpw34_wiring_diagram.svg).

The 50 kΩ load is actually five 10 kΩ resistors in series, because I wanted roughly 47 kΩ and had none in stock. I checked the parts bins twice [project CLAUDE.md §2]. I'm keeping that detail in because budget metrology is made of exactly this.

04

Alignment

Getting fringes means making two reflected beams retrace and overlap almost perfectly while their path lengths agree to within the diode's short coherence. In practice that's long sessions of steering dots onto dots. The project's alignment guides (interferometer_alignment_visual_guide.svg, fringe_pattern_and_calibration_guide.svg) are the distilled version of what worked.

Two problems show up in the records. First, satellite reflections. Every glass surface makes its own faint beam, and the bench collects a constellation of impostor dots. Pinhole cards to identify the real beams and a deliberately tilted ND filter to throw the impostors off-axis managed them, though they were never fully eliminated. Second, arm matching with no calibrated hardware. Mirror 2 sits on a plain sliding stage with no markings, so equalizing the arms was iterative nudging rather than dialing a number [project CLAUDE.md §2].

It took three to five sessions before alignment stopped being luck and started being a workflow. The only way through was practicing the same moves until they got faster [builder, 2026-08-07]. And the failure that taught me most wasn't getting fringes. It was keeping them. More than once the pattern appeared, held, and then vanished the moment the stack started driving, most likely because nothing on this rig is truly rigid. Stiffer, properly locked fixturing is the upgrade this instrument needs most, because alignment you can't keep is alignment you don't have.

05

July 6: first fringes

The first fringes appeared on 2026-07-06. The capture files are stamped 23:27, which tells you what kind of evening it was. And they weren't the textbook straight-line fringes. They were a bull's-eye, concentric rings, which is what you get when a diverging diode beam meets a residual arm mismatch, a wavefront-curvature signature rather than a mistake. Usable anyway. Park the photodiode at the pattern's center and the rings breathe past it as bright-dark cycles, which is all the electronics ever sees [project CLAUDE.md §2].

What I remember from that night is simpler than the optics. Actual patterns on the wall, extremely small but with edges more distinct than anything I'd ever produced, and the realization that a thing built at home out of plastic, printers, and lasers actually worked [builder, 2026-08-07].

Then came the test that made it real. Tap the measurement mirror with a fingertip and watch the scope trace dance. Mechanical motion in, electrical signal out, optics through photodiode through scope confirmed in one gesture. Even so, the script that counts fringes has still never seen real ones.

06

From pattern to numbers

The scope half of the pipeline is the direct descendant of the Ex45 SCPI exercise (§M3a). interferometer_capture.py pulls the photodiode waveform off the DHO804 over USB and saves CSV, and fringe_to_displacement.py counts fringe cycles and multiplies by λ/2, turning volts-versus-time into displacement-versus-time. Its self-test passed 2026-07-02, before the optics were even aligned. Software ready before hardware, for once [project CLAUDE.md §2].

The instrument's first assignment, on paper, was validating the actuator itself, driving the bare stack slowly and counting fringes against the datasheet expectation (about 2.0 µm at 15 V, Derived from the verified 20 µm @ 150 V [9], which at this rig's 260 nm per fringe is a little under eight fringes). I have to be careful here, because the project's own records list that check as still pending (design_notes §18, first-motion debug order, item 2), and the capture files from the alignment night are flat traces. What the records do support is the tap test, which proved the sensing chain, and then the motor itself moving (§M11), which proved the stack. The bare-stack fringe count is still owed. The instrument's much bigger assignment, reading the slider itself at an expected 9–19 fringes per second, is also still ahead of it, for the reason in the next section.

07

Current status

As I write this, in late August, the interferometer still needs realignment. It was aligned on the old rig, and the measurement mirror has not yet moved onto the new slider. The bench day that was meant for that went to the motion diagnosis instead (§M10, §M11), so every August travel number in this write-up was read off a ruler and a strip of masking tape, not off this instrument. Its limits are real too: a homemade Michelson on a desk measures vibration, drift, and air currents along with everything else, satellites were managed rather than eliminated, and the uncalibrated stage means arm-matching stays craft rather than procedure. But it was never meant to be a metrology lab. It was meant to do one thing, which is to turn guessing into knowing for the price of some optics, some resistors, and a mid-range scope.

The numbers in §M11 came off a ruler, which is why the project is still guessing about its own stack. The ones in §M12 are meant to flow through this photodiode instead, and moving the mirror onto the slider is the first job of that phase.