Gesture Controlled Car

By:
Gal Lerman, Mor Baruch, Matan David.

Instructor: 
Prof. Sivan Toledo
Embedded Systems Course
Tel Aviv University, 2014

 

Project Goal:

Remote controls cars are all the same. You can go right, left, forward or backwards. But how much fun would it be if you could control the car by simple, more intuitive, hand gestures. That is what we set out to do.

General Description:

Our project is composed of one Arduino Uno board, a remote control car, and accelerometer. The remote control is connected to the Arduino board by soldering the forward, reverse, right and left buttons to designated output ports (7,8,12,13). The accelerometer, working with the  protocol is connected to the Arduino using the designated ports A4 and A5, one for the SCL and the other SDA. The Arduino outputs the necessary voltage using the 5V ports for the remote control circuit and the 3.3V for the accelerometer. The Arduino is connected to one 9V battery.

The Arduino reads the inputs from the accelerometer, using the X and Y axis. When the G force is greater/less than a predefined value, the Arduino translates this value to an “Active Low” output signal on the corresponding pin of the remote control circuit. Using the accelerometer gives us the ability to set the sensitivity of the hand motion that controls the car.


 

System Flow:

 


                                                                                 

                                                                                                                                                                                                   

 

 

 

 

System Image:

 

 

 

Remote Control:

The remote is controlled by a TX2B chip. After researching the chip we found that direction button is “Active Low”. In addition, the operating voltage of the circuit is 5V, and since the Arduino is able to output this level, we were able to disconnect the circuit from the delivered casing, and connect it directly to ours. We soldered pins 14,1,5 and 4 to the digital output pins of the Arduino 7,8,12,13 respectively. We configured the Arduino to output “0” on each pin when the correct signal from the accelerometer is received.

 

Old Remote control picture:

Remote Control Pin Configuration:

Car Pin Configuration:

Accelerometer:

 

 

 

 

The ADXL 345 Accelerometer measures acceleration, often caused by motion. But when they are standing still, the only acceleration the accelerometer senses is due to gravity pulling down on it. In our circuit we measured the static acceleration of gravity on 2 axis, the X and the Y. When connected, the accelerometer is attached to our palm, where the initial state is that both the X and Y axis feel zero gravity force. When turning our hand to the right, the gravity on the Y axis starts increasing. We decided on G force of +2 as the point where the Arduino should interpret this as a right turn. We could have chosen a higher or lower value, and this would change the sensitivity of the hand gestures. By symmetry, when turning our hand left, the G force of the Y axis decreases to a negative number, and the threshold we chose is -2. The same goes for the X axis and when we drop or raise the wrist of our hand.

 

 

 

Arduino:

We used an Arduino Uno and coded it to translate signals received from the accelerometer to output signals to the TX2B chip. Using the Arduino datasheet, we connected the accelerometer through pins A4 and A5, and the remote control to digital output pins 7,8,12 and 13. We used the Arduino.exe app and the Arduino interface to code the wanted functionality.

Arduino Picture:

The Arduino reads the G force signals from the accelerometer, and when receiving a G force that passes one of the defined thresholds ( G), it outputs “Active Low” on the relevant port. The outputs activates the pin of the TX2B transmitter chip and is then transmitted to the receiver chip.