Bluetooth-Connected Rotary Payphone
Introduction: Bluetooth-Connected Rotary Payphone
About 10 years ago, feeling inspired by Sparkfun, I wanted to turn a 1950's Western Electric Rotary Payphone into a working Bluetooth headset. I called it "The World's Most Impractical Bluetooth Headset." After some hacking around, I got most of the internals working, but I couldn't figure out a way to make it call out. Today, though, we've got the Raspberry Pi, which makes this thing a cinch.
This, my first Instructable, will be a walkthrough of the hacking that went into figuring out how to make this work along with what exactly I did to create the final product. The project uses a Raspberry Pi 3B and some supporting electronics, so we're going to cover the decisions I made and why this was so [relatively] easy. Here's what you'll need if you want to do something similar:
Supplies
Most Importantly
* An old rotary payphone
The Guts
* Cheap headphones with built-in microphone
* Male-to-male audio cable
* 4.7K resistors
* Multi-colored Hookup Wire
* 4-Wire Male/Female Connector
* Heat Shrink Tubing
* 9 inches of thick stranded insulated wire
The Brains
* Raspberry Pi 3B
* Raspberry Pi Peripherals (Power supply, MicroSD card, USB Keyboard/mouse, Monitor with HDMI cord)
* USB Soundcard
* USB Bluetooth Dongle
Everything Else
* Soldering Iron + Solder
* Heat Gun
* Multimeter
* Alligator Hookup Wire
* Wire Stripper
* Various Screwdrivers
Step 1: Organize Ourselves
If you've used a Bluetooth headset or connected your phone to a car's Bluetooth stereo, you know that there are plenty of things that the headset or stereo can make your phone do: answer a call, hangup from a call, call a specific number, increase/decrease your phone's volume, send a spoken text message, etc. To figure out exactly what we're going to need to do, let's set the goal for what we want to be able to do with this project:
I want to be able to:
1. Pair my phone with the payphone
2. Use the phone to listen to the audio of the call and have it transmit my voice
3. Answer an incoming phone call
4. Dial a number and make a call
5. Hang up on an active call
All of these goals have some underlying requirements on our project. 703
I like writing these down on a checklist so that I know what I've accomplished and what is left. Here they are:
* Hardware that supports the ability to connect my phone to it via Bluetooth and act like a wireless headset. Hardware can output audio and also receive audio as an input.
* In the phone handset, I'll need something to convert the output signal (speaker) so I can hear it and something to pick up my voice and convert it into a signal to send (microphone).
* Ability to sense that I've picked up the handset so that it knows to answer the call and start transmitting audio.
* Ability to sense when a number is dialed and what that number is.
* Ability to sense that I've hung up the handset.
Looking at that list, we can see that we've got one output and three inputs. They are split between analog signals (i.e., those that have continuous values) and digital signals (i.e., those that have only two values like on/off). To learn more about the difference, Sparkfun has a great Analog vs. Digital write-up.
Outputs:
* Speaker signal (analog)
Inputs:
* Microphone signal (analog)
* Handset Pickup/Hang up signal (digital)
* Dialed number signal (digital)
So at a minimum, we need a piece of hardware that supports Bluetooth connectivity with the Headset profile, has multiple inputs and outputs, and can handle both digital and analog inputs and output. As you saw earlier, I'm going to use a Raspberry Pi 3B to make this happen. It'd be possible to do this with an Arduino and the right Bluetooth shield, but the ease of use of the Raspberry Pi made it the winner for me.
Step 2: Hack the Dialing Mechanism
I love that old phones are totally analog - you won't see a PCB in sight. They're packed with switches, resistors, transformers, and that is IT. That makes hacking it relatively simple. The thought process for this step is that we need to see what connections are available to use for us to feed into the Raspberry Pi so that it can know what number is being dialed. 703