Strategery

"Heavy Ice, eh?" designed with the purpose of not only passing the assignment with a guaranteed three points, but also with the intent of winning the competition. After reading all of the rules carefully, we realized that the best strategy for beating another team was releasing all five pucks as quickly as possible. This idea stemmed from the clause that as soon as one team released all five pucks, the match was over and whoever had the most points won.

We thought about perhaps dumping all five pucks immediately, without aiming, but in the end decided the chances of scoring any points was small. We then turned to the idea of not moving, and instead simply turning and shooting. This is what we ultimately did.

After deciding to "turn and shoot," we considered for a long while the idea of ejecting all five pucks in some sort of cart. The cart would not be motorized, but instead would simply roll forward while attached to the main robot by a string. When it got to the end of the line, some mechanical trigger would make it drop all of the pucks. We thought the cart might actually be able to move more quickly than the pucks (it was not limited by the need to come to rest in the target area--the string would make it stop). But ultimately, we decided that since the game was over after the first team RELEASED the last puck, it would actually be faster to shoot.

Next, we chose to use the IR beacons and not the tape to aim. We decided that while the tape might be slightly more dependable, there was no algorithm that would allow the tape alone to point the shooter in the right direction (there would be a 50 % chance it would point the shooter in the opposite direction). And we were also confident that the IR beacons would give good accuracy, which they ultimately did.

Finally, as part of our quick release strategy, we decided it would be best to release all five pucks at the same time. We only need to score one point, so after the first puck was released, it did not matter where the other four ended up. Also, because the robot was nominally designed shoot the pucks at the center of the target, we saw no reason not to make all five pucks nominally head for the center. This allowed room for error. We only briefly considered sending the first puck out fast and hard to mess up the other team.

Sensing

Since we decided to go with a "shooter" rather than a "driver" for our robot design, accurate sensing of the IR beacons was imperative. Since speed was also a factor, we decided that we could use 4 orthogonal sensors, and then only a 90-degree turn could entirely determine the location of the beacons. The four IR phototransistors that we used were housed in a 0.75" square box that was attached to shaft of a stepper motor at the very top of our robot. (see photo) Each phototransistor had a pair of plastic "blinders" that reduced its field of view for more pinpoint accuracy. After several iterations with the circuitry, we decided to build a separate circuit for each phototransistor to prevent any interaction between the sensors. The circuit diagram shows how we were able to sense an IR signal at 1560 Hz, and output a DC voltage over the range of 2.0 to 5.0 V that was then used as input to the MicroCore-11, and interpreted by the sense.c software module.

Here is a step-by-step breakdown of how the IR signal was conditioned to generate a DC voltage output ranging from 2.0 V to 5.0 V, using the above circuit:

Step 1: Reference Voltage

Since we did not want any negative voltages anywhere in the circuit, we chose a reference voltage of 2.0 V, and used this throughout the circuit. This way any oscillating signals would vary up and down from 2V, rather than 0V. This was accomplished by using the simple voltage divider shown at the bottom left of the circuit diagram, along with a unity gain buffer to ensure a stable voltage.

Step 2: Phototransistor Input

The raw signal was sensed by a phototransistor in the sourcing configuration, as shown at the top left of the circuit diagram. A large resistor value was chosen (220k) since the signal was rather weak. The output of this step was a 1560 Hz square wave with a maximum amplitude of around 40 mV, plus some low frequency offset and high frequency noise.

Step 3: High Pass Filter

Since the signal we were interested in was at 1560 Hz, we next used a high pass filter to eliminate any DC offset or lower frequency noise. This was accomplished by selecting a corner frequency of about 720 Hz (by using the 0.1 uF capacitor and 2.2k resistor shown). Using the reference voltage, the resulting signal was still a square wave with a maximum amplitude of around 40 mV, but there was no low frequency offset or noise, and the signal was centered on the reference voltage of 2.0 V.

Step 4: First Amplification Stage

Next, we added a 100x gain to amplify the signal to a more easily detectable level. Since we were using the LM6484 rail-to-rail op-amps, the output of this stage was now potentially a 1560 Hz square wave with amplitude that ranged from rail-to-rail.

Step 5: Rectification

By simply adding a rectifier diode, the bottom 2 V of the signal from the last stage was clipped, leaving a 1560 Hz signal that ranged now from 2 V to 5 V.

Step 6: Low Pass Filter

Next, a low pass filter with a corner frequency of about 15 Hz was used to basically find the average value of the signal from Step 5. When no signal was present in Step 5, the signal into this phase would have been a DC signal at 2.0 V. When an oscillating signal was present in Step 5, it would range from 2.0 V to some higher value, say 4.0 V, and the output here would be the average of that signal - a DC signal of 3.0 V. Thus, the possible outputs from this stage are DC voltages ranging from 2.0 to 3.5 V.

Step 7: Second Amplification Stage

Just to add a little bit more resolution to the signal coming from Step 6, we added one more amplification stage so that any time a signal was present, it would easily push the output to the upper rail (5.0 V). This completed the circuit and this signal was fed to the analog input ports of the MicroCore-11.

Step 8: LED

To aid in debugging, we added an LED at the output that would emit light whenever the output was high. This way, we could tell immediately if the circuit was "seeing" the beacons without reading the ports on the Micro-Core. This ultimately saved us in the tournament when we could see that all the sensors were reading high, clueing us in to the fact that the 5V-power supply was generating 12 V!

This circuitry was quite robust, and in all of our testing, we never had a false positive, and we were almost always able to rail the output when pointing at a beacon. Once the circuit was debugged, we cleaned it up nicely and semi-permanently installed in on one of the panels of the breadboards we were given for the course. Fitting four identical copies of this circuit onto half of a breadboard was quite a challenge, but it can be done… (see photo).

Turning

Motivation: We wanted to turn the shooting mechanism as quickly as possible to minimize the overall delivery time. We correctly predicted that turning would be the most time consuming of the three elements of delivery (sensing, turning, and shooting). We therefore designed the robot to have a minimal amount of mass attached to the parts that moved. This would minimize the angular inertia, and thus make starting and stopping easier and faster. For the same reasons, we also built a rigid structure for the shooter and pucks to turn on.

Also, we wanted the turning to be accurate. We therefore, used a stepper motor so that we could tell the shooter to point in a given direction. We geared the stepper motor down to make the discrete angles smaller, and to reduce the load on the stepper motor.

Result: The turning did not turn out as well as planned. In fact, it is probably what prevented us from having the best and fastest robot.

The accuracy worked fine. The target was bigger and easier to hit than intuitively expected, and thus we never had a problem of missing the target if the stepper motor did not skip any steps. However, in order to ensure that the stepper motor did not skip any steps, we needed to increase the period of the stepper pulses.

Also, the motor we used was not that powerful, and we attempted to make it turn the shooter from the inside of the structure, close to the axle of rotation. The gearing did increase the mechanical advantage of the motor, but this was not enough to overcome the disadvantage created by the setup.

The end result was a very slow turning mechanism. To make a full 180 degree rotation (the maximum possible with our strategy) the motor needed over four seconds. We also tried starting slow, and then accelerating, but we ultimately found that the stepper motor could only handle a very limited speed.

Shooting

Motivation: We were not concerned with high precision shooting (depth-wise), because we knew that all we needed to do was score one point quickly to beat another team. However, at the early stages of our design process, we thought that even with perfect aiming from the sensing and turning, that it might be difficult to hit the target every time.

Therefore, we planned to use powerful DC motors that would be pulse-width modulated. We found an accurate way to determine distance from the center of the target based on the angle between the two beacons. We thought that if our robot were placed close to the target, we would not spin the motors as fast.

Triggering: After playing around with using a small motor to control a trigger to hold and release the first puck, we ultimately settled on used a solenoid. This drew a lot of current, but this was not a problem because we attached it in parallel with the battery and motors.

Findings: The most difficult problem we ended up facing with the motors was power. As stated earlier, hitting the target was not difficult, but getting enough power to spin the motors and impart energy to the pucks was a problem.

We soon realized the motors we bought would not work with the power supply. Therefore, we decided to use a battery (standard 7.5 V remote control car battery that the cockroaches all used). However, even with the awesome power of the battery spinning cheap model airplane wheels full speed, the pucks would not go more than a foot.

We realized we needed to add rotational mass to the wheels, so we added brass discs to the wheels. This modification, along with the battery easily solved all our power problems. With the two motors connected directly to the battery in parallel, we shot the pucks over 20 feet.

Finally, the high expected current from the battery forced us to use special diodes that we bought from Matt for fifty cents. The DS3658 drivers were not rated to sink enough current.

Results: In the end, the shooting worked fine. The attachment between the motors and wheel (homemade aluminum couplers) were not great and sometimes caused the wheels to spin improperly and rub against the ground. But for the most part, the pucks never had any trouble reaching the target. The first puck usually went quite a bit further than the last puck as the momentum of the wheels was reduced with each puck. To counter this, we increased the PWM right after triggering the first puck. Still, the first puck went farther, but this was a good thing, because it helped ensure that we would score at least one point.

See our complete circuit diagram.

Home

The Assignment

The Story of Heavy Ice, Eh?

Photo Gallery

Brilliant Code

Heavy Ice, Eh?