Introduction: How to Turn an Old-school Rotary Phone Into an Input Device.
Rotary phones are great for beginner hackers.
They're not very complicated: for the most part, you can just look at the wires and guess what most of them control.
Slip a microcontroller in, and you can use all its components as modern I/O devices while still keeping that nice vintage look.
Here's how to take the best part - the rotary dial - and read the numbers off of it, so it can be used to control other electronics.
You will need:
- An old rotary phone you don't mind taking apart
- A microcontroller (I use a Teensy 3.0)
- A computer with the Arduino environment (or similar program to match your controller)
Wire and soldering kit
Screwdrivers to take phone apart
Step 1: Open the Phone.
This one had a single screw holding the plastic in place. Just get it opened enough to be able to touch the wires; we'll leave most of it intact.
Step 2: Poke Around With a Multimeter.
Maybe yours came with a manual.
Mine didn't.
Take a multimeter and poke around to learn about it.Step 3: Record your findings.
Set it to check for continuity to see which wires are connected, and if anything changes if you dial a number or pull the hook up or down.
Step 3: Record Your Findings.
As you go, write down stuff.
Which wires connect which devices, which contact points beep when the phone is "on" the hook and which beep when it's off.
Some of it will be important later, depending on how much of the phone you want to continue using.
Some of it is just fun for learning's sake.
Step 4: Take It All Apart.
Since we'll be taking this whole thing apart and sticking it into an Arduino, you disassemble it down to individual components.
Keep taking notes as you go.
Here, I've got the headset, the bell, and the dial all taken off. The hook I'm going to leave connected, because it's rather complex, and it'll work just fine through the connector board. DON'T cut any wires off; we'll need them for later.
Step 5: The Rotary Bit.
Remove the dial from the body of the phone.
It should have two pairs of wires attached.
One acts like a switch: it's 'OFF' if the dial is in the resting position, and 'ON' if the dial is moving.
The second pair gives a pulse based on the number dialed.
Step 6: Attach It to Your Microcontroller.
I'm using a Teensy 3.0, but you can pretty much use any input-output microcontroller.
Grab one wire of each pair and connect it to GND. Take the other two and attach each to an input pin.
Here, I use pins 11 and 12 in DIGITAL mode.
Technically, it's an analog signal, but really we only want to know if it's ON or OFF at a given point.
Step 7: Read the Values.
You can find my code for reading the dial numbers to serial here: https://github.com/agentcupcake/rotary-hack/blob/master/dial_reader
If you want to write your own, remember this:
- Your Arduino (etc) can read a LOT faster than the dial can pulse, you'll want to count changes between HIGH and LOW readings.
- Since it's an analog signal, it won't be perfectly clean. You will have to debounce the signal by adding in a small delay function.
- Don't forget that 0 will actually read as 10 pulses; make sure to write in a special case for it.
Step 8: Attach It to Something!
You have an input device! What will you connect it to? Add some LEDs. Make it change the speed of a motor. Make it dial your cell phone. Re-attach it to the phone and have it choose music to play through the headset.
And post/send me a photo if you do!
More Instructables for the rest of the phone bits coming soon.
18 Comments
Question 1 year ago on Step 8
Newbie here 🙋♀️ Can I make it so the phone can record audio? I am a teacher and would love to give students opportunity to pick up phone to record a message...
6 years ago
Oh my god, this is PERFECT! I was having so much trouble trying to figure out where and how to connect the wires of the dial, and here you are with this elegant solution! Thank you so much for sharing this, you saved me a ton of work. Kudos!!
8 years ago on Introduction
This is GREAT! How do I go from printing the dialed number on the screen to making output pins HIGH to control relays, devices? Thanks for a dandy project!
8 years ago on Introduction
I love it! Thank for taking the time to post it. I have a cool rotary phone that I'd like to play recorded dialog when the receiver is pick up. Anyone have any thoughts about an inexpensive way to pull this off?
9 years ago
very cool...I've got a yellow wall mount I've been wanting to use as a phone...
9 years ago on Step 8
I remember dismantling a dial phone when they were still state of the art!;-)
I loved the centripetal brake that regulates the timing of the pulses. (When you dial , try returning the dial to it's rest position faster than it wants to go. It pushes back! :-)
9 years ago on Introduction
Awesome oldschool hardware hack...remides me of my 2600 club days
9 years ago
How about a pulse to tone converter to use rotary phone on internet phone lines. We can't use ours anymore.
9 years ago on Introduction
love your commented code! even when I'm trying to teach I don't do that well.
question: (don't know if you have a scope or possibly ran a fast ADC conversion run to characterize the signal, if neither don't worry about it, anecdotal knowledge would be fine to start researching. I don't have a rotary so can't scope one myself, and would like to get an idea of what I need before jumping in.) Is the signal clean enough at some point during its rise and fall (only need a tiny window of pure voltage drop or rise to set the voltage threshold) to throw a comparator in the mix without filtering to convert to digital without getting more than one state change during a rise or fall. Never used an arduino, been solely using TI-Freescale 9s12 'stamp' sized chips on dev boards from Tech arts because that's what we used in college and I'd love to use the rising/falling edge input capture ability for this.
Reply 9 years ago on Introduction
In short: no, it's not clean enough.
I was getting some bizarre and inconsistent values when I first stuck it into the Teensy to get an initial read. After plugging it into a logic analyzer, it was evident that the signal was not a clean square wave - as with any analog input, it has a lot of "bounce", or noise, on each shift between on and off. The "debounce" code takes care of that on the microcontroller. I'm not familiar with the 9s12, but it should be able to handle this calculation....
9 years ago on Introduction
That is just cooooool! Very well written.
9 years ago on Step 8
Nice work ...I have taken a few phones apart over the years but never taken it to this extent . Nice way to learn from old tried and true technology too!
Build_it_Bob
9 years ago on Introduction
This is ironic!!
My wife was just saying only yesterday that she would like to have a rotary dial phone again for "tapping" the number. I told her that someone has probably already done that. And hear (SP intended) it is.
9 years ago on Introduction
Nice instructable!
Man, we had that exact same phone when I was growing up. Pink and everything - with super long cord to reach my room from the kitchen!
9 years ago on Introduction
Wonderful! On my to do list!
Y.
9 years ago on Introduction
Great ideas .. worth a try!
9 years ago
useful for steampunk/oldtech hacks where the functionality of the phone needs to be retained. awesome job.
9 years ago on Introduction
Nice