Team Rambo based its design around the need to build a system that can fire Nerf Balls as consistently and quickly as possible. We decided to use pneumatics because of its high power, which would give a relatively linear trajectory, and the high consistency in firing accuracy. The cannon is equipped with a plastic piston, threaded into a high pressure hose that fires the balls at up to 100 psi. An aluminum tower holds the central pivot point about 7 inches off the turntable. The aluminum barrel is mounted to the acrylic baseplate with hose clamps and the piston has an aluminum clamp that connects it to the linear actuator. This actuator is connected to a three-way valve that exhausts the air in the line once the signal is stopped, thus allowing the piston to re-enter the barrel. The camera gathering the target information is mounted on the front at an 8 degree angle in order to see all of the target board. Figure 1 shows all of the components of our design.
David DeGerome-Control, Electronics
Isaac Marx-Machining, Mechanical Design
Neal Seegmiller- Programming, Computer Vision, CAD Design
Jessica Tiu- Software, Circuit Design
The main component of our loading system is an acrylic piston that seals the chamber when a ball is loaded into the barrel. The piston design functioned by pushing a ball forward and closing off the hopper hole, firing, and then retracting, allowing the next ball to drop in as shown in Figure 2.
Figure 2: Piston retracting(top) and pushing a ball forward into firing position(bottom)
Other components in the loading subsystem include a hopper, aluminum loading tube, rubber bands, and a 3-Way solenoid valve. The hopper of our loading system is a 22 oz. plastic cup, which is attached to an aluminum loading tube that can hold all 6 Nerf balls. The hopper has no actuators in it, relying on gravity to feed the balls. The rubber bands(B in Figure 3) help retract the piston to its resting position. The time it takes a ball to fall into the barrel from the loading tube is less than 1 second.
Figure 3: Ball Loading System: Piston(A[resting position]), Rubber Bands(B), Hoses and Clamps(C)
In order to control the solenoids via our microcontroller, we had to create a switching mechanism because the microcontroller did not have the necessary voltage or current to activate the solenoids. We implemented the following circuit using transistors(Figure 4). This allowed us to output a 5V signal from the microcontroller to the transistor. This would “turn on” the transistor and allow 12V to pass to the solenoid. We placed a diode between the pins on the solenoid so that the back emf did not damage the microcontroller.
Figure 4: Solenoid System: Circuit Diagram
Firing SystemThe firing system consists of a 2-Way solenoid valve, barrel, and hoses and clamps(Figure 5).
Figure 5: Firing System: Barrel(A), 2-Way Solenoid Valve(B), Hose and Clamps(C)
We use a ¾’’ hose as an expansion chamber to fire the ball. Initially, we used a smaller diameter hose and the firing power was lacking. We found that the bigger hose gave us sufficient power. The 2-Way solenoid valve activates and the compressed air releases out of the hose. Inside the barrel, we made a slight indent at the bottom in order to prevent the ball from rolling out when the barrel was pointed downwards. The complete pneumatic layout for both the loading and firing systems is below(Figure 6):
Figure 6: Pneumatic Layout of Firing(Left) and Loading(Right)
System Vision System
Our original system design was to use a webcam(A on Figure 7) with the Gumstix microprocessor to analyze images and send via serial the positions of the targets to our microcontroller. We were unable to get the Gumstix to run our vision code, so we had to use a laptop in our final system. The laptop was able to read images from the webcam and send current positions of all 3 targets to the microcontroller.
Figure 7: Vision System: Webcam and Mount(A)
Azimuth and Elevation Aiming System
In order to move the barrel to a desired position, we used 2 high torque motors that actuate the azimuth and elevation angles of our system(Figure 8 and 9 respectively).
Figure 8: Azimuth Rotation Motor
Figure 9: Elevation Rotation Motor(A) with Potentiometer(B), Turntable(C)
Our software architecture consists of two programs: track_targets is written in C++ using the OpenCV library and executes on a processor (e.g. a laptop). It simultaneously tracks all three target locations in webcam images, and converts these locations into azimuth/elevation angle commands. These are sent, along with other information, to the Arduino via serial communication in a 31 digit numerical string (explained in Table 1). multishot_cannon_controller executes on the Arduino. It receives input from all remaining sensors (potentiometers and switches) and controls the motors and valves of the cannon. Software communication is summarized by the flowchart in Figure 10. Note that, no communication from the Arduino to the computer vision program, track_targets, is required; only debugging messages are sent. The state of the cannon (including mode, current target, etc.) is fully managed by the Arduino and is unknown to track_targets.
Table 1: Explanation of numeric string sent to Arduino via Serial communication
Figure 10: Flowchart of software communication