Project: Talking Darkroom Timer

by on Jul.04, 2016, under Darkroom, Projects

As some of you might already know, the Hacklab has a photographic darkroom where we do processing of many kinds of B&W and colour films. All of these processes require a series of fairly precisely-timed steps, where the film or paper is exposed to various chemical baths. A number of these processes require complete darkness (no red safelight!), so you can’t have a timer that has a readable display. Commercial timers solve this by beeping once per second, so you know they’re still timing. As you can imagine, this gets very annoying after an hour or more of working in the dark!

Old Darkroom Timer

I set out to design a new timer that would be less annoying and more functional. My original design goals were:

  • Able to store a sequence of steps and run through them in order automatically without having to reset the timer between each one. Normally resetting the timer for the next stage has to be done by feel using knobs, which is frustrating and often error-prone.
  • Some sort of text display for use when the lights can be on, to show what step is being run and how much time is left. The process definition would include which steps were done with lights on and which with lights off, so the display would turn on and off automatically.
  • More pleasant sound when timing, and less often. A gentle click every 10 or 15 seconds was my first thought.
  • Large easy-to-hit button to start the next step of the process. Our existing timer was hard to activate in the dark, and I ideally wanted something I could hit with my hip when my hands were in chemical baths.

I started putting a design together around an Arduino at first, but then realized that if I used a Raspberry Pi it would be more flexible and easier to change later, as well as being mostly off-the-shelf parts rather than custom hardware. In addition, the timer could talk to the user to tell them how much time was left rather than just clicking.

I went to our local electronics store and picked up a Raspberry Pi and an Adafruit LCD Plate, to use for showing the user various menus and timing information. I threw together a small Ruby application which did read a CSV file and proceeded through each step of the process as the user requested it, reading out the names of the steps and timing information as it went using the Festival speech synthesizer. The concept seemed to work well, so I lasered up a panel with some buttons on it to control the system, and installed it in the darkroom. The voice quickly got annoying and was fairly difficult to understand, so I switched it to use the free-for-small-users CereVoice service. Since I didn’t want a blip in our internet service to cause the timer to cease functioning mid-way, it pre-renders all of the voice clips into MP3 files ahead of time, then plays these as required.

Darkroom Timer Display

Darkroom Timer UI Panel

I used it a few times and worked out the bugs, but there was still no good way to get new processes into the system, or for users of the darkroom to make their own custom processes. I thought about creating a web interface to add new processes, but scrolling through a long list of them to find the one you wanted seemed like it would be annoying even if I did that. I eventually realized that the amount of information required for a full process was fairly small, and could be stored in a 2D barcode. I found a 2D barcode scanner designed for embedded applications on eBay, and hooked it up to the Raspberry PI using a MAX232 chip on a proto plate. I wrote a little web tool to generate a 2D barcode using the open-source bwip-js JavaScript service. We already had instruction sheets in the darkroom that listed each step you had to do and for how long, so I added barcodes containing this information to each of these.

Darkroom Instruction Sheet

Darkroom Barcode Scanner

The timer has been in use in this form for a couple months now. To use it, you turn the timer system on, scan the barcode for the process you want to run, and it then automatically times each step, pausing for you to change chemistry in between each one. It works very well, and has made long colour printing/developing sessions in the darkroom much more pleasant! The source code is all available on GitHub, including the barcode generator tool.

I’d still like to add some more features to it, when I get a chance. The talking and clicking can get annoying over time when you’re doing a process with the lights on, so I’d like to add a “preferences” barcode to the system. It could store things like a preferred voice to use, whether to talk when the lights are on, and whatever other things we can think of. Also, sometimes processes can “overlap” so you’re finishing washing one sheet while starting to develop the next one. The timer doesn’t handle this right now, so processing can be a bit less efficient time-wise than it could be since you have to wait for one to finish before starting the next. Adding the ability to have two processes running at the same time would fix this.

Comments are closed.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!