philippp.net / blog

Rotary T9

September 12, 2021 · ~3 min · electronics, arduino, making

Rotary T9: A detached bridge across the recent past.

For my 40th Birthday, my brother gifted me a rotary phone dial. Not just any rotary telephone dial — but one that had been in our maternal grandmother’s house since I can remember.

A rotary phone dialer

As a visiting high-schooler in the 1990s, I dialed a lot of numbers: an 8-digit prefix that would re-route the call to afford a cheaper international rate, followed by the 11-digit number (country code, area code…). Often I’d have to call back, repeating the process until serendipity put the recipient close enough to their phone. Email or anything internet-related required a 20-minute bike-ride to the local cyber-cafe, but by itself would not have sustained any high school relationships of that era. This made me wonder: what if I could have texted from Grandma’s rotary phone?

The hardware interface

I figured I’d get started on interfacing this device. The design is pretty darn simple and resilient — four wires come out of the dial:

The back of the dialer and its wires
White for V-, Green for V+, Yellow is the inverse of "dialer click," and brown the inverse of "dialer active".

To dial a number, the user inserts a finger into the corresponding hole on the face of the dial and rotates the dialer counter-clockwise until the black bar is reached, extending a spring within the dial. When the finger is extracted, the face of the dial rotates back to its original position and “clicks” once for every number that is passed. Counting these clicks reveals the number that was dialed. The contraption on the lower right of the photo above contains the switches controlling the brown and yellow wire’s connectivity.

The brown wire is connected to the white wire (V-) while the dialer is in motion. The yellow wire connected to the green wire (V+) except when a number is passed during rotation. These disconnections are the “clicks” we count to determine what number was dialed.

To interface this to an Arduino’s digital IO pins, I connect the brown wire to V+ through an 18kOhm resistor, and the yellow wire to V- through another 18kOhm resistor. I then connect the brown and yellow wires to two arbitrarily chosen Arduino IO ports. When the dialer is at rest, the brown port will be high — and will be pulled low while we are dialing. The yellow wire’s port is also held high, and is pulled low once for every number that is passed.

I interfaced this with an Arduino Mega with an LCD alphanumeric header, as seen below:

The wired up Arduino

The end(?) result

We now have a dialer that can enter and display numbers or text. I stopped short of adding a Twilio HTTP client and T9 suggest (the best T9 functionality IMHO) and other bells and whistles, since these are reasonably well-solved and arduous, and I feel like this stands on its own as a weekend exercise :)

Not cleaned up and unsupported code can be found at github.com/philippp/t9_dialer.


Originally published on Medium. Hand-edited Markdown · No tracking.