Hi, my name is Scott. I am a rising sophomore and I go to Birch Wathen Lenox. I am fifteen years old. Very early in my childhood, I knew I wanted to pursue a life as an engineer. I was always particularly fond of science and math class and always had a passion for building. As early as three years old, I would sit down in my room with just tape, paper and tissue and go to work. I would make all sorts of things ranging from paper weapons such as swords and nun-chucks to a paper windmill that would spin when a fan blew on it. One of my most memorable creations was a mini pool table made entirely of paper. It featured the table (which stood on four legs) with all of the six pockets, ten paper balls stuffed with tissue plus the cue ball, and two cues. I made this when I was around eight years old and everyone would play on it. At around ten years old, my parents bought me a circuitry kit. I assembled many different circuits that powered lightbulbs, motors, and all sorts of gadgets. All of this led up to my eighth grade science fair, where I decided to build an AL5B robotic arm and have it perform the functions that I wanted it to. The final product ended up with five servos allowing my arm to rotate at the base, as well as bend its “shoulder”, “arm” and “wrist” in order to pick up low-weight objects with its gripper. While the programming aspect of this project was pretty simple, it did still prepare me well for what would be a great summer at BlueStamp Engineering the following year.
Here are two pictures of my robotic arm:
Customization of RC Tank
Since I had some time the last three days, I decided to customize my tank further than attaching the ultrasonic sensor. I wanted my tank to be able to go from one location to another, while avoiding obstacles, at the press of a button. Therefore, I made an autonomous mode so that my tank can do just that. With the press of a button (as shown in my video), I made my tank move forward, turn left to avoid a box obstacle, then move forward again and turn right around another box before reaching its destination. After it reaches its destination in that mode, it then reverts back to normal and I have complete control of it once again. Now that I can use the buttons on the remote to access an autonomous mode based on my program, the possibilities are endless. I can program my tank to run as many courses as I want. I can make it run long, complicated courses, avoiding and running over obstacles. I look forward to working on this in the near future!
Here is a video of me explaining and showing the customizations I have added to my RC Tank:
Incase that video does not work, here is a link directly to the Youtube video: http://youtu.be/O4qIRLVZypI
As I reflect back on my time building my remote control tank and voice changer, I think about all the aspects of engineering that I enjoyed. While both of my projects did not involve very much mechanical engineering, the little that I did I very much enjoyed. I also had a lot of fun learning how to program and surprisingly enjoyed the electrical engineering that took place during both my starter project and main project. Going into the program, I figured that I would learn about all the different types of engineering and determine which forms of engineering I find most interesting. I certainly was given a thorough tour of all the various types of engineering that I find most interesting. However, throughout my experience, I have realized that I enjoy all of these forms of engineering and could not pick just one type. Maybe as I grow as an engineer, I will slowly shift into a specific category that I find more interesting and rewarding. For now, though, I love engineering as a whole.
Final Blog Post — Remote Control Tank
For my starter project, I built a voice changer and for my main project, a remote control tank. My time at BlueStamp Engineering has honestly been one of the most amazing and enriching experiences of my life. All of my life, I have been dreaming about entering the world of engineering and science. However, I had never gotten a true glimpse of what it is like in this profession until I entered the doors and looked at my fellow students. I have learned so much about building, circuitry, and programming. Programming, in specific, is a skill that I have never tried before in my life. Immediately in this program, I was tested on how quickly I could learn to code and decode in Arduino. There were many times when I had to try to write my own code and, despite the many failures in the process, the end result was pretty good. I had to attempt to write some complicated code that were meant for people with years of experience. However, BlueStamp Engineering taught me to believe in myself despite my inexperience. Now, I feel like I have the capability of programming complicated code for experienced programmers despite only five weeks of such experience myself. BlueStamp Engineering also provided me with instructors that truly cared about how much knowledge I retained from my experience. I learned a lot from them and am very thankful for everything they have taught me about engineering, as well as everything they have shown me about myself. I also have to thank one very special fellow student, who stood by me and guided me in the right direction. Luis, now one of my great friends, is going to be a senior in the upcoming year. There were many instances throughout the program where my tank would just completely stop working, most of time without a real reason. It was frustrating at times but Luis was the perfect role model for me. He always remained calm and found solutions more often than not. He is a great friend and a fantastic person who puts others before himself. I have also learned throughout this process how to take failure as a step in the right direction to achieving a goal, a lesson that can be applied to life as a whole. I have learned the importance of trying to push yourself to do things on your own and to set goals that are both feasible and yet challenging.
My project consists of an Arduino Uno, Arduino Motor Shield, wireless dongle, ultrasonic sensor, double motor, and a base including wheels and a battery pack. My project required me from the beginning to take slow steps in order to achieve big goals. The largest problem with trying to accomplish too much at one time is that if one thing goes wrong, there are too many possible reasons for the failure and it is very hard to troubleshoot everything individually to find the problem when everything is compressed together. Therefore, making sure individual parts work before combing them is a very important step in my process. To begin my project, I set up the base and connected the motor straight to the battery packs. From there, I set up my Arduino software so that I could control the tank. All I wanted to be able to do for this step was use the code from Arduino to command the tank to do a specific task in a loop. To do that, I first had to learn the most basic form of programming in Arduino, including information such as what “int”, “digitalWrite”, “pinMode” and “analogWrite” do for me in my program and in what order I should write my code in order to make everything work properly. I had to learn how to download libraries on my computer and set it to my code so that the connection is easier. After I learned the basics of how Arduino works, I was able to experiment with the program and try to add and subtract from my code to make it better and more efficient.
Once my tank was following the commands I wanted it to do in a loop, I then decided to attach my wireless dongle to begin the process of using my remote control to control the tank. In order to attach the wireless dongle to my motor shield correctly, I had to research what each pin on the dongle was suppose to transmit to the Arduino. Once I learned all about the wireless dongle and what information it was transmitting to the motor shield in order to be relayed to the motors through the Arduino Uno, I was able to write a code that set certain pins to receive the specific information of the different wires. Then, after the wireless dongle was connected to the motor shield and the code for the certain pins were set up, I still had to do one more thing in order to control my tank with the PS2 controller. I had to program the code so that based on what button I pressed, a certain task would be performed. Therefore, I set it so that when I press L1, the left motor would run forward at full speed. When I press L2, my left motor would run backwards at full speed. When I press R1, my right motor would run forwards at full speed. When I press R2, my right motor would run backwards at full speed. Therefore, in order to move the tank forward, I hold down on L1 and R1 at the same time. To move the tank backwards, I hold down L2 and R2 at the same time. However, my controller was not responding to these commands, forcing me to troubleshoot the code. The way I did this was I would set a “serial.println” after each specific command and have it print a word such as “hello.” What this means is if my tank is performing the command the way it is suppose to be performing it when I press the button, then “hello” will appear on my monitor. I tested each one this way and quickly realized that only the L1 and R1 were responding to my commands. Once I identified that L2 and R2 were the ones not responding, I checked my code and sure enough, I found that there was a problem with L2 and R2. Once I changed the coding, all of the commands were functioning properly. While I might be programming the tank to follow specific commands, it is not performing those commands in a loop; rather, I am the one in control of when those commands will be performed.
Now, after I had a tank that moves forwards, backwards, and turns at my command, I decided to modify my tank to make it more unique. I attached an ultrasonic sensor to my remote control tank so that I could detect the distance between my tank and whatever is within its range, which is anything within 200 centimeters in front of the tank. The way an ultrasonic sensor works is it sends a ping from its transmitter to an object, and reflects back to its receiver at a frequency above human hearing. The sensor then uses the time it takes for the waves to go from the transmitter to the receiver to calculate the distance. In order to attach the ultrasonic sensor to the motor shield, I had to do more research. I found out the proper pins that an ultrasonic sensor is usually attached to on an Arduino motherboard and quickly realized those pins were already being occupied. So, on the code that makes the ultrasonic sensor turn on and run properly, I changed the pin values to pins that I had available on my Arduino Motor Shield. I also had to remember to put the different components from the ultrasonic sensor code into the corresponding areas of the RC Tank code, so that the components do not get tangled up. When I finished my original program for the ultrasonic sensor and figured out how to plug it into the code that I already had for my RC Tank, I was almost finished. I had a sensor that could detect distances and show them on my computer but nothing more than that. I decided to play around with it a little bit more in order to try to put the ultrasonic sensor to good use. I wrote my own short program to make the right motor move forward and the left motor move backwards to turn my tank left automatically if the ultrasonic sensor detected something in front of it was at a distance of 10 centimeters or less. At this point, I finally had a fully functional remote control tank that could move in all ways and could detect distances, as well as turn when coming too close to an object.
Here is a video of me describing my Remote Control Tank project from beginning to end:
Incase that video does not work, here is the link directly to the Youtube video: http://youtu.be/GdXjJ8Qd8-8
Here is a sketch-up model, and the mechanical diagram, of my remote control tank. This model includes my Arduino Uno, Arduino Motor Shield, base, wheels, battery pack, two motors, ultrasonic sensor, wireless dongle, and wires (which are in the correct spots):
Here is the code for my project combining both the ultrasonic sensor and the remote control tank. I modified this code in order to work with my Arduino Motor Shield and allow me to detect distances through my ultrasonic sensor:
Here is the bill of materials (BOM) list for what I used in order to make my remote control tank:
Here is the schematic for the wiring of my remote control tank:
RC Tank — Third Milestone
In order to customize my remote control tank, I decided to add an ultrasonic sensor. An ultrasonic sensor is a sensor that detects distance by sending out and receiving back a ping, which is at a frequency above human hearing, hence being called an ultrasonic sensor. The amount of time it takes for the sound to reflect off of the wall and back to the sensor determines the distance between the tank and that wall or object. On the sensor, there is a transmitter and a receiver. The transmitter is the one to send out the ultrasonic waves and the receiver takes those waves back in.
My ultrasonic sensor is attached to the Arduino Uno and Arduino Motor Shield. There are three main steps that I took in order to have my ultrasonic sensor do what I wanted it to do. The first step was to get the ultrasonic sensor to detect distances through the Arduino Uno and motor shield. This step was fairly simple once I found how my particular four prong ultrasonic sensor works and how to attach it to the motor shield. I learned that the trig pin served as my output pin since it would be input into the ultrasonic sensor and therefore was the output of the motor shield and Arduino Uno. I learned that my echo pin was my input because it would be the output of the ultrasonic sensor. After that, I learned that my sensor has a limitation to how far it can detect an object. Therefore, in my code, I have it so that any distance 200 centimeters or less will be detected by the sensor. Any distance farther than 200 centimeters will not be detected. Then, when the sensor was attached to the shield, I used my code for the ultrasonic sensor to turn it on. Now, the ultrasonic sensor could detect distances.
The problem with leaving it at this is that I used a code for the ultrasonic sensor to turn on. However, that code is individual from the code that allows me to move and turn my tank. Therefore, I have a tank that can detect its distance from objects, but cannot move. So, my second step was combining the two of them together to allow me to both move and detect distance. The main problem that occurred during this process is that two of the pins that I used in the individual code for the sensor were already being used in the code for the RC Tank. I found this dilemma rather quickly since this same problem occurred earlier in the program. I changed around some of the numbers and the code to make it work, and then I took components of the code from the ultrasonic sensor and put them into various areas of the RC Tank code. One of the most important lessons I learned about Arduino in this step is that you have to keep similar components in a given code together. For example, if a “void loop” — which is a specific command to run something in a loop — is being used in a certain area in the code, you cannot put another component that is meant to be done in a loop in any other area of the code except under that same void loop. Another important thing to keep in mind while dealing with Arduino is to make sure that you set certain things before you set your command if you want the code to recognize those things before the command begins. For example, if it is crucial that your pin is set to be an output from the Arduino in order to set your command in a loop, than you must make sure that you have “pinMode” set up before “void loop” in the code. These are all small mistakes that I have made from time to time and they are not always noticeable when working with a long code. By the end of this second step, I had a moving tank that could detect its distance from objects.
So now, I have a tank that can detect distances. However, that still does not do very much for me. So for my third step, I decided to use those distances to do something noticeable, besides the numbers that appear on a screen. I decided to program my code so that when the ultrasonic sensor detects that my tank is at a distance of 10 centimeters or less, the wheels on the right side will turn forward and the wheels on the left side will turn backwards. This means that my tank will make a sharp turn to the left so as not to hit into anything, even when I am moving it forward with my remote control. This addition takes the distances found by the ultrasonic sensor and puts them to good use.
This is a video of me describing the third milestone of my RC Tank (You can see in it that my hands remain on the forward buttons and yet, when the tank approaches the box, it automatically turns left):
Incase that video does not work, here is the link directly to the Youtube video: http://youtu.be/aSg_3Sm36Eg
RC Tank — Second Milestone
Most of the steps leading up to this milestone were the hardest so far. It required a ton of testing, failure, and patience in order to finally reach my goal. By the end of my previous milestone, I had a complete base with a motor powered directly by the battery pack. Since then, I have added my Arduino Uno, Arduino Motor Shield and wireless dongle. I have also made a change in motors. I had originally used a single motor, which is shown in my first milestone video, rather than a double motor. A double motor is needed so that I can change the direction of the tank by increasing the speed in one motor and not the other. The Arduino Uno is the motherboard that receives commands from my computer through a USB cable. The Arduino Motor shield is attached on top of the Arduino Uno and can be used to access external power, as well as allow me to hook up my motor to the power rail. The wireless dongle is eventually attached to certain pins on the Arduino Motor Shield, which transfers the information the dongle gives it to the Arduino Uno and then to the motors, and allows me to control my RC Tank with a remote control.
The first step I took in completing this milestone is being able to move my RC Tank directly from the Arduino software. This means that I needed to put a certain code into my computer to tell it what to do — for example: tell it to move forward at full speed, backwards at half speed and then forward at full speed — and then upload it to the Arduino Uno, which will relay the message to the motors and make them do those exact commands in a loop. The code seemed to be made for me, however they did not work. (Which I later found out is because I was using a different Motor Shield.) Therefore, I began writing my own code and eventually, with the help of a code that was made for the Arduino Motor Shield, I was able to instruct my RC Tank to do specific commands after learning how to program with Arduino myself. One of the most important programming steps for this code was learning how to properly use the “digitalWrite” and “analogWrite”. “digitalWrite”, in this case, is used to move the motors either forwards or backwards depending on whether it is set to “HIGH” or “LOW”. “analogWrite”changes the speed of the tank while going both forwards and backwards. It was also very important to set the pins with the corresponding names and to determine whether a pin should be an output to the motor or an input to the Arduino Uno.
The next step was to attach the wireless dongle to the Arduino Motor Shield and Arduino Uno, in order to move the remote control tank with a remote control. The way I began this process was by researching what the pins on the wireless dongle were suppose to transfer and then finding the corresponding pins on the motor shield that should receive the different information. It was clear that my white wire should be transmitting data, my orange transmitting command, my black attached to ground, my red to power, my yellow transmitting attention, and my blue transmitting clock. This was a fairly difficult step because once I eventually figured out where each wire goes on the motor shield and what each wire transfers, I still could not get the code to make it work. The way the message would need to be transferred with a wireless dongle is as follows: It would go from my computer to the Arduino Uno, which is attached to the Arduino Motor Shield. From there, it would go to the wireless dongle and, once I pressed the button to make it move, the waves would travel back to the wireless dongle. That message is then sent through the Arduino Uno and Motor Shield again and is then transferred to the motors, which would perform the command. The commands I gave to the motors were also in terms of asking them to do things based on the buttons that are pressed, rather than just telling them to move backwards and forwards at a specific time and in a specific order. The eventual reason the code did not originally work, in simple terms, is because I was asking the same pins on my Motor Shield to perform two different tasks and therefore it did not perform any of them. I had to reconfigure the pins that received the data, command, attention and clock information. Once I fixed that on my code, I was able to have the output motors and output speeds separated from the input information and I had my RC Tank moving forwards and backwards.
The final step was getting my motor to turn. I thought this was going to be an easy step, since I had two motors and was able to move them separately. However, I quickly figured out that the external battery pack was attached directly to the Arduino Uno, which supplied it to the two motors separately. And therefore, while eight volts of power is enough to power the tank, if I try moving only one side, it only has four volts supplied to it. That is not enough with the current motor I had. Therefore, I decided to increase the torque of the motor (which is increasing its strength) while decreasing the speed of it. I arranged the gears differently and ended up with a motor ten times as strong, as well as ten times as slow. Now, my tank can turn in both directions and is functioning properly.
This is a video of me describing the second milestone of my RC Tank:
Incase that video does not work, here is the link directly to the Youtube video: http://youtu.be/49tTuhkZ9fo
RC Tank — First Milestone
With my main project in the works, all I can do is continue to hit milestones successfully. Today, I hit my first milestone: getting the entire base of the RC Tank to move successfully. My original goal leading up to this milestone was to assemble the motor kit, assemble the wheel set, assemble the main base, and then put it all together. At first, I thought this was going to be any easy task, since it did not require anything but putting kits together. However, these kits proved to be a challenge to assemble. The instructions were not the least bit clear, and a lot of it was in Japanese. Even once I finished the individual kits, it was clear to me that they were not meant to be together. The motor refused to power the wheels in every possible way that I tried to connect them: which included trying to put more gears to the motor and attach the wheels to the extra gears. However, I figured out that since the wheel set would not attach to the motor smoothly, I needed to attach it with force. I cut out some of the plastic on the wheel so that it was a bigger slot and could fit onto the pole sticking out of the motor easier. Then, I used gorilla glue to hold it and now, I have a 6 volt battery powering a fast motor attached to the base of the tank and it moves very quickly. One of the most important lessons I learned in completing this milestone is that everything does not always work smoothly and sometimes, you need to force the issue in order to get stuff done. I am at the stage right now where I basically have the structure of the tank, and the next step for me is to be able to control the speed and direction of the RC Tank by attaching the Arduino Uno and be able to control it from a PlayStation 2 controller.
This is a video of me describing the first milestone of my RC Tank:
Incase that video does not work, here is the link directly to the Youtube video: http://youtu.be/PujfdRg4TrU
My Start Project- Voice Changer
My name is Scott. For my starter project, I built a voice changer, which can alter the sound of my voice in different ways. This voice changer consists of many parts that were soldered onto the motherboard. There are capacitors, which store electrons for them to flow in a current through the circuits. The capacitors are able to affect the timing of the flow of the electrons through the circuit. There are two different types of capacitors on this circuit as well. There is the kind that takes polarity, positive and negative sides, into account, and then the kind that does not have any polarity and therefore allow the electrons to flow either way. There are resistors in the circuit as well. The resistors manage the flow of the electrons that are stored in the capacitors, and they determine whether or not more or less electrons will flow through a certain area. Resistors are needed because there are some components that do not need or cannot have too large a current. There is a volume knob connected to the circuit as well, in order to increase and decrease the amplitude of my voice, therefore changing how loud I am. There is a microphone to speak into and the voice gets projected through the attached speaker. There are four voice settings that can be projected. There is a robot setting, a vibrato setting, and two settings that change the pitch of your voice, either to be higher pitch or lower pitch. There is also a component that allows me to change the sensitivity of how the microphone perceives my voice. All of this is being charged by the source of the voltage, the nine-volt battery. That leaves the two “brains” of the operation. The HT8950A and the LM386N chips. The HT8950A is a single chip voice modulator IC, providing seven steps to shift the frequency of my voice. It also provides the two special effects: vibrato and robot. The vibrato effect alternates the frequency of an input signal at a rate of 8Hz. Therefore, this chip is the basic control for all of the different optional voices. The LM386N is a power amplifier, which is designed for low voltage use, such as this circuit.
To power the circuit, the nine-volt battery produces voltage to make the electrons flow in a current. As the current approaches the LED light, the resistor in front of it reduces the current before it flows through the light, because the LED does not need a lot of electrons. The capacitor then manages the flow of electrons after the current passes the LED and it approaches more resistors before being able to enter the microphone. In this project, the main input is the microphone, where the electrons stored in the capacitor flow through the main chip — HT8950A – and through the resistors to reduce the number of electrons in the current flowing into the four different settings. The current then passes through another LED light and more resistors before the electrons approach the volume resistor, which works because unlike all of the other resistors on the circuit, this resistor has a range of different resistance and depending on how much resistance is used, the volume will either be louder or lower. The current then flows through the amplifier and a capacitor increases the current before being amplified through the speaker. This is how my voice changer works. To build your own voice changer, you can visit this website:
This is a video of me describing my Voice Changer: (sorry the volume is a little bit low)
Incase that video does not work, here is the link directly to the Youtube video: http://youtu.be/0hWEErYKvZE
These are some helpful websites that I used in making my remote control tank: