SMS Remote Start – working prototype
A quick update on the SMS remote start using my old iPhone… It works! I can now start my Subaru outback via SMS command from wherever I am.
I used an older Arduino simply because I wanted a quick and dirty 3.3v source for the iphone to arduino serial interface. The perfboard has a tip120 to drive the remote start, all the interface wiring for the car, power supply and the iphone interface. I tossed in a .01 cap at the power source just for extra filtering. The power supply is a switching charger from a broken iphone car charger. Efficient and free!
This is my quick build schematic. (Click to see the entire thing) The voltage divider on the left is so that the arduino can report the system voltage. it’s made of 3 10k resistors since I always have those on hand. The result is 1/3 of the 12-14v DC that the car has. From this, we can infer the state of the car: >13 is started. I plan to toss in a ds180 1 wire temp sensor later on as well. The pink highlighter was used as I wired things up.
Important: There’s an error in the schematic – I fixed it on my board but forgot to update it! The diode should connect on the other side of the resistor that connects the iphone serial RX and the Arduino 3.3v source. If you connect it this way, you won’t get any serial input on the iphone. It’s not lethal, just important!
(update 2: You can get the clean version of the schematic here: )
An old jailbroken iPhone, an Arduino, iphone breakout board (I used a PodBreakout Mini) 4x 10k resistors, 1x TIP120, a 5 volt switching supply cell charger (easier than building one), some wiring ability and a general understanding of unix/perl/arduino. (See the packages on my dev phone in this post.
You can get the code to make it all work here. (SMSresponder.pl, com.SMSresponder.startup.plist and
SMSresponder is a perl script that runs in a loop. Every 30 seconds it checks for a new message since the last time it ran. place it in /var/root/bin/ (you’ll need to create that directory) as this is where the startup system looks for it. You can put it somewhere else, just edit the plist to match.
Make it work all the time:
Copy com.SMSresponder.startup.plist to /System/Library/LaunchDaemons on the phone. This will start the script at boot.
RemoteStartController.pde is a quick program that I wrote based on all sorts of other source I already had on hand. Notably, most of the code was adapted from Motokomp. I’ve added hooks for additional commands, but haven’t updated the iPhone perl script to do anything with the output.
How it works in real life:
I send a text message from my phone with the phrase: “Start 1234″ (1234 would be the password in the phone script). The phone gets the text then tells the arduino via serial interface to start. The arduino grounds the wire to the remote start that activates it. Meanwhile, the phone sends back a SMS saying ‘Executed’ to let me know that it got the message and is acting on it. In the future it’ll send back a message confirming that the start was executed as opposed to the I told him to do it method.
This thing works very well. I can probably get away with reducing the polling time on the iPhone, but I wanted to conserve resources. I spent two weeks testing the SMSresponder script running on the phone with perfect results every time. I still need to add some handshaking between the iphone and arduino, (iPhone: start dude. Arduino: OK!, iPhone: great let me sms that back to the man in charge.) Right now, the iphone sends the command and prays that the arduino got the message.
The remote start I’m using is an Avatal 3117 purchased via Amazon. (There are additional things added to make the subaru’s computer happy about missing the key) the main reason I bought this remote start is that it has an input wire for starting! When you ground it, the remote start will start the car. If you ground it again, the car will turn off. That’s how the arduino activates the remote start. In reality, there’s also a serial interface on most RS units today, but getting documentation on them seemed difficult. Besides, who wants to implement a new protocol just for a one-off build?
I’m seriously considering building a kit version of this hardware. It would include the iphone dock connector, programmed atmega, etc: it would tie all the prototype hardware into a single build – and maybe add a nice box and harness to make it work. (I used extra wiring bits from my remote start install to add a nice modular connector to the prototype)