StoryPhone
Fall 2021
One of my favourite projects to date! My uncle gave me an old rotary phone he found up at his cottage, wondering if I wanted to do anything fun with it. At first it felt a bit meh - I could adapt it to work on a touch-tone line, which is sort of neat, I guess. Then, like a bolt of lightning to the face, I realized a WAY better project - adapt it as a story-telling device to give to my 4-year-old cousin!
I wanted to put the ringer on a remote so my uncle could press a button in another room and get the phone to ring ("oh, sounds like Jon's calling you!"), and I'd record her favourite stories, assigning them to each of the numbers on the rotary dial. Initially I thought it'd be pretty cool to also have the phone remain with a regular telephone cord - i.e., be powered by the phone lines - but after digging into that a bit more, using phone lines as a power source just didn't feel like it was worth the trouble.
Step 1: Take everything apart
Not always the most fun step - there were a lot of cobwebs, mouse poops, and nut shells inside the phone, somehow, from years of being indirectly exposed to the wild. Lots of dusting and wiping required.
The mysterious electro-mechanical control box inside is pretty neat. To think that they had to build these very robust systems without modern microcontrollers - it warms my heart a little. I also love how they crimped connectors for all the wiring, so things could be replaced and adjusted easily - what a departure from modern design! Someone with basic knowledge could actually repair this device.
I worked to figure out what parts of the telephone most of the wires connected to, so I could repurpose those connections. Since I bet every rotary phone is different, I think this process needs to remain somewhat manual and exploratory.
Step 2: Start mucking about
Underneath the rotary dial there was lots of space to add electronics - woohoo! Since the existing wiring was all nicely crimped, I decided to pop in a terminal block under the dial to facilitate my electrical adaptations.
First thing's first: let's get 5V power in here. I disconnected and removed the phone line, and ran a barrel adapter cable in its place.
Step 2a: Ringing the bells
For a while I tried to get the original actuator to drive the phone's bells. The primary challenge was the higher voltage required, and I quickly realized it could turn into quite a deep rabbit-hole. So instead, I decided to remove the existing system and installed a simple 5V linear actuator. I positioned it to strike the ringer-rod which in turn would strike the bells, for the most "authentic" sound possible. To drive the actuator, I built a 555 Timer circuit.
For those unfamiliar, a 555 Timer is a simple chip that you can configure to use in a bunch of very convenient timery ways by defining what resistors and capacitors values you attach to which pins. Keep reading for the schematic. I wanted a 50% duty cycle (i.e., the actuator spends as much time popped out as popped in) and through trial-and-error, I landed at a frequency of about 22Hz (think pops of the actuator per second) to get a ringing sound most closely resembling what you'd normally hear.
Having tested my circuit, I moved on. There's lots of overall integration and problem-solving to come, but for now I wanted to get each discrete component working.
Step 2b: The handset
Next up, as a break from the more mechanical focus of the last effort, I focused on the handset and cradle.
Figuring out the wiring was pretty simple as you can unscrew the caps off each end of the handset, and trace the wiring back to determine which part is the mic (which we aren't going to use) and the positive and negative terminals of the speaker. That's all we need!
Using components I already had available, I decided again to leverage Adafruit's Feather form factor, utilizing their Feather 328P (namely because I wanted to get rid of it - that model always seemed to have upload issues) and their Music Maker FeatherWing. The two components can stack together, keeping things nice and smol.
Note that I attached wires for all the different things the controller would work with to the Music Maker FeatherWing before taking this photo, so that's why there are more than 2 wires. This has the other design advantage of allowing one to swap out the controller without soldering anything, if the need arises.
Using the existing Adafruit libraries, it was pretty easy to get this working. The "headphones" version of the Music Maker was more than enough to drive an appropriate volume on the handset speaker.
Step 2c: The rotary dial
The final piece of the puzzle! I initially assumed it was going to be somewhat challenging to decode the rotary device, but decided to practice some reverse-engineering problem solving anyways. Turns out, it's very simple. There are 3 wires coming from the rotary device, and, you guessed it, they're for power, ground, and signal. Hooking them up to an Arduino and running the AnalogRead sketch with the Serial Plotter open, it was easy to see each "pulse" from the rotary encoder corresponded to a blip on the signal line. All you have to do is count the number of blips in a row, and you have something corresponding to the number dialed. I wired the signal wire in as a digital input to the Feather controller.
Step 3: Bringing it all together
This is usually where the "fun" starts, and this project was no exception. The first step was connecting a remote trigger to the 555 Timer driving the linear actuator. Surprise! Hold the button down and you get a single little tap of the actuator every few seconds. It quickly became evident that if everything's powered from the same supply, when the linear actuator runs it makes too much electrical noise and voltage dip for the wireless receiver to keep working.
I spent a couple days trying simple solutions like adding capacitors and a separate voltage regulator, which helped, but reached the point where I just had to bite the bullet and add either a second power supply, or some proper filtering. I chose the latter. I had a few Adafruit VERTERs around, which were perfect power filters for this application. I connected it through to the wireless receiver and we were back to the races!
Next, I wanted to trigger a welcome message once the handset is picked up, not requiring any other input. The cradle on the phone was mechanically tied to a bank of simple SPDT switches. Because the ringer was a totally separate circuit from the audio player and rotary encoder, and to maintain that separation and ensure the phone couldn't ring when the handset is picked up, I decided to use the cradle switch as a power switch. When the handset is on the cradle, the controller is off but the ringer is on. Once the handset is picked up, the opposite.
I think that's all the background I need to finally share the schematic:
Everything's always so straightforward in retrospect. With all the funny business taken care of, it was time to start shoving everything into the phone. Since most of the inner working are conductive metal, it's important to insulate any exposed contacts on the circuit boards! Hot glue works great.
It's also critical to mechanically secure components whenever possible. Doesn't have to look great if it's hidden, thank goodness! You'll note I put a dab of glue on the SD card, since those things love to pop out on their own.
Obviously, I also had to record, edit, and encode a bunch of my cousin's favourite stories - this took a while, and I gave up after 9 (saving zero as a treat) - and that could be the hardest part for most people. However, it's totally worth it to give a very custom, personal gift to your favourite kiddo.
2022 Update: It's definitely time for me to record new stories for this thing - they grow up so fast!!
Shopping List
- GitHub: Rotary Reader, Full Sketch
- Linear Actuator [SparkFun] [Digi-Key]
- Feather 328P [Adafruit] [Digi-Key]
- Music Maker FeatherWing [Adafruit] [Digi-Key]
- Simple RF M4 Receiver - 315MHz Momentary Type [Adafruit] [Digi-Key]
- Keyfob Single Button RF Remote Control - 315MHz [Adafruit] [Digi-Key]
- VERTER 5V USB Buck-Boost - 500mA from 3V-5V / 1000ma from 5V-12V [Adafruit] [Digi-Key]