Re-animating Antiques With Arduino
A Techie Decorates His Living Room
Living a hundred feet from the San Francisco MUNI ‘J’ line is a great convenience getting to work, but the train’s unpredictability led me to constantly check online to see when the next train would arrive.
I thought that a homemade sign at home to show train arrivals could be a fun project and save time. I could hang out around the house until the right moment I needed to leave to catch the train without constantly checking my phone or computer. I had a gritty brick wall in the living room that needed decorating. If I could re-animate something vintage that fits the space, it could help me get to the office and provide a nice backdrop for the room.
After originally searching for old clocks and model trains, I came upon antique elevator indicator on eBay from a New London Connecticut hotel built in 1896. I ordered it and set about searching for what I need to make it work. I bought an Arduino electronics toolkit for brains, a few motors for the muscle, and an old metal safe deposit to hide the electronics and mount everything.
I was surprised by how heavy the indicator plate was when it arrived. It was mostly made of iron. Each number digit was made of brass and screwed into thin track so that it could easily be repositioned. The back of the brass needle was already threaded, and I discovered it was a standard thread size still used today. Without access to a machine shop, I hoped to go to find the right parts needed online and at the hardware store to bring it to life.
For mounting the indicator, L brackets were mounted into holes drilled on top of the metal safe deposit box. I didn’t feel good about drilling a hole the antique base plate, so I used two strong magnets on the back of the L brackets to hold the base up. It held tight to the iron and made it easy to remove and re-attach.
A stepper motor was mounted with machine screws and bolts. Initially the motor was connected directly to the dial, but it didn’t have quite enough power to overcome the force (0.3 Newton-meters of torque) pressing down on the needle when it was in the sideways position. A set of gears with a 3 to 1 size ratio tripled the force.
For coupling the needle to the motor, many parts were easily located online. However, finding parts that matched the sizes needed was hard. The motor output is a metric 5 mm diameter, while the hole in the antique base and the gear sizes were based on inches. I found a shaft coupler online that connects the 5mm motor output to a 1/4 inch rod that slides into the small gear.
The most important component was the main rod connecting to the needle, which needed to be the right diameter and length. On custom manufacturing site MISUMI I was able to configure and order a custom rod that was threaded on one end for only $25. The rod screws into the original back of the needle, then extends through a hole in the base and and into the the big gear.
Electronics and Software
For the electronics I used the Arduino Ethernet toolkit from AdaFruit and a motor shield which is a motor controller which adds support for stepper motors and servos. The two components needed to be soldered together.
I purchased several different motors to try. Servos (motors that know what their state and position is) would be the natural choice for the project but they were far too loud for something mounted in the living room. Instead I used the NEMA-17 Stepper motor, which was powerful and relatively quiet.
I ran the mounted motor through some test sequences and discovered that each number on the indicator wasn’t well spaced. To fix the problem I had to measure the angle of each number on the antique base and type it into a reference table. Now the software would know that the 7 and 8 are extra close together and just a few notches of spin on the motor apart.
Arduino isn’t the best for processing text data, so I kept the time computation on a separate server in the cloud. On that server I wrote a Java code to access the NextBus API, a service that lets you find the real-time wait times for a particular bus/train stop. The script interprets the results from an XML file format and extracts the wait times for each arriving train. It returns the number of minutes wait for the closest train in the desired direction. If the train is less than a minute away, it returns the time for the following train. Using the Arduino Ethernet library I had the circuit board connect to the cloud server to get the wait time and then move the motor to adjust the dial.
When the elevator indicator arrived from the eBay seller, a heavily rusted up-down button was included. I cleaned it by soaking for 24 hours in vinegar and scraping the rust off with a toothbrush. Originally I hadn’t planned on using it but it was too beautiful to leave out. I mounted it on the brick connected it to the Arduino. The software was altered so that when the UP button is pressed the indicator shows the wait time for the going uptown, and the DOWN button shows the wait for the downtown train. If no button is pressed for 90 minutes, the device goes into idle mode and moves to the zero position.
The far left digit on the indicator was ‘B’ for basement, which seemed confusing. I removed it and replaced it with San Francisco MTA logo made of brass.
I was able to make it on the Shapeways 3D printing service by uploading a black and white image of the logo. Their 2d-to-3d service automatically made the dark parts of the logo at a different depth. I had Shapeways manufacture the model in unfinished brass to match the rest of the numbers.
There are all sorts of interesting old items on ebay that could be re-animated into the digital age. In addition moving parts with motors, other customization methods using indicator lights, digital displays, or video projections can be used.
[I’d love a commission to do another one for a home or public space. Contact me via Twitter.]
For improving the existing project, it could be integrated with Apple’s ‘HomeKit’ or another Internet of Things platform, so it could be easily switched to other uses, such as a pasta timer.