Final Project Overview
For our final project, we decided to build a car that could navigate its way around obstacles in its path using input from three ultrasonic sensors. Additionally, the robot could be driven manually using an infrared remote controller. We chose this project because we felt comfortable with the basic software and hardware knowledge that it required, but also believed we could learn a lot about how various sensors and actuators interact and can be controlled.
For the first demo day, the Arduino was set up with three ultrasonic sensors that were placed on the front and right/left hand sides of the car. The Arduino returned these sensor values, but the car was unable process those values in order to move around. We were able to fix this problem for the second demo where the car worked as we had planned.
Between the first and second demo, we modified the Arduino such that it could be operated manually using the infrared remote control. This required us to add new elements to the code that was initially running on the Arduino board. Additionally, we implemented a collision avoiding algorithm using the ultrasonic sensor data.
The robot consisted of three primary subsystems. Firstly, the base of the robot contained two continuous rotation servos, which were powered by a battery pack of three AA batteries. The servos were drive by the Arduino using pwm which allowed for a higher level of speed control. The second subsystem involved the ultrasonic sensors. Each sensor had an echo and trig pin which used time of flight principles to measure the distance to nearby objects. Finally, the manual override system consisted of an infrared remote which would send a signal to a receiver on the robot that could be translated by the Arduino. These three components were tied together through our software.
Our manual control software involved decoding the signal sent from the IR remote and having the vehicle respond accordingly. In essence, the code consisted of a loop which could be entered and exited using successive presses of the remotes play/pause button. Once in the play method, a green LED lit up and the code analyzed what type of signal it received from the remote. For example, if the user pressed the number 2 button, the code would call the driveForward() function. Our autonomous software involved measuring the right, left, and forward distances and responding with a turn if they were less than a certain threshold. It soon became clear that the left and right sensors weren’t necessary for basic object avoiding, so we commented out they’re methods in the code.
This project could be turned into a full maze solving robot if several hardware and software issues were resolved. Additionally, it is possible to use similar technology implemented in this project to build home robots, such as a robot vacuum cleaner. This project could be improved by securing the hardware on the car more effectively. At times, leads would become detached from the Arduino and breadboard which would cause the car malfunction. Replacing and improving the battery used to power the servos would also help improve the car’s reliability and functionality.