Wednesday, April 16, 2014

Disc Foam, Limit Switches, Hopper Side-Skirts, Compass Mount, Front Channel - Matt Mannino

With 1 week left, we finally started to put together most of the vital pieces to the robot.  We ran into the issue where spacing on the discs was very critical, and the slightest adjustment would either make them grip the balls too much, or not enough.  So the addition of foam on the inside of one disc would help compensate for the variation in spacing.  
Green foam on inner disc
Another vital part of the ball collection mechanism is the hopper.  We cut and mounted the hopper ramp, but there still needed to be some sort of walls to keep the balls from falling out.  So we cut and mounted some 1/16 inch aluminum sheet metal for the side-skirts. They are also notched at the electronics box hinges to still allow access.

Side-skirts for hopper
The other mechanism we added was a front channel to help channel the various balls into the collection mechanism.  It is comprised of Vex c-channel about 12 inches long each.  They are mounted with a piano hinge on the inside of the chassis and with a slotted L-bracket on the outside.

Front channel (far right)

 The additions to allow the robot to realize it has backed in to the home station are two limit switches at the very back of the robot.  These will allow the robot to perfectly line up with the home station.  Another limit switch we added was for the trapdoor so the robot will be able to open and close the door accordingly.

Limit switch on back for home station

Limit switch on top bracket of trap door mechanism
While coding, I realized that any metal in the immediate vicinity of the compass module would cause erratic readings.  To address this, we had to come up with a mount that was void of metal for the most part.  We cut a piece of 1 inch diameter pvc to about 7 inches for the main mount. To hold the compass module in place, we used a piece of fairly rigid foam and inserted the connectors for the compass.  I also fished the wires through the pvc.

Side view of compass mount

Top view of compass mount

Sunday, April 13, 2014

Trap Door and Electronics Box Work - Matt Mannino

With more items on our to-do-list left, we are finally finishing them one at a time.  We assembled a "trap door" for the hopper on the back of the robot.  This allows the balls to be dumped out from the hopper into the home station once its path is completed.
Trap Door closed

Trap Door opened
We also added some smaller features to the electronics box that protects and houses the electronics components.  There are two metal clasps, one on each side, that hold the box shut.  There is also a hinge that locks the box in place while it is open.

Metal clasp to hold protective box shut

Hinge on left to keep box open for working on electronics

Final Robot so far

Drive Motor Configuration, Wiring, and Disc motor - Andrew Baden

Over the past few days, we have completed many of our remaining tasks to get the project completed by April 25th.  For starters, we finally have the correct motors in place for our drive train, and have the chains correctly laid out to the point that we shouldn't need to reconfigure them again.
The correct drive train motors mounted and wired
We have also completed most of the major wiring to for devices such as the motors, motor controllers, battery, switches, indicator light, and the Arduino motor controller.

All the major components wired and placed

Emergency and main power switches, and emergency light mounted and wired

Indicator light operational
Now that we have the discs cut and hubs put on them, we can now finalize the mounting solution for them. The mount we used before was too flimsy, and was difficult to mount the motor to.  The mount we have now houses a compound gearbox because the motor we chose that would have enough power, runs too fast. This compound gearbox puts the discs spinning at an effective speed. The mount we have now also uses angle aluminum from the Gears Ed. kit to allow for a more stable platform, and reduce the flimsiness the previous mount had.
Compound Gearbox
Over the next few days, I would like to finalize the hopper's position, and create the channeling plows on the front for the ball collector.

Saturday, April 5, 2014

Disc Machining and Mounting - Andrew Baden

Yesterday I finally got the plastic discs cut out on the CNC machine, with the help of Dr. B.  Each disc has a bolt pattern to mount a hub to, so we can mount the discs themselves to a shaft.

The discs being ready to cut in the CNC machine
More perorations for the discs
Discs being cut
Discs cut with hub attached
Discs attached to chassis
Our next step is to figure out a way to power these discs, and to put an abrasive or rubber like material on the discs to better pick up the balls from the ground.

Sunday, March 30, 2014

Compass Sensor mount - Andrew Baden

For our compass sensor, we need a mount that is a material that will not interfere with sensor itself.  So, I created this mount that we can print on the 3D printer with plastic material.  This mount also places the sensor itself above anything else that could possibly interfere with it such as magnetic fields from motors, or the metal chassis itself.

CADD Model of Compass Mount

Saturday, March 22, 2014

Dog Collar Work - Andrew Baden

Over spring break, I worked on getting the dog collar to interface with the Arduino micro controller.  When I had it connected before, it was having issues reading stable values while the dog collar was not detecting the outer boundary of the dog fence.  I found a simple issue with it, and fixed the problem.  The polarity was backwards! So now I have this working with an analog input on the micro controller itself.  To make this more simple when it comes to programming, I put the output to a 7414 inverting hex Schmitt trigger.   I used the 7414 to clean up the output of the dog collar because it was not always giving a nice stable value.  This will also allow us to use a digital input on the micro controller, and detect if it is at the boundary or not with boolean values rather than a range of values with the analog input.  

Schmitt Trigger on breadboard

Schmitt Trigger schematic
Basically when the Schmitt trigger sees an input (I am currently using pin 1) that is above 1.7V it will trigger a low output on pin 2, and when the trigger sees an input lower than  0.8V, it sends out a high output on pin 2. Now when the dog collar is near the dog fence, the input on the micro controller will read a LOW, and when the dog collar is away from the fence, a HIGH will be read.  I could potentially put the output of the inverter into the input of another inverter and the output of the second inverer to the micro controller to allow a HIGH to indicate the collar being next to the boundary, and a LOW to indicate the collar being away from the boundary.

Friday, March 7, 2014

Compass Programming with Vex Prototype- Matt Mannino

I have mounted the Arduino and the sensors onto the Vex prototype to start working on a main program.  I interfaced the Vex motors to the Arduino and added a 7.2V NiMH battery for power to the Arduino and the Vex Motors.  We started on a program that will face the robot in the correct heading based on what values it is given.  It works fine for headings up to 359 degrees.  It has trouble pointing North because it is on the threshold of 359 to 0 degrees and cannot compensate for that.  I have been trying to work on it so that it can work with that threshold of values.


Compass Program

#include <Wire.h>
#include <LSM303.h>
#include <Servo.h>

LSM303 compass;
Servo LeftMotor;
Servo RightMotor;
Servo BallMotor;

int stopp = 100;
int forward = 70;
int backward = 130;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  compass.init();
  compass.enableDefault();
  LeftMotor.attach(3);
  RightMotor.attach(2);
  BallMotor.attach(4);
 
  compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
  compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
}

void loop()
{
  int dir = compass.heading();
  Serial.println(dir);
 
  face(180);
}

void face (int val)
{
  int dir = 0;
 
  while(true)
  {
    compass.read();
    dir = compass.heading();
   
    Serial.println(dir);
   
     if(dir > (val+5))
     {
       turnleft();
     }
     else if(dir < (val-5))
     {
       turnright();
     }
     else
     {
       nospeed();
       delay(50);
       break;
     }
   }
 }

//motor movement functions
void goforward()
{
  RightMotor.write(backward);
  LeftMotor.write(forward);
  delay(1);
}

void gobackward()
{
  RightMotor.write(forward);
  LeftMotor.write(backward);
  delay (1);
}

void nospeed()
{
  RightMotor.write(stopp);
  LeftMotor.write(stopp);
  delay (1);
 
}

void turnleft()
{
  RightMotor.write(backward);
  LeftMotor.write(backward);
  delay (1);
}

void turnright()
{
  RightMotor.write(forward);
  LeftMotor.write(forward);
  delay(1);
}

void ballmotor()
{
  BallMotor.write(forward);
  delay(1);

}