This is yet another one of my “This should just exist” projects – I’ve always loved the idea of objects that could be programmed ‘by hand.’ Think plug boards, or switches, or hand-punched cards. The RotoZipper is a scrolling text display that you can ‘program’ by filling in the squares on its drum with a dry-erase marker.
The RotoZipper is a fairly simple device: An arduino connects to a linear array of 8 infrared emitter / phototransistor pairs, and controls a stepper motor and an 8×8 LED matrix connected via SPI. A 3D-printed drum has a laser-printed grid wrapped around it, and then a layer of transparency-plastic is wrapped on top of that. The drum is then mounted on to a stepper motor, and as the drum spins, the arduino reads a column of pixels at a time and then shifts them onto the SPI display. The effect is like a tiny version of the Motograph “Zipper” (or, I guess, any of the zillion scrolling LED displays you see in shops and such).
Initially I had designed this with a somewhat elaborate ‘programming’ model, where I actually encoded instructions on the drum, could control individual pixels, direction of scroll, etc, but 1) I found that the drum is not super reliable, particularly under varying lighting conditions, and 2) the 32-instruction drum doesn’t actually leave a lot of room for encoding interesting graphics. Once I actually built it, I jettisoned the graphics-API approach for a simple in->out model which is both more fun to use and has more aesthetically pleasing fault-handling.
From the disassembled view, you can more clearly see the slightly-clever 3D printing that went into giving it a really tidy appearance – the drum is hollow, and the stepper motor is mounted inside so that it can attach to the top of the drum. This both hides the stepper, and allows for easy vertical adjustment of the drum. All of the wiring is the usual rat’s nest of point-to-point soldering or screw terminals.
The ‘teeth’ on the drum were originally for an optical break-sensor for horizontal alignment of the phototransistor array, but were relegated to vestigial steampunk flavoring when I wound up using an all-black column of pixels for alignment instead. Upon power-up, the arduino steps slowly until it detects the all-black column, then auto-centers on that and just does open-loop stepping of 1/32 of a rotation at a time.
Overall, I’m pretty happy that this turned out mostly how I had initially envisioned it (minus the too-clever programming idea), and it’s simple enough that I can occasionally get it out and update the drum with a new seasonally-appropriate image.