(Read more >>)
Here's a few overview shots
The main part of this robot is the mechanism that sucks up the spheres. First, a pair of beams guides the spheres towards the "mouth" of the robot. Next, the spheres are caught by the spinning scooper. The scooper has rubber pieces on its edges to grip the spheres. The scooper pulls the spheres in, and the teeth pull the spheres off of the ground. After than the scooper flings them up a ramp.
When the scooper is running, it is a blur
The motor that powers the scooper, geared 3:1
Once the spheres reach the top of the ramp, they hit this deflector
Then they fall into this holding tank
Sphere eater has a simple drivetrain. An NXT motor is tacked onto each side of the NXT brick, and a pair of rubber treads is added to each motor. I also added a cross support to keep the drivetrain from bending too much.
Drivetrain bottom view
I remote control control Sphere Eater with my new HiTechnic Infrared Receiver sensor. It allows me to use my Power Functions remotes on my NXT robots, which is great if I want to drive Sphere Eater around nomming spheres.
My new sensor
Because the NXT buttons are covered by spheres when the holding tank is full, I added a touch sensor to stop the program. It's mounted like the IR Receiver and it has a large gear on top to make it easier to press.
The touch sensor off button.
Like all my programs, the Sphere Eater program is written in RobotC, an awesome programming language for robots. You can download RobotC for yourself here, but after 30 days you'll have to buy a license if you want to keep using it. Here's the program:
#pragma config(Sensor, S1, rc, sensorI2CCustom)
#pragma config(Sensor, S2, nom, sensorSONAR)
#pragma config(Sensor, S4, stop, sensorTouch)
#pragma config(Motor, motorA, pick, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorB, lft, tmotorNormal, PIDControl, reversed, encoder)
#pragma config(Motor, motorC, rt, tmotorNormal, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
nVolume = 4;
sbyte red = 0;
sbyte blue = 0;
motor(pick) = 100;
bool looper = true;
nMotorEncoder[pick] = 0;
HTIRRreadChannel(rc, 1, red, blue);
if(red == -128)
red = 0;
if(blue == -128)
blue = 0;
motor(lft) = red * 2 / 3;
motor(rt) = blue * 2 / 3;
nxtDisplayString(2, "%i", nMotorEncoder[pick]);
if(nMotorEncoder[pick] < 12)
if(nMotorEncoder[pick] == 0)
motor(pick) = -100;
motor(lft) = 0;
motor(rt) = 0;
while(nMotorEncoder[pick] > -15);
motor(pick) = 100;
if(SensorValue[stop] == 1)
looper = false;
nVolume = 1;
Here's an overview of what it does:
It sets the volume to 4 so you can hear the "Nom" sound.
Then it starts the scooper motor (pick) running.
After that it enters a loop.
Inside that loop, it does several things.
It runs the remote control part of the program, setting the motors based on the remote.
It has two things it does if the scooper motor moves slowly.
If the motor moves slightly slower than usual, it plays the nom sound file (Note: You need to get a nom.rso sound file on your computer for this to work. I downloaded it off the internet and made it .rso through the NXT software.)
If the motor stops completely, then the program runs it backwards a short distance to unjam it.
If the touch sensor is pressed, it stops the program and sets the volume to 1 (That's where I like it to be most of the time.)