Rotary Dial Telephone Exchange
I wanted to recreate an old telephone central office. The central office routes incoming calls to their destination without an operator switchboard. In the process, I learned a lot about how a telephone works. This project works with rotary dial phones, and the dialing phone can ring any of 5 other connected phones, ringing stops after the ringed phone picks up.
Supplies
High voltage ring generator (telephone line simulator) available on eBay (Black Magic Ring Generator, 12 volt input). https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2380057.m570.l1313&_nkw=black+magic+ring+generator&_sacat=0
Other parts:
Arduino Uno, 1 ea.
RJ11 jacks, bag of 10, Amazon https://www.amazon.com/dp/B093Q1YTT8?psc=1&ref=ppx_yo2ov_dt_b_product_details
SPDT Optoisolated relays, 5v coil, bag of 10. Amazon https://www.amazon.com/dp/B07WQH63FB?psc=1&ref=ppx_yo2ov_dt_b_product_details *
Resistors, all 1/4 watt, 330 ohm x 6 ea, 5k ohm x 6 ea, 3k ohm x 6 ea, 1k ohm x 1ea, 3.3k ohm x 1 ea.
Optoisolator, 6N137, 1 ea., high speed logic output, Mouser.com (maybe a standard opto would work) *
LED, red, 1 ea. *
12 vdc power supply, 1 amp, 1 ea.
DC power connectors (jack and plug set),, 1 ea. eBay, https://www.ebay.com
Male pin headers, Amazon or eBay
Hookup wire *
Hot melt glue *
Solder
3D printed enclosure for holding RJ11 jacks *
Perfboard, 2.8" x 2", 2 ea.*
- Note I designed a PCB shield for the Uno that simplifies the process and uses different, smaller relays. Gerber file for PCB is here: https://github.com/jbike/telephone.git
Programming and Construction
Program the Arduino with the attached file. Make a housing for the telephone jacks, see attached files. Add resistors 1 to 18 in the schematic to the perfboard- I used surface mount resistors for many of them, they saved some space. The resistors are to allow the detection of a line being picked up after ringing, note the 330 ohm resistors each connect to their own telephone line via the line selector relays. Thus, when a phone is picked up, there is a voltage drop because of that resistor, and the Arduino code measures that voltage drop via the voltage dividers.
The make/break of a phone dialing causes LED1 to flash on/off in concert. Original design uses Optoisolator 6N137, transmits this via logic level to Arduino interrupt pin 2. New design on PCB uses all relays and slightly different code (Telephone2.ino). Arduino code then counts the pulses, then turns 12v power from powering the line to powering the ringer module, next selects the appropriate line relay, which sets the ring line to that one phone. After each ring, the relay line selector and power relay go back to 12 volt dc on the line, and the Arduino tests to see if the line voltage is lower than open circuit voltage (caused by the phone hookswitch connecting the transmitter and receiver). If so, ringing stops and talking can begin, if not, another ring occurs.
Conclusion
This was fun learning about how telephones work, and how the phone rings. It started very simply with just a transmitter and receiver, but then to both ends having transmitter and receiver, then a manual crank ringer at either end and local battery power, then switchboard operators routing calls with a central battery supply and ringer circuit, finally automating the switchboard with relay logic. This circuit does the ring logic with a microcontroller.
The newer version Gerber files for the PCB are here: https://github.com/jbike/telephone.git includes Telephone2.ino
I am designing a still newer surface mount PCB version with solid state relays (LCC110) using a Pro Mini. Much smaller.