Difference between revisions of "Home Depot Special"
(→Code) |
(→Code) |
||
Line 34: | Line 34: | ||
<pre> | <pre> | ||
+ | |||
+ | |||
/************************************************************* | /************************************************************* | ||
− | + | Sumo Competition program by Brian Wagner | |
− | 10/ | + | 10/24/10 |
* | * | ||
*************************************************************/ | *************************************************************/ | ||
+ | #include <PololuQTRSensors.h> | ||
#include <PololuSerial.h> | #include <PololuSerial.h> | ||
#include <NewSoftSerial.h> | #include <NewSoftSerial.h> | ||
Line 51: | Line 54: | ||
int Range = 0; | int Range = 0; | ||
− | int LineThreshold = | + | int LineThreshold = 800; |
int RangeThreshold = 100; | int RangeThreshold = 100; | ||
+ | |||
+ | int SpinDir = 0; | ||
+ | int spiral = 20; | ||
#define rxPin 0 | #define rxPin 0 | ||
Line 61: | Line 67: | ||
PololuSerial motor = PololuSerial(&mySerial,rstPin); | PololuSerial motor = PololuSerial(&mySerial,rstPin); | ||
byte fwVersion = -1; | 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() | void setup() | ||
Line 67: | Line 76: | ||
motor.begin(); | motor.begin(); | ||
motor.stopBothMotors(); | motor.stopBothMotors(); | ||
+ | delay(5000); | ||
} | } | ||
Line 72: | Line 82: | ||
{ | { | ||
//check line sensors | //check line sensors | ||
− | + | qtr.read(sensors); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | + | if (sensors[0] < LineThreshold && sensors[1] < LineThreshold) { |
motor.stopBothMotors(); | motor.stopBothMotors(); | ||
motor.motor0Reverse(127); | motor.motor0Reverse(127); | ||
Line 106: | Line 93: | ||
motor.stopBothMotors(); | motor.stopBothMotors(); | ||
} | } | ||
− | else if ( | + | else if (sensors[0] < LineThreshold && sensors[1] > LineThreshold) { |
− | motor. | + | motor.stopMotor0(); |
motor.motor1Forward(127); | motor.motor1Forward(127); | ||
− | delay( | + | delay(40); |
+ | motor.motor0Forward(127); | ||
+ | SpinDir = 1; | ||
+ | spiral = 20; | ||
} | } | ||
− | else if ( | + | else if (sensors[0] > LineThreshold && sensors[1] < LineThreshold) { |
− | motor. | + | motor.stopMotor1(); |
motor.motor0Forward(127); | motor.motor0Forward(127); | ||
− | delay( | + | delay(40); |
+ | motor.motor1Forward(127); | ||
+ | SpinDir = 0; | ||
+ | spiral = 20; | ||
} | } | ||
else { | else { | ||
Range = analogRead(RangeSensorPin); | Range = analogRead(RangeSensorPin); | ||
− | if ( Range | + | if ( Range > RangeThreshold ) { |
//Charge!!! | //Charge!!! | ||
motor.motor0Forward(127); | motor.motor0Forward(127); | ||
motor.motor1Forward(127); | motor.motor1Forward(127); | ||
− | delay( | + | delay(100); |
} | } | ||
else { | else { | ||
//let's look around | //let's look around | ||
− | motor.motor0Forward( | + | if (SpinDir == 1 ) { |
− | motor.motor1Forward( | + | motor.motor0Forward(80); |
− | delay( | + | motor.motor1Forward(80); |
+ | } else { | ||
+ | motor.motor1Forward(80); | ||
+ | motor.motor0Forward(80); | ||
+ | } | ||
+ | delay(20); | ||
+ | //spiral = spiral +20; | ||
+ | // if (spiral > 100) { spiral = 20; } | ||
+ | //motor.stopBothMotors(); | ||
} | } | ||
Latest revision as of 10:14, 24 March 2011
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(); } } }