12/23/11

Sphere Eater

Since I make so many projects that scatter Zamor spheres across the floor, I decided to make a project that picks them up off the floor. I made a simple NXT chassis, then I built a holding tank on top of the NXT brick and an attachment to pick up the spheres. Since it seemed to eat the spheres, I decided to name it the Sphere Eater and I gave it a "Nom" sound effect that it plays whenever it detects a sphere being eaten. Since I already had the sound effect from "Nom Nom Nom Nom Nom Nom Nom", I decided to add some Nyan Cat music too. Fun.

Sphere Eater

To see some pictures and the program...
(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.

Front view

 When the scooper is running, it is a blur

Side view

Blur again

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               !!*//

#include "drivers/HTIRR-driver.h"

task main()
{
  nVolume = 4;
  sbyte red = 0;
  sbyte blue = 0;
  motor(pick) = 100;
  bool looper = true;
  while(looper)
  {
    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;
    wait10Msec(1);
    nxtDisplayString(2, "%i", nMotorEncoder[pick]);
    if(nMotorEncoder[pick] < 12)
    {
      if(!bSoundActive)
      {
        PlaySoundFile("nom.rso");
      }
    }
    wait10Msec(4);
    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.)

3 comments:

  1. the nxt's speaker makes most sounds kind of tinny, so you can't hear the "nom"s unless you have the volume pretty loud. i did hear them this time though. they actually do sound pretty funny

    ReplyDelete
  2. a couple of things: first of all, very nice idea and amazing product. second, very nice mechanism. third, how did u get the nxt to sense the balls when they get in to the basket? it would be hard to manage that with a single touch sensor or color sensor. and lastly, the robot doesn't really suck the balls up the chute. more accurately, it blasts, hits, pushes, propels them up. over all, very nice

    ReplyDelete
  3. @qlaxx22: I had the volume on full, but it's still hard to hear over the motor whine. It doesn't actually sense the spheres when they go into the basket. It senses them when the scooper hits them. The spheres cause the scooper to slow down a little bit, and the NXT detects the slowing down using the motor's rotation sensor.

    ReplyDelete