Introducing a small board that "reads" the numbers on an old rotary dialer phone and outputs the proper DTMF tones to perform calls over a modern phone line (more info available on my website).

How it works?

The board can be divided into three different blocks:

  • The whole port B on the atmega48p is used as a DAC converter to output the proper DTMF tones made with some wavetable synthesis generation techniques (here's the Arduino library I mostly based my work on; and here's a very intersting article about wavetable synthesis).
  • The "rotary dialer thing" is detached from its source (it was directly connected to the "phone line") and wired into the microcontroller. This way numbers can be captured directly form the user input (there're plenty of libraries and posts about how to work with those dialers, such as this one) and the re-injected as DTMF tones, stored on a buffer or whatever is required.
  • The (now) open connection on the phone line (same as used by the dialer) is controlled with a 5v relay circuit, allowing the micro to freely open/close the line when needed.

With those elements plus a small microswitch glued near the main "hanging switch" to detect if the phone is "released" or not, the firmware can open and close the line, store a bunch of numbers on an internal buffer, dial them (the dialing a whole number operation) or even allow single "key presses" to emulate the classic "press 1 to do X action".

There's a long article with the full technical explanation, more pictures and some diagrams on my website.

Source code also available on github.