Project tutorial
Smartwatch car remote

Smartwatch car remote

Controlling a car using a Pebble watch, an Android phone and an Arduino

  • 17,621 views
  • 20 comments
  • 87 respects

Components and supplies

Apps and online services

About this project

The idea of this project is to be able to turn on/off lights (or any electrical component) of a car without being inside the car, or physically pressing dashboard buttons/switches.

Since I have a Pebble watch (as an extension of my Android phone), it makes sense to use it as a controller. However, even without the watch, I can still simulate the same remote functions using the phone itself.

Video of the final result

The following parts are used in this project. I chose shield-based components to make the device profile less complicated (no jumper wires):

  1. Arduino (mine is a DFRobot clone)
  2. 1Sheeld (as an input receiver to communicate with an Android phone)
  3. Generic relay shield (as an output to complete a circuit)
  4. Android phone with Tasker (I used my Nexus 5)
  5. Pebble Steel (optional, but much more practical and impressive to demo!)

On the phone (Tasker), I created four similar tasks for each input pin (via the 1Sheeld plugin), each to trigger: HIGH > WAIT 100ms > LOW.

I used PebbleTasker to create the menus on the Pebble.

The next step is to find out which wire in your car does what. Now this is completely dependent on the car that you have, as every car would have a different circuit. Mine is a 2013 Honda CR-Z.

I used a multimeter and the help of the car's service manual to find out which wires/relays conduct electricity when a switch/button is pressed. This tells me which wire/circuit I'm looking for. Then, I tapped relay wires into that circuit to simulate a 'button press'. This is not intrusive as I do not go into ECU, OBDII or CAN bus hacking. I merely simulated a 'button press'.

Testing the Tasker task

To do:

  1. Powering the Arduino via 12v from the car without draining it.
  2. Optimize the delay(200) code to avoid frantic behavior.
  3. Get more relays and control more stuff, e.g. roll down windows


Code

Tasker taskXML
Create one for each separate relay/pin, and remember to change the input pin that you are triggering. It is simply doing: HIGH > WAIT(100ms) > LOW
<TaskerData sr="" dvi="1" tv="4.7u3m">
	<Task sr="task62">
		<cdate>1436544359424</cdate>
		<edate>1440646568135</edate>
		<id>62</id>
		<nme>Relay 1</nme>
		<pri>100</pri>
		<Action sr="act1" ve="7">
			<code>3138</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.integreight.onesheeld.extra.OUTPUT>true</com.integreight.onesheeld.extra.OUTPUT>
					<com.integreight.onesheeld.extra.OUTPUT-type>java.lang.Boolean</com.integreight.onesheeld.extra.OUTPUT-type>
					<com.integreight.onesheeld.extra.PIN_NUMBER>14</com.integreight.onesheeld.extra.PIN_NUMBER>
					<com.integreight.onesheeld.extra.PIN_NUMBER-type>java.lang.Integer</com.integreight.onesheeld.extra.PIN_NUMBER-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Pin 14 set to High</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.integreight.onesheeld</Str>
			<Str sr="arg2" ve="3">1Sheeld</Str>
			<Int sr="arg3" val="0"/>
		</Action>
		<Action sr="act2" ve="7">
			<code>30</code>
			<Int sr="arg0">
				<var>100</var>
			</Int>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
		<Action sr="act3" ve="7">
			<code>3138</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.integreight.onesheeld.extra.OUTPUT>false</com.integreight.onesheeld.extra.OUTPUT>
					<com.integreight.onesheeld.extra.OUTPUT-type>java.lang.Boolean</com.integreight.onesheeld.extra.OUTPUT-type>
					<com.integreight.onesheeld.extra.PIN_NUMBER>14</com.integreight.onesheeld.extra.PIN_NUMBER>
					<com.integreight.onesheeld.extra.PIN_NUMBER-type>java.lang.Integer</com.integreight.onesheeld.extra.PIN_NUMBER-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Pin 14 set to Low</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.integreight.onesheeld</Str>
			<Str sr="arg2" ve="3">1Sheeld</Str>
			<Int sr="arg3" val="0"/>
		</Action>
	</Task>
</TaskerData>
Untitled fileArduino
void setup()
{
  pinMode(7, OUTPUT); //Relay1
  pinMode(6, OUTPUT); //Relay2
  pinMode(5, OUTPUT); //Relay3
  pinMode(4, OUTPUT); //Relay4
}

void loop() {
  if (digitalRead(A0) == HIGH) togglePin(7);
  if (digitalRead(A1) == HIGH) togglePin(6);
  if (digitalRead(A2) == HIGH) togglePin(5);
  if (digitalRead(A3) == HIGH) togglePin(4);
}

void togglePin(int pinOut) {
  digitalWrite(pinOut, !digitalRead(pinOut)); //Toggle HIGH/LOW
  delay(200);
}
Codebender
The Arduino code is a simple toggle high/low function for each pin per-relay. Relays 1-4 is controlled by pin 4-7 respectively, and I used the analog pins as input. (NOTE: delay(200) assumes that you don't trigger pins too fast!)

Schematics

Basic diagram of an LED circuit
The black diagram is a simplified version of a circuit for each individual component in your car.

You would usually access the individual buttons/switches from the dashboard, e.g. headlights/turn signals.

By pressing a button/switch, you simply complete the circuit and turn on the lights. The arduino+relay aims to complete the circuit without having to physically press the actual button, yet it doesn't interfere with the original function.
Relay

Comments

Submitted to Contest

M3D - 3D Printer + Grove - Starter Kit for Arduino + 20% discount voucher from Seeed Studio + 1Sheeld T-shirt + Hackster T-shirt

Smartphone Hacks Challenge

Author

Mikaweeicon
Mika Wee
  • 1 project
  • 18 followers

Published on

September 2, 2015

Members who respect this project

Amrousy11079668 10152904184496395 281030283473661045 nProfessionalImg 20140919 080037AdambenzDefault48950.jpgKrodomo

and 79 others

Project replicated by

Professional
See similar projects
you might like

Similar projects you might like

Track and Control Your Car Remotely

Project tutorial by Ashraf Nabil

  • 25,406 views
  • 5 comments
  • 58 respects

Bluetooth RC Car with Remote Arduino

Project tutorial by Team Windows IoT

  • 43,001 views
  • 3 comments
  • 80 respects

Universal Remote Control

Project tutorial by Ashraf Nabil

  • 3,677 views
  • 0 comments
  • 12 respects

Remote Controlled Car

Project showcase by Jeremy Vestal

  • 2,364 views
  • 2 comments
  • 9 respects

Home surveillance system using skype calls

Project tutorial by Manuel Miguel

  • 1,621 views
  • 0 comments
  • 3 respects

4x4x4 LED cube with Arduino Uno and 1sheeld

Project tutorial by Hassan Ibrahim

  • 29,722 views
  • 6 comments
  • 60 respects
Add projectSign up / Login