Introduction: Turn a Rotary Phone Into a Radio and Travel Through Time
- I hacked a rotary phone into a radio! Pick up the phone, choose a country and a decade, and listen to some great music!
How it works
This rotary phone has a microcomputer built-in (a Raspberry Pi), that communicates to radiooooo.com, a web radio. There is a microcontroller (an Arduino) behind the map that controls the selection of the country. Together, this makes for an awesome, IoT project!
The map is glued to a metal panel, with an arduino at the back. Some countries have a jack pin. This is how you select the music !
I was sponsored by Digitspace for this project, they kindly sent me over some electronics for this prototype.
Technical breakdown
This project is made of several parts:
A rotary phone
A Raspberry Pi, whose role is to:
- Play music through radiooooo.com
- Detect when the handset is picked up / put down
- Detect the numbers that are dialed in
An Arduino, whose role is to:
- Detect which country is selected on the map (via jack connectors)
- Send the info to the RPi over serial
Supplies
- 1 Rotary Phone
- 1 Raspberry Pi 4 Model B
- 1 Arduino UNO
- 1 SD Card for the Raspberry Pi
- 1 Raspberry Pi Power supply for Raspberry Pi
- Electric wires
- 5 Resistors 10k ohm
- 5 Resistors 220 ohm
- 1 USB-A to B Cable
- 1 Audio Cable with a jack male connector (to plug into the RPi)
- 1 Button
- 1 LED (generic)
- 1 Breadboard
- 1 World Map
- 1 Metal panel (or other material) to mount the map
- 10 Jack socket pins
- 1 jack male connector to select the countries
- Screwdriver
- Drill
- Multimeter
Step 1: Step 1: Understand How Your Rotary Phone Works
All rotary phones are different. Yours might not work exactly like mine, but the parts are quite similar.
For this project, the parts you'll need are:
📞 The pick up / put down mechanism for the handset
In my case, those pickup / put down switches were accessible on the board of the telephone: I used a multimeter to find the pins and soldered 2 wires from there. One of the wires goes to the 3.3V of the Rpi ( through a 220-ohm resistor), and the other wire goes to the physical PIN 18 of the RPI (GPIO 24)
🔈 The speaker from the handset
By unscrewing the handset, I could access the speaker. There are 2 wires (positive and negative) that you can hook to an audio cable. The end of your audio cable should have a jack connector so that you can plug it into the audio output of the Raspberry Pi.
⚙️ The rotary module
There are two distinct parts in a rotary module:
- The DIAL SWITCH: A switch that detects when the dialing started
- The NUMBER SWITCH: A switch that opens and closes as many times as the number dialed. For example, for number 6, the switch will open and close 6 times. The only exception is the number 0, which will trigger 10 pulses.
I have connected 2 wires to my DIAL SWITCH. One goes to 3.3V of the Rpi ( through a 220-ohm resistor), and the other wire goes to physical PIN 10 of the RPI (GPIO 15)
I also have connected 2 wires For my NUMBER SWITCH. One goes to3.3V of the Rpi ( through a 220-ohm resistor), and the other wire goes to physical PIN 16 of the RPI (GPIO 23)
Step 2: Step 2: Build a Map!
The map will be used to select countries for your rotary radio.
I built mine by gluing a paper map on a metal panel. You can use any material you want, but make sure it's thin enough so that you can screw the jack sockets on your panel.
Before you glue your map, make sure you drill holes big enough to fit your jack sockets.
You can then glue your map in place and pierce the holes gently (with a pen for example). Your map is now ready!
Once your audio sockets are in place onto your map, you can then proceed to wiring.
The Arduino is connected to a Raspberry Pi via a USB cable (for both power and serial communication).
One end of the jack socket goes to 3.3.V, the other one goes to a digital pin of your choice, through a 10kohm pulldown resistor
You can find the Arduino code in the git repository.
Step 3: Step 3: Setup Your Raspberry Pi
Check out the SCHEMATICS for detailed instructions on how to wire your Raspberry
Optional: I have also included a LED that I connected to pin 15 (GPIO 22). This LED will flash when the main.py script is running.
Optional: Add a push button that allows you to reboot/shutdown your pi. Mine has 2 wires that respectively go to PIN 13 (GPIO 27) and GROUND
I have provided the main script main.py in the project's GitHub repository. The script is ready to use and has comments in case you are interested in how it works.
Please note that running the python script without any Arduino connected will trigger an error.
My raspberry pi is set up to run headlessly (without a screen).
There are a couple of things you need to set up if you want it to work:
- Make sure the GUI (Graphical User Interface) starts even when no monitor is connected.
We'll need it to run our website. In the terminal, type:
sudo nano /boot/config.txt
Then, uncomment the following line:
hdmi_force_hotplug=1
save it by pressing CTRL+X and accept the changes by pressing y when prompted
- Open the radioooo.com website at startup
In the terminal, type:
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
Add the following line to the file:
/usr/bin/chromium-browser --ignore-certificate-errors --disable-restore-session-state https://www.radiooooo.com
- Run the python script at startup
In the same file, add the following lines:
@/usr/bin/python /home/pi/your/path/main.py
@/usr/bin/python /home/pi/your/path/shutdown_button.py
- Update the script to the correct USB port that you connected your Arduino to
Run the following line in the terminal (with the Arduino unplugged):
ls /dev/tty*
A list of all available ports will show.
Then, plug in your Arduino and run the same command again.
The port that appears is your Arduino (In my case, it's /dev/ttyACM0 )
Open the main.py script and update the following line to match your port:
ser = serial.Serial('/your/port', 9600)
Step 4: Step 4: Install the Chrome Extension
To interface with the radiooooo.com website, we need a chrome extension that our Rpi can run in Chromium. I have also provided the extension itself and the installation instructions in the GitHub repository. Please refer to the README for more info.
Step 5: Step 5: Run the Script
Reboot your pi.
When your pi has rebooted, your LED should flash; this is how you know that your script works.
Everything should work! Happy hacking!

Participated in the
Arduino Contest 2020
11 Comments
2 years ago
hi..does this project work using arduino leonardo?
Reply 2 years ago
Hello, yes it will work with an arduino Leonardo.
The library that is used (keyboard.h) works with all models based on the 32u4 chip.
3 years ago
Hi, and thank you for the great idea,write up and code.
Unfortunately I am having a problem getting the country selection to work.
Just using the Chrome Extension as in the git repo I can select the decade and turn the sound on and off using the keyboard. But the keys that select the country are not working. Is it because Radiooooo have changed their code? I've tested it on the RPi and on Chrome on a Windows PC with the same result - decade and volume work but country selection does not.
Anyway, for now I have my GPO 746 telephone dialing and playing the decade I dial - and that is really cool :-)
If I can get the contry code selection working I intend changing the python script to look for an international dialling code and select the country that way.
Reply 3 years ago
Sorry for the delayed reply.
Indeed you are right, the Chrome extension was not working properly, because radiooooo.com had changed their HTML structure.
I have pushed a fix on the repo, the new code should work fine!
The line you want to change is in main.js:
mouseUpDpwn('g[data-isocode="USA"] path')
becomes:
If you perform this change for all the countries, you should be good to go!
Let me know how this goes.
Reply 3 years ago
Thank you for taking the time to answer. I've never dealt with chrome extensions or much javascript, so I was really struggling to see the fix. But I did spend some time converting the prototype rats-nest-breadboard-blu-tacked mess into an acceptable finished model via some 7 core cable, 8 PIN DIN plugs and a junction box :-)
I've just dialed 0081 1940 and am listening to "Hey Hey Boogie" by Shizuko Kasagi.
Brilliant.
Thank you, and thanks to the Radiooooo.com team who seem to be following your project too.
3 years ago on Introduction
hello ! i'm the founder of Radioooo.com, this is great guys :) !!
Can we get in touch ?
here is my email: benjamin@radiooooo.com
all my best,
Ben
Reply 3 years ago
Hey Benjamin!
Thanks for your comment!
I'll get un touch for sure.
3 years ago
Incredible project! You should also enter this into the maps contest!
Reply 3 years ago
Thank you Noah! I didn't know that I could enter a single instructable for different contests.. I'll do it!
3 years ago
Brilliant idea! Well done, and thank you for sharing your work :-)
Reply 3 years ago
Thanks Alex!