Home Depot Special
Home depot special is a 'bot Brian Wagner built for the fall 2010 LVL1 Sumobot competition.
Components
I will get pictures up soon, but until then here are the components I used...
Motor and wheels http://www.solarbotics.com/products/gmpw_deal/
Casters to maintain balance http://www.pololu.com/catalog/product/950
Motor Driver http://www.pololu.com/catalog/product/110 (discontinued)
Bare Bones Board Arduino clone http://shop.moderndevice.com/products/bbb-kit
New work Box - makes a nice chassis. I cut holes in this and hot-melt glued the motors in it. http://www.homedepot.com/h_d1/N-5yc1v/R-100404058/h_d2/ProductDisplay?langId=-1&storeId=10051&catalogId=10053
digital line sensor http://www.pololu.com/catalog/product/959
distance sensor http://www.pololu.com/catalog/product/1136
battery Holder for Arduino power https://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2111329_-1
battery holder for motor power (9v) https://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_109154_-1
Misc switches and other stuff
Code
This is the code I used. It worked OK, but not great. I need to tweak it more.
/*************************************************************
Sumo Competition program by Brian Wagner
10/24/10
*
*************************************************************/
#include <PololuQTRSensors.h>
#include <PololuSerial.h>
#include <NewSoftSerial.h>
#define LineSensorLeftPin 3
#define LineSensorRightPin 2
#define RangeSensorPin 0
int LineLeft = 0;
int LineRight = 0;
int Range = 0;
int LineThreshold = 800;
int RangeThreshold = 100;
int SpinDir = 0;
int spiral = 20;
#define rxPin 0
#define txPin 4
#define rstPin 5
NewSoftSerial mySerial = NewSoftSerial(rxPin, txPin);
PololuSerial motor = PololuSerial(&mySerial,rstPin);
byte fwVersion = -1;
unsigned int sensors[2];
PololuQTRSensorsRC qtr((unsigned char[]) {LineSensorLeftPin,LineSensorRightPin}, 2, 2000, 255); //declares two line sensors on pins 2,3
void setup()
{
mySerial.begin(9600);
motor.begin();
motor.stopBothMotors();
delay(5000);
}
void loop()
{
//check line sensors
qtr.read(sensors);
if (sensors[0] < LineThreshold && sensors[1] < LineThreshold) {
motor.stopBothMotors();
motor.motor0Reverse(127);
motor.motor1Reverse(127);
delay(500);
motor.motor1Forward(127);
delay(300);
motor.stopBothMotors();
}
else if (sensors[0] < LineThreshold && sensors[1] > LineThreshold) {
motor.stopMotor0();
motor.motor1Forward(127);
delay(40);
motor.motor0Forward(127);
SpinDir = 1;
spiral = 20;
}
else if (sensors[0] > LineThreshold && sensors[1] < LineThreshold) {
motor.stopMotor1();
motor.motor0Forward(127);
delay(40);
motor.motor1Forward(127);
SpinDir = 0;
spiral = 20;
}
else {
Range = analogRead(RangeSensorPin);
if ( Range > RangeThreshold ) {
//Charge!!!
motor.motor0Forward(127);
motor.motor1Forward(127);
delay(100);
}
else {
//let's look around
if (SpinDir == 1 ) {
motor.motor0Forward(80);
motor.motor1Forward(80);
} else {
motor.motor1Forward(80);
motor.motor0Forward(80);
}
delay(20);
//spiral = spiral +20;
// if (spiral > 100) { spiral = 20; }
//motor.stopBothMotors();
}
}
}