Difference between revisions of "Home Depot Special"
(Created page with "__NOTOC__ 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 t...") |
(→Code) |
||
(One intermediate revision by the same user not shown) | |||
Line 34: | Line 34: | ||
<pre> | <pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /************************************************************* | |
− | + | 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() { | + | void loop() |
− | // | + | { |
+ | //check line sensors | ||
qtr.read(sensors); | qtr.read(sensors); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if (sensors[0] < LineThreshold && sensors[1] < LineThreshold) { | |
− | + | motor.stopBothMotors(); | |
− | + | motor.motor0Reverse(127); | |
− | + | motor.motor1Reverse(127); | |
− | if (sensors[0] < | + | delay(500); |
− | + | motor.motor1Forward(127); | |
− | + | delay(300); | |
− | + | motor.stopBothMotors(); | |
− | + | } | |
− | + | else if (sensors[0] < LineThreshold && sensors[1] > LineThreshold) { | |
− | + | motor.stopMotor0(); | |
− | delay( | + | 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); | |
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
else { | 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(); | ||
} | } | ||
− | + | ||
− | + | } | |
− | + | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> |
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(); } } }