Build a Raspberry Pi Darkroom Timer and Enlarger Exposure Controller for Film Photography
Film darkroom work has a quiet but real overlap with the maker/electronics crowd — a lot of people doing home film development and printing are the same people with a 3D printer and a soldering iron already on the bench, and a surprising amount of darkroom gear is either expensive specialty equipment or genuinely primitive (a kitchen timer and a light switch). A Raspberry Pi-based enlarger timer closes that gap: precise exposure timing down to fractions of a second, repeatable multi-step "F-stop printing" exposure sequences, and a safelight-friendly display, built from parts that would otherwise be sitting in a project bin.
What the Timer Actually Needs to Do
- Switch enlarger lamp power on and off with tight, repeatable timing — the core function, and the one place where "close enough" isn't good enough, since print exposure is genuinely sensitive to timing consistency between test strips and the final print.
- Support F-stop timing increments, not just linear seconds — traditional darkroom exposure testing works in fractional f-stops (each full stop doubles exposure), and software that natively thinks in stops rather than raw seconds makes test strip interpretation and dodge/burn calculations dramatically easier than a plain seconds-based kitchen timer.
- A display and controls usable under safelight conditions — a dim red or amber display, large physical buttons or a rotary encoder you can operate without looking, since you'll often be working by feel in near-total darkness.
- Multi-step burn sequences for dodging and burning — triggering a sequence of different exposure times for different parts of a print, which is the feature that most clearly separates a purpose-built timer from a basic relay-and-countdown project.
Core Hardware
The lamp switching itself is the one part of this build that touches mains voltage, and it deserves the same seriousness as any other mains-switching project on this site: use a properly rated solid-state relay (SSR) sized well above your enlarger lamp's actual current draw, mount it with real clearance and strain relief, and never substitute a logic-level signal relay rated for low-voltage DC into a mains circuit.
- A Raspberry Pi Zero 2 W is plenty of compute for this — there's no reason to use a full-size Pi 4/5 unless you want the extra GPIO headroom for future features.
- GPIO drives the SSR's control side directly through a current-limiting resistor (or a simple transistor driver stage if your SSR's input current exceeds what a GPIO pin should supply directly) — the SSR's output side does the actual mains switching, fully isolated from the Pi's logic.
- A small I2C OLED or character LCD, run with a red/amber filter or simply dimmed in software, gives you a safelight-safe display.
- A rotary encoder with a push function is the natural control input for stepping through f-stop increments and confirming an exposure — much easier to operate by feel than a touchscreen in the dark.
- A piezo buzzer gives audible exposure start/stop feedback, useful since you often won't be looking directly at the unit during a burn sequence.
Software Approach
This is a straightforward Python project on Raspberry Pi OS — no real-time constraints beyond "flip a GPIO pin reliably within a few milliseconds of the scheduled time," which standard Python timing handles fine for darkroom exposure purposes (print exposures are typically several seconds to tens of seconds; millisecond-level jitter is not a problem here the way it would be for, say, motor control).
- Store a base exposure time and let the user dial in adjustments in fractional f-stops (commonly 1/3-stop increments); convert stops to seconds with the standard doubling relationship (each full stop = base time × 2, each 1/3 stop ≈ base time × 2^(1/3)) rather than hand-typing seconds.
- Implement a simple step sequencer: a list of (duration, which-areas-masked-by-the-user's-hand-or-card) steps that fire in order with the buzzer marking each transition, so a dodge/burn sequence becomes a saved, repeatable program instead of mental math under safelight.
- Log each print's final settings (base time, adjustments, burn steps) to a simple file or SQLite database, tagged with the negative/frame it was for — recreating a good print later is otherwise a real memory challenge weeks after the fact.
- Default to a dim, low-contrast display theme and make brightness adjustable in software — even a "dim" default OLED can be enough to affect your dark-adapted vision if you haven't tuned it down.
Enclosure Considerations
A 3D-printed enclosure is the natural choice here, and it's worth designing deliberately around darkroom conditions: light-tight seams around the display cutout (stray light leakage from a display is a real print-fogging risk in close proximity to light-sensitive paper), a matte, non-reflective finish or paint, and physical button/knob placement you can find by feel without looking down. Mount the SSR and any mains wiring in its own isolated compartment within the enclosure, physically separated from the low-voltage Pi and display wiring, not just electrically isolated.
Parts List
- - [Raspberry Pi Zero 2 W](https://www.amazon.com/s?k=Raspberry%20Pi%20Zero%202%20W&tag=42308b-20)
- - [Solid state relay, mains-rated AC output](https://www.amazon.com/s?k=solid%20state%20relay%20AC%20mains%20rated%20SSR&tag=42308b-20)
- - [I2C OLED display module, small](https://www.amazon.com/s?k=I2C%20OLED%20display%20module%20128x64&tag=42308b-20)
- - [Rotary encoder with push button](https://www.amazon.com/s?k=rotary%20encoder%20push%20button%20KY-040&tag=42308b-20)
- - [Piezo buzzer module](https://www.amazon.com/s?k=piezo%20buzzer%20module%205V&tag=42308b-20)
- - [Red/amber acrylic display filter sheet](https://www.amazon.com/s?k=red%20acrylic%20filter%20sheet%20thin&tag=42308b-20)
- - [Mains-rated enclosure junction box for the SSR compartment](https://www.amazon.com/s?k=mains%20rated%20junction%20box%20electrical%20enclosure%20small&tag=42308b-20)
- - [Panel-mount IEC power inlet with fuse](https://www.amazon.com/s?k=panel%20mount%20IEC%20power%20inlet%20fused&tag=42308b-20)
This is a genuinely practical crossover project between two hobbies that already share a lot of the same person — the electronics and enclosure work are well within the territory this site covers every day, and the result is a tool that's measurably better than the two most common alternatives (an expensive purpose-built darkroom timer, or a kitchen timer and a prayer) for a fraction of either's cost in parts you may partly already have on hand.