Monday, February 21, 2011

Remote Car Starter - Controlling the Motorola c168i with Arduino

I have began making progress on my remote car starter project. The basic concept is to build a home brew version of the Viper SmartStart system. My version will utilize text messages to relay the commands from my cell phone to the car via the Motorola c168i pay-as-you-go phone.

The first steps to getting this project started are learning the ropes of communicating with the c168i via the TTL serial port in the 3/32" headset jack on the top of the phone. The phone uses what are called "AT commands." Many phones can be controlled using these commands but each phone will not necessarily work with every command. There are also other quirks to account for such at the excessive power management of the c168i that requires sending something over the serial connection to wake the phone up before sending an actual command.

To connect your Arduino to the c168i you will need a 3/32" headset plug. I used part 274-0298 from Radio Shack. The connection uses three wires: ground, TX (transmit) and RX (receive). The tip on the 3/32" headset plug is the TX signal and connects to pin 1 on the Arduino, the ring is connected to the RX signal or pin 0 and the shield is connected to ground.

Below you will find the basic test sketch I used. Every line except for the repeated delay commands is commented to explain what it does. Eventually the delays will be removed and I will program the Arduino to listen for an ok response or error from the phone before proceeding to the next command.
void setup() {

pinMode(13, OUTPUT); // Initialize pin 13 as digital out (LED)
Serial.begin(4800); // Open serial connection at baud rate of 4800
delay(500); // Wait half a second
Serial.println("AT"); // Sends AT command to wake up cell phone
Serial.println("AT+CMGF=1"); // Puts phone into SMS mode
delay(1000); // Wait a second
Serial.println("AT+CMGW=\"+15555555555\""); // Creates new message to number
Serial.print("This message was generated by Arduino!"); // Message contents
Serial.println(26, BYTE); // equivalent (signals end of message)
Serial.println("AT+CMSS=1"); // Sends message at index of 1
Serial.println("AT+CMGD=1"); // Deletes message at index of 1


void loop(){

digitalWrite(13, HIGH); // set the LED on
delay(250); // wait for 1/4 a second
digitalWrite(13, LOW); // set the LED off
delay(250); // wait for 1/4 a second

Useful Resources


  1. Hey, what did you set the phone c168i in video?

  2. Can you only use the c168i phone, or can you use other phones to send the SMS message?

  3. Is it possible to work with older Motorola phone like C119

  4. nice work! hello, it is the same code you use in your actual demonstration? can you please send me the actual code of your project? please.. i need it badly.. thank you so much... XD

  5. this is my email..

  6. disculpa podrías enviarme el código a mi correo (e-mail) también me podrías decir que librerías utilizaste y como las agregaste?

  7. its really cool project.
    you could "hear" the phone with the arduino?
    Could you post an example?

  8. salut
    s'il vous plait est ce que quelqu'un pourrait m'envoyer le code de ce projet.
    c'est mon
    Merci d'avance

  9. Have you used unlocked C168i phones on carriers other than AT&T? T-Mobile, or other prepaid carriers?

  10. Can I use any other type of phone or just Motorola C168i?

  11. Wow!nice blog and very interesting and helpful for the Remote car starter it good work.
    Remote car starter