Tuesday, February 22, 2011

Software Serial on Arduino for Debugging and Displaying Serial Data in a Terminal Window

In order to debug the code for my remote car starter project I wanted to be able to output information via serial to display on my computer. Unfortunately the Arduino Uno has only one hardware serial port which was already in use to communicate with the Motorola c168i. To solve this problem I used a TTL serial to USB cable connected to a standard I/O pin on the Arduino. I then used the software serial library to output the data.



The Arduino IDK has a serial monitor tool built in but I would have had to change the selected serial port back and forth from one port to another to program or view the debugging data. To get around this I just used terminal to display the data.



Below is the Arduino sketch used in the example.
#include <softwareserial.h>
#define rxPin 2
#define txPin 3
int count = 1; 
SoftwareSerial PCserial = SoftwareSerial(rxPin, txPin); 
void setup() { 
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
PCserial.begin(9600); 
void loop() { 
PCserial.println("This is output via software serial.");
PCserial.print("Count: ");
PCserial.println(count);
count++;
delay(1000); 
}

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
delay(500);
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
delay(1000);
Serial.print("This message was generated by Arduino!"); // Message contents
delay(1000);
Serial.println(26, BYTE); // equivalent (signals end of message)
delay(1000);
Serial.println("AT+CMSS=1"); // Sends message at index of 1
delay(10000);
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


Sunday, January 23, 2011

Water Garden Update and Ideas for New Projects

It has been quite some time since my last post on my projects blog. I still have full intentions of completing the water garden project but my lack of a permanent residence is hindering this and I'm not sure what the future is going to look like at the moment. I will be going back to school in the fall which means I will probably not have a good location to build a water garden for a while.

One project I am considering building is a homemade remote car starter that would allow me to start my car with my iPhone. This would be much like the Viper Smart Start system. The main reason I would like to build this is to allow my car to heat up on cold winter mornings and cool down on hot summer days before I get into it.

My other project idea, which has been on my radar for quite some time, is replacing the stock radio in my Honda Fit with a custom touchscreen computer. I do love the way the stock radio in my car looks though so I am also considering gutting it and using the interface to control a computer without having a touchscreen interface.