Tim D.
Hi, my name is Tim and I am a rising junior at Regis High School. For my starter project I chose the LED Color Organ, which lights up like a firework when near sound. As my main project, I chose the Gesture-controlled Robot, which is a robot car and claw controlled by a glove that reads gestures from the user’s hand.
Engineer
Tim D.
Area of Interest
Mechanical and Civil Engineering, Architecture
School
Regis High School
Grade
Incoming Junior
Final Milestone
For my final milestone, I coded my robot and solved lingering problems from my second milestone. I coded the glove to determine whether my fingers are bent or not bent by mapping the flex sensor values from 0 to 100 and then determining whether each value is over 50. I then configured the glove to respond to gestures by registering multiple fingers at a time, and setting them to correspond to codes it sent to the robot. I coded my robot’s Arduino to accept commands from the glove via the XBee network and to use PWM (pulse width modulation, which regulates the power given to simple DC motors by giving and cutting the power at a specified rate) and the servo library as to control the DC motors and servos.
My gesture-controlled robot is a car with a claw that operates based upon the way in which I move my hand. This consists of a car and a glove. The glove determines whether my fingers are bent or unbent by reading output from flex sensors sewed to each of the fingers of the glove. This data is sent to an Arduino microcontroller, which maps the values into a range from one to one hundred. If the value becomes less than 50, the fingers is determined to be bent. The Arduino sends the configuration over an Xbee wireless radio network to the Xbee on the car. The car’s Arduino processes the signal and moves the DC motors or servos that turn the base or move the claw accordingly. On the car, the microcontroller and all of the motors and servos are wired to a 9V battery pack to keep them powered wirelessly.
I started making my project by setting up the Xbee communication network in Digi’s XCTU wireless software. I gave them the same PAN ID (3332) and then set one as the network coordinator (the other is a router by default) and used the serial communication library on Arduino to connect them in my project. I then began to make the glove. I created a circuit on a PCB board, splitting the data signals from the flex sensors into data and a ground connected to a twenty-two kiloohm resistor and connecting all of the power lines together. I also sewed each of the flex sensors to a finger of the glove, so that when I bent my finger, the Arduino would register it as a drop in the data values. In TinkerCAD, an online 3D design program, I created and printed a 3D model of my robot. After attaching my trolley wheels in the front of the robot, I assembled the claw and mounted it behind the trolley wheels. With much difficulty, I elevated, bolted, and hot-glued my DC motors into place. I then connected my servos to my Arduino and my DC motors to my H-bridge, and all to the battery.
I then coded my glove so that when all of the flex sensor values were mapped between 0 and 100, and so that when values registered above 50, the glove noted that the specific finger was bent; this allowed me to track gestures using all of the sensors together. The glove’s XBee sends a code unique to each of these gestures to the robot’s XBee, which directs either the DC motors or the servos to move depending upon the code through PWM, the servo library, and manual commands.
Here is a link to my project GitHub page, with my final code:
And here is my bill of materials:
Second Milestone
For my second milestone, I completed all of my project’s circuitry and design. For the glove, I sewed one flex sensor onto each finger of the glove to determine whether each finger is bent or not, and solders them to a PCB board where I split the data output into data and ground and attached a resistor to each, and wired all ground and power lines together. I then mounted the Arduino with XBee shield onto the back of my glove with velcro tape, and connected the flex sensor board and a 5V rechargeable battery. For the robot, I first designed and out my chassis in TinkerCAD, an online editing program. I then attached the robot’s Arduino and XBee shield with a 9V battery to the center. In front of the microcontroller, I mounted my claw such that it rotated forward and backward and was long enough to reach objects appreciably in front of the robot’s front trolley wheels. Next, I added the drive DC motors and the dual-H bridge that controls them with hot glue, and the trolley wheels in the front of the robot with nuts and bolts. To use the DC motors, I learned about PWM, or pulse width modulation. This is a method of coding that changes the speed of simple motors by sending power to them in a varying square wave (which is coded by giving and taking power to and from the motor). I wired the robot and glove as follows:
First Milestone
For my first milestone, I created a wireless network between two Arduinos, such that a servo moves if the flex sensor is bent. To accomplish this, I configured two radio Xbees to talk on the same network, and attached them to the Arduinos. I then made circuits for the servo (using an additional 6V power source) and the flex sensor on breadboards, and connected each to different Arduinos. I created code that reads the value of the flex sensor, determines whether it is above 300 or not, and so transmits a forward or reverse command through the Xbees to the Arduino, which instructs the servo to turn accordingly. Some issues I ran into getting to this milestone were problems creating the Xbee network, coding the Xbees, and a shortage the power supply for the servo’s Arduino. To create the Xbee network, I found that I needed to reset each to the factory default, enter a PAN id, set one as coordinator (which doesn’t change anything for the purposes of my project), and fill in empty boxes with zeros, without changing any other settings. When coding for the Xbee network, I realized after a deal of problems that I was using the wrong commands. By comparing my work with guides in the Arduino reference guide and past students’ work, I realized that I needed to use commands from the SoftwareSerial library and class, which involved creating instances for the each Xbee and setting its ports. I found that the servo drew too much power from the Arduino for it to handle, shutting it down automatically. To solve this, I made a circuit on a breadboard and connected a 6V external battery pack.
Here is the code I used for this milestone:
Starter Project
My starter project is the LED Color Organ. This kit lights up in a firework pattern when near a source of sound. It works through a circuit of consisting mainly of an electret microphone, transistors, two IC units, and LEDs. The electret microphone detects sound, converting it to an electric signal that passes through three transistors and into the first IC unit. This IC interprets the electrical data and sends it to the second IC, which triggers a counter. The data from the counter passes through a series of three more transistors, which then controls the LEDs. In making this project, I ran into problems with circuitry. I found that, in soldering, I had removed necessary connections and part of the copper track. I solved this problem by reconnecting the joints and retracing the track with solder.