Hand Gesture Controlled RC Car

My main project is a Gesture Controlled RC Car, with a robotic claw. The user’s glove communicates with the car, commanding its movements through the user’s gestures.

Engineer

Maya S.

Area of Interest

Computer Science, Electrical Engineering

School

Newport High School

Grade

Incoming Junior

Reflection

I’ve gleaned a lot of technical knowledge through my time at Bluestamp. However, through the process of building this RC Car, one experience that was consistent through all my milestones was the sheer amount of troubleshooting that I had to do. Since I didn’t have a lot of experience coding in Arduino, learning the syntax and practices of the language was difficult, and I had to spend hours pouring over libraries and forums to find the tools I needed. Whether the issue was a single missing semicolon in my code, or my servo heating up, very little of my time was spent actually building, while hours were spent racking my brain over why my servo was shuddering or why my flex sensor wasn’t returning the value it should have been. Although the process was painstaking, it’s a process that I hadn’t had a chance to experience in past over-structured computer science or engineering classes. Being able to spend hours over one problem and finally find a solution by myself at BlueStamp without constant instruction really exposed me to and helped me appreciate what engineering really is.  With the skills and experience with mechanical builds, circuit creation, and Arduino C that I’ve gotten at Bluestamp, I will definitely spend more time refining this project and working on new ones in the future.
Bill of Materials
Build Plan

Final Milestone

My final milestone was mounting my flex sensors onto a glove and my motors onto the RC Car. For the glove, I soldered all my connections for the flex sensors and the button onto a PCB. Each of the flex sensors are taped to the glove’s fingers, so that as the finger moves, the flex sensor bends. For the RC Car, I mounted all the components and motors onto wood. One of the largest challenges I faced during this milestone was working with the PCB on the glove. Because I had never soldered on a PCB before, it was difficult for me to make sure that the connections were solid. I ended up having to resolder and desolder my connections several times. 

Third Milestone

My third milestone was creating two separate circuits for the flex sensors and the dc motors/servos that could wirelessly communicate. The first circuit controls 4 flex sensors and their each individual connections, as well as a button to switch between control of the servos and control of the claw. The second circuit has the two DC motors (the wheels) as well as the two servos (the claw). Because the battery by itself couldn’t handle all four motors, the servos are powered by the Arduino, while the DC motors are powered externally. To be able to have two separate circuits, I added a shield to each Arduino to hold an XBee module, which executes the communication. To configure each of the of the XBees, I downloaded the X-CTU software to set up the mutual networks that they would communicate through. While the XBees communicated perfectly via the X-CTU software, one of the largest challenges that I faced during this milestone was getting them communicating while both of them were on their respective Arduinos. When configuring the XBees, only one of them are mounted on an Arduino, while the other is attached to a dongle. However, once I moved the XBee from the dongle to the Arduino, the communication would stop. To solve this, I wrote my own code rather than using the code provided by the guide, which fixed the issue.  For my final milestone, I’ll be mounting all my flex sensors onto a glove and soldering the connections onto a PCB, as well as all the motors onto the actual RC Car. 

Second Milestone

My second milestone was creating a single circuit that controlled two servos (the claw) and two DC motors (the wheels) which could be turned on and off (and opened and closed) through four flex sensors. Each flex sensor controls one direction of movement for the DC motors (front, backwards, left,and right). The first two flex sensors, when bent together, controls the tilt of the claw, and the last two sensors control the opening and closing of the claws. The servos are controlled and powered by the Arduino, while the DC motors are controlled by a full bridge motor driver and powered by an external Lithium Polymer battery. The five ports of the motor driver, when connected the digital ports on the Arduino, allow the driver to manipulate the speed of the wheels of the robot. Before this milestone, I did not have any experience working with DC motors or the motor driver. Because the original project used an H-bridge rather than a full bridge, I researched and learned how the motor driver functioned, as well as how it would fit into the circuit. Beyond the struggles of getting the motor driver to function with the Arduino, one of the largest challenges I faced during this milestone was the reversal of my flex sensors. Rather than operating with the values read increasing as the sensor was bent, the values of my flex sensors would decrease as they were bent. Originally, I calculated the angle with the value read, but because the values were not what the flex sensors should have been reading, I changed my code to mapping the values for each flex sensor to 0 to 10 instead to accommodate this change. Another challenge I faced during this milestone was the integration of my servos into my motor circuit. Each worked individually, but when the servos were introduced into the code, only one motor would move. After some research, I found that when the Servo library is included in code, the pins 9 and 10 are no longer functional. Since my second motor was in the 9 and 10 pins, the inclusion of the library was interfering with the pins, resulting in the motor not moving. To fix this, I changed which ports the motor was connected to. For my third milestone, I hope to add wireless communication through the XBee wireless module and connect the flex sensors to a glove to simplify the interaction between the sensors and the motors.

First Milestone

My first milestone was getting the four flex sensors (which will eventually be mounted onto the glove) functioning and responding which I accomplished by modeling the movements of the robot through five LEDs: red for driving forward, blue for driving backward, green for driving left, yellow for driving right, and white for opening the claw.   For my circuit, I created a simple voltage divider that decreased the voltage received by the analog pins using an 82k ohm resistor.  As the flex sensor bends, the voltage from the respective analog pin decreases. To set off each LED, I connected each flex sensor to an analog pin, which can receive various values as opposed to digital’s on or off. The resistance of each flex sensor increases as it is bent, starting from 20k ohms when straight to 40k ohms when fully bent. As the flex sensor bends, I measured the input voltage, and used that to calculate the resistance. Using that resistance, I estimated the sensor’s bend angle. When the angle of the flex sensor’s bend was greater than 0, the LED would turn on. The larger the angle of the bend (eventually, how much the user’s finger is bent), the brighter the LED is.   One of the challenges I faced during this milestone was getting an accurate reporting of the angle of each flex sensor. However, after some research on Arduino functions, I found that I could find an accurate estimate using the map() function. My next milestone will be adding two servos and two DC motors into the circuit, which will be controlled by the flex sensors.
Code

Starter Project

My Starter Project was the Mini POV (Mini Persistance of Vision). The MiniPOV, using 8 RGB LEDs, creates an image as it’s waved through the air by flashing columns of the image. The user can also change the image via their laptop and the POV program. The microcontroller on the PCB, the Atmega328P-PU, stores the image transmitted through the USB port, and times the flashing of the LEDs. Other components on the POV include a potentiometer and crystal oscillator, which help with the intensity and timing of the LEDs, transistors to amplify the electric signal to control the RGB of 8 LEDs simultaneously, capacitors to store charge, and resistors to limit current. One of the challenges I faced when building the POV was making sure that the battery leads were secure on the board. Because the battery was not directly on the PCB, weaker soldering came out more easily, and I had to re-solder the leads on several times.
Picture

Assembled MiniPOV

Leave a Comment

Start typing and press Enter to search