arduino to dial telephone?

I have a project in mind that would dial a phone number on a POTS phone. Assuming I can generate dtmf dialing tones (perhaps even with a wave shield using downloaded tones if necessary) what do I need to be aware of in terms of connecting to a phone line? I'm sure there's voltage levels to be concerned with, but I'm not sure where to start looking or what to do to protect the arduino.

For the purposes of the project, I don't need to lift the receiver within the arduino; that will be done physically by the caller.

I'm still a relative beginner with this, so please excuse me if I'm missing something obvious.


watch out if someone calls that line, ~90 volt signal when the line is ringing.

If you want a hardware solution to generate DTMF, something like the HT9200B may be of interest. (it's .60USD)

There are lots of phone chips here -

(A chip I've been looking for is a Phillips PCD3312 - it's a DTMF generator with an [u]I2C interface[/u]. Sadly it's discontinued.)

I imagine you could generate DTMF with the Arduino alone, though it might be tricky - 2 ISR timers?

Anyway, I offer the above FWIMBW.

I have a project in mind that would dial a phone number on a POTS phone.

If its is just a single number to be dialed then you may be able to re-purpose on old phone that has speed dial or redial buttons. An opto-coupler used to close switch contacts would ensure that both the phone line and arduino were safe.

If any number needs to be dialed you could use a similar method to drive the matrix connected to the number keypad directly with a couple of quad opto-couplers.

Another approach is to use an old modem to do the dialing, almost every modem will dial a number using the ATDT command sent on the rs232 line. You will need to ensure that your interface is correctly handling the rs232 voltage levels on the modem

I should give some more info, I think. I'm trying to adapt an old-timey crank phone for modern use. My idea is to count the number of cranks of the handle and make that dial one digit. There is a switch in there that is thrown when you apply pressure to the crank, so I could use that to start/end counting. I'm not sure if there is anything in it to count the number of turns but there is a nice big gear that could hold a few magnets to use a hall effect sensor.

I like the idea of the modem, because it would take care of a lot of the problem and I have a few of those laying around. All I'd need to do in code is build the number to be dialed, and then issue the atdt command over serial to it. I'll also have to make it not try to handshake. I'm sure there's a command for that. Hardware-wise, I would need to connect to that crank switch, do the serial cable to the modem, and the crank handle revolution counter.

The nice thing about this particular phone is that it had been converted to a rotary dial, so it has been re-wired to a state that I can probably plug it in to the phone jack on the modem.

Thanks for the ideas!