Opto Duet
Two 555 theremins that play each other, on one stripboard · By Onion Madder · Mess O' Pedals
Two copies of my 555 theremin on one board, coupled by nothing but light. One is the engine: its timing cap is cranked to 10µF so instead of screaming it ticks, and a bare LED flashes with every tick. The other is the voice: a stock audio theremin whose timing chain holds two photocells in parallel - one sealed face-to-face with the engine's LED, one facing the room. Every flash yanks the voice's pitch and lets go. The box chirps, the room light sets the key, your hands bend both, and there is not a single wire between the two oscillators. About 45 minutes at the bench, once you have the parts in front of you.
It is built and it works. The first attempt died at 90% when a copper strip lifted off a cheap board mid-solder. The second went together on the same cheap board with the iron turned down, and it came up on the first power-up: the mouth LED lights, the box chirps, and it sings from a 12V DC wall wart with ceramic discs in the three small cap positions. The layout above is that board.
What you'll need
- 2× NE555 timer, 8-pin DIP - spot it: NE555 printed on top, notch marks pin 1
- 1× stripboard, 9 strips × 26 holes or larger - a cheap board is fine, but turn your iron down. The first build of this died at 90% when a copper strip lifted off its backing mid-solder; the second went together on the same kind of board at a lower temperature, first try. Short dwell times, and do not lean on a strip
- 3× photocell (LDR) - the wiggly-line disc. Same type as the theremin guides; a pair that reads a few k lit and hundreds of k dark
- 2× LED, any color - both run bare, no resistor, and that is deliberate; see the trick below. The first is the engine's, sealed against a photocell to make the vactrol. The second is the indicator: same behind-the-cap position on the voice's half, but nothing is sealed to it, so it just flashes where you can see it
- 2× 1K resistor (brown-black-red) - one per timing chain, the same guard as every pot in the series: at full light there is still something for the cap to charge through
- 2× 100R resistor (brown-black-brown) - the output resistors; both boards meet the speaker through them
- 1× 10µF electrolytic - the engine's timing cap, the part that turns a scream into a tick. Stripe marks the minus leg, stripe to ground
- 1× 100n ceramic (printed 104) - the voice's timing cap
- 2× 10n ceramic (printed 103) - control-pin decoupling, one each
- 3× 100µF electrolytic - two output couplers, one across the rails
- 1× small speaker and a supply: the pads are labeled +12V, which is what the board in the photo runs from - a 12V DC wall wart, center-negative like every other pedal here, and what I would build it on. A 555 chip will run from 4.5V, but this box wants about 6V and up: below that the LEDs stop flashing, because they light off the swing through the coupling caps and a blue one needs roughly 3V of it before it lights at all. A fresh 9V battery runs it; a tired one takes the LEDs out first and looks exactly like a fault. The pitch and tick rate shift with the supply too
- Heat-shrink big enough to swallow the LED and one photocell face to face - that is the whole vactrol
- Optional but worth it: a toggle switch for the positive supply leg, so the box has an off. It lives off the board, in the wire
The layout file is the guide
Like the 555 theremin layout, the build document for this one is the file itself: ↓ Download Opto_Duet.json - import it into Copper Bottom and the editor gives you the board picture, the placement walkthrough, the electrical checks and a printable build sheet. The layout was generated from the bench capture and machine-verified against it: every connection below was asserted against the strip-and-cut geometry before the file was written. Coordinates are deliberately not retyped onto this page; the editor is the viewer, so there is no display convention to get wrong.
The trick: the LED lives behind the cap
This is the discovery the whole box turns on, found by moving one bare LED strip by strip until the loop came alive. Put the LED on the engine's output strip and it just glows steady - twice over. Bare, it clamps the output at its own ~2V forward drop; and even resistored, a DC-coupled LED reports a level, and a feedback loop fed on a level finds a comfortable equilibrium and parks there.
Move it to the far side of the 100µF output cap - the strip between the coupling cap and the output resistor - and both problems vanish at once. The cap limits what a bare LED can draw, and a cap only conducts while the voltage moves, so on that strip the LED reports change. A loop fed on change has no resting point: if it ever sits still the LED starves, the photocell drifts, and the sitting-still is over. It has to hunt forever, at the tempo of the photocell's slow memory. That is why every classic opto-feedback synth AC-couples its lamp driver - and why this one was rediscovered at a bench with a lifted eyebrow instead of a datasheet.
If the LEDs fade, dim, or come back after a rest and then die again, look at your supply before you look at the board. They flash off the swing through the coupling cap, that swing tracks the rail, and a blue LED needs about 3V of it before it lights at all - while the 555s keep oscillating happily down to 4.5V. So the LEDs go dark first and the box carries on making noise, which reads as a wiring fault and is not one. Mine did exactly this on a dying 9V battery: rest it, it works for a minute, then fades. Back on the 12V wall wart it is fine.
The netlist - what the layout was verified against
This is the netlist embedded in the file, verbatim. It was written from the finished board, so checking that board against it can only agree with itself - what it is good for is carrying the circuit somewhere else, and giving your meter something to walk:
The off-board wiring
Fourteen pads leave the board. Everything with a face goes where its job says:
| Pad | Goes to |
|---|---|
| +12V / GND | The supply, one for both oscillators. Mine is a 12V DC wall wart, center-negative, through an on/off toggle in the positive leg - the switch is off-board and not in the layout file. A 9V battery snap works too |
| SPK_A / SPK_B | Speaker hot / return. Both boards mix at SPK_A through their own 100Rs - no extra mixing resistors, see below |
| LED2_A / LED2_K | The indicator. Same wiring as the first LED but on the voice's half - across the strip between C6 and R4, cathode to the ground rail - so it flashes with the voice. Nothing is sealed against this one; it is there to be looked at |
| LED_A / LED_K | The bare LED - anode to LED_A, cathode to LED_K. It seals face to face with the vactrol cell inside heat-shrink |
| LDR_V1 / LDR_P1 LDR_V2 / LDR_P2 | Four pads, two nodes. LDR_V1 and LDR_P1 are the same strip; so are LDR_V2 and LDR_P2. Two photocells bridge those two nodes, which is what puts them in parallel: the vactrol cell, sealed in heat-shrink with the LED, and the pitch eye, facing out of the box for room light and your hands. Take any upper pad and any lower pad for each cell - on my board the vactrol sits on LDR_V1 and the pitch eye on LDR_V2 |
| LDR_T1 / LDR_T2 | The tempo eye, one cell across the engine's two timing strips. It faces out of the box too: room light and your hands set the tick rate |
That pad doubling is the parallel wiring, and parallel is load-bearing: the lit cell wins, so each engine flash yanks the pitch up and releases it. In series they would politely average and the chirp would die. It also means the pad names are a convenience, not an assignment - nothing electrical changes if your vactrol lands on the pads labeled for the pitch eye.
Boxing it up
Mine lives in a 125B, horizontal: the two eyes and the indicator LED on the face, the power switch and a 1/4" output jack on the top edge. The two speaker pads feed that jack instead of a speaker - tip to SPK_A, sleeve to SPK_B - so the box plays through an amp.
Six holes, and none of them are fussy: 5 mm for each photocell and for the LED, 6.5 mm (1/4") for the toggle bushing, 9.5 mm (3/8") for the jack, and 8 mm if you want a barrel jack for the supply rather than passing the wall wart lead through a grommet. Wire that barrel jack center-negative. Keep every hole at least 12 mm in from an edge: the corner bosses and the lid lip live in there.
Check the plug before you power it, every single time. Pedal supplies are center-negative; most generic wall warts sold for everything else are center-positive, and they fit the same barrel jack perfectly. Backwards, the supply goes straight through both 555s and reverse-biases every electrolytic on the board, and there is nothing on here to stop it. I swapped to a center-positive plug without looking and killed a working board with it.
Die-cast aluminum is not a tin, and it does not drill like one:
- Pilot every hole at 1/8" and step up. A 3/8" bit started cold on a casting walks.
- Back the panel with scrap wood, clamp it, and drill through into the wood.
- Moderate speed, a drop of cutting oil, and let the bit cut. Die-cast is gummy: clear the swarf often and do not lean on it, because it grabs as the bit breaks through.
- A step drill is the easy way to the 3/8" jack hole and the 8 mm supply hole.
- Deburr both sides. The jack nut needs a flat seat or it will not tighten.
- Test-fit the jack and the switch before you drill the small holes - hardware varies more than drawings do.
- The cells and the LED go in on flying leads, so nothing inside has to line up with them. That is the whole reason this box is easy to drill.
Print at 100% / “Actual size”, never “Fit to page” - check the bar measures exactly 4″ before you touch a drill. The sheet is landscape on purpose: a horizontal 125B unfolds wider than a portrait page can print.
What the Hive would have added, and why this box doesn't
The Hive's mix bus runs a 10K and a 1µF NP cap per voice. Copying that here failed twice at the bench, both times for the same reason: the Hive's bus feeds a jack into an amp and its voices are DC-coupled, and neither is true here. A bare speaker is a current-hungry ~8 Ω load - 10K mixers hand it under 1% of the signal and the box goes silent. And each 555 board already carries its own 100µF coupler and 100R, which do both jobs. So: outputs join the speaker rail directly through their built-in 100Rs, nothing else. If this box ever grows a jack to an amp, that is where 10K mixers belong.
How it works, in one breath
Both halves are the same astable 555 you already know: charge through the 1K and the photocells, threshold, dump, repeat. The engine's 10µF makes its repeat rate slow enough to hear as ticks and see as flashes; the voice's 100n keeps its rate up where pitch lives. The LED behind the engine's cap converts each tick into a pulse of light; the sealed cell converts the light back into a resistance dip on the voice's timing node; the dip is a chirp. Two oscillators, one conversation, zero wires between them.
Things to try
- Retune the engine. The 10µF sets the tick rate - 4.7µF doubles the tempo, 22µF halves it. Same move as retuning a Hive voice.
- Retune the voice. Its 100n is the stock theremin value; the breadboard guide's cap-swap logic applies unchanged.
- If an LED ever dies young on the coupling node, ~100R inline should tame the edge pulses without killing the effect - untested, call it an experiment.
- Aim the eyes. Both outside cells respond to angle as much as light - mounting them as a creature's eyes is not just decoration, it is the interface.
- Add a jack. Line the bus out to an amp - and then bring the Hive's 10Ks back, because at that point they are correct again.
The 555 astable core is the same public circuit as my 555 Optical Theremin guides. The opto-coupled engine-and-voice arrangement - the LED behind the cap, the vactrol-plus-eye parallel pair, the chirp - is my own, found at the bench in August 2026. The layout, the file, and the words are mine. Build it, bend it, make it yours.