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) |
||
Line 34: | Line 34: | ||
<pre> | <pre> | ||
− | // | + | /************************************************************* |
− | + | Motor test by Brian Wagner | |
+ | 10/21/10 | ||
+ | * | ||
+ | *************************************************************/ | ||
− | + | #include <PololuSerial.h> | |
− | + | #include <NewSoftSerial.h> | |
− | |||
− | + | #define LineSensorLeftPin 3 | |
− | + | #define LineSensorRightPin 2 | |
− | + | #define RangeSensorPin 0 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | int | + | int LineLeft = 0; |
+ | int LineRight = 0; | ||
+ | int Range = 0; | ||
− | + | int LineThreshold = 7; | |
− | + | int RangeThreshold = 100; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | #define rxPin 0 | |
− | + | #define txPin 4 | |
− | + | #define rstPin 5 | |
+ | |||
+ | NewSoftSerial mySerial = NewSoftSerial(rxPin, txPin); | ||
+ | PololuSerial motor = PololuSerial(&mySerial,rstPin); | ||
+ | byte fwVersion = -1; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | mySerial.begin(9600); | ||
+ | motor.begin(); | ||
+ | motor.stopBothMotors(); | ||
} | } | ||
− | void loop() { | + | void loop() |
− | + | { | |
− | + | //check line sensors | |
− | + | //1 = white, 15 = black | |
− | + | //left Sensor | |
− | + | pinMode( LineSensorLeftPin, OUTPUT ); | |
− | + | digitalWrite( LineSensorLeftPin, HIGH ); | |
− | + | delayMicroseconds( 50 ); | |
− | + | pinMode( LineSensorLeftPin, INPUT ); | |
− | + | long LineLeft = 0; | |
− | + | while ( digitalRead( LineSensorLeftPin ) == HIGH ) { | |
− | + | LineLeft++; | |
− | + | if ( LineLeft == 15 ) { break; } | |
− | + | delay( 20 ); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | delay( | ||
} | } | ||
− | + | ||
− | + | //right sensor | |
− | + | pinMode( LineSensorRightPin, OUTPUT ); | |
− | + | digitalWrite( LineSensorRightPin, HIGH ); | |
− | + | delayMicroseconds( 50 ); | |
− | + | pinMode( LineSensorRightPin, INPUT ); | |
− | + | long LineRight = 0; | |
− | delay( | + | while ( digitalRead( LineSensorRightPin ) == HIGH ) { |
+ | LineRight++; | ||
+ | if ( LineRight == 15 ) { break; } | ||
+ | delay( 20 ); | ||
} | } | ||
− | + | ||
− | + | if (LineLeft < LineThreshold and LineRight < LineThreshold) { | |
− | + | motor.stopBothMotors(); | |
− | + | motor.motor0Reverse(127); | |
− | + | motor.motor1Reverse(127); | |
− | + | delay(500); | |
− | + | motor.motor1Forward(127); | |
− | delay(10); | + | delay(300); |
+ | motor.stopBothMotors(); | ||
+ | } | ||
+ | else if (LineLeft < LineThreshold) { | ||
+ | motor.stopBothMotors(); | ||
+ | motor.motor1Forward(127); | ||
+ | delay(10); | ||
} | } | ||
− | + | else if (LineRight < LineThreshold) { | |
− | + | motor.stopBothMotors(); | |
− | + | motor.motor0Forward(127); | |
− | + | delay(10); | |
− | + | } | |
− | + | else { | |
− | + | ||
− | + | Range = analogRead(RangeSensorPin); | |
− | + | if ( Range < RangeThreshold ) { | |
− | + | //Charge!!! | |
− | + | motor.motor0Forward(127); | |
− | + | motor.motor1Forward(127); | |
+ | delay(1000); | ||
} | } | ||
else { | else { | ||
− | + | //let's look around | |
− | + | motor.motor0Forward(64); | |
− | + | motor.motor1Forward(0); | |
− | + | delay(10); | |
− | |||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | } | |
− | + | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> |
Revision as of 10:13, 16 February 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.
/************************************************************* Motor test by Brian Wagner 10/21/10 * *************************************************************/ #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 = 7; int RangeThreshold = 100; #define rxPin 0 #define txPin 4 #define rstPin 5 NewSoftSerial mySerial = NewSoftSerial(rxPin, txPin); PololuSerial motor = PololuSerial(&mySerial,rstPin); byte fwVersion = -1; void setup() { mySerial.begin(9600); motor.begin(); motor.stopBothMotors(); } void loop() { //check line sensors //1 = white, 15 = black //left Sensor pinMode( LineSensorLeftPin, OUTPUT ); digitalWrite( LineSensorLeftPin, HIGH ); delayMicroseconds( 50 ); pinMode( LineSensorLeftPin, INPUT ); long LineLeft = 0; while ( digitalRead( LineSensorLeftPin ) == HIGH ) { LineLeft++; if ( LineLeft == 15 ) { break; } delay( 20 ); } //right sensor pinMode( LineSensorRightPin, OUTPUT ); digitalWrite( LineSensorRightPin, HIGH ); delayMicroseconds( 50 ); pinMode( LineSensorRightPin, INPUT ); long LineRight = 0; while ( digitalRead( LineSensorRightPin ) == HIGH ) { LineRight++; if ( LineRight == 15 ) { break; } delay( 20 ); } if (LineLeft < LineThreshold and LineRight < LineThreshold) { motor.stopBothMotors(); motor.motor0Reverse(127); motor.motor1Reverse(127); delay(500); motor.motor1Forward(127); delay(300); motor.stopBothMotors(); } else if (LineLeft < LineThreshold) { motor.stopBothMotors(); motor.motor1Forward(127); delay(10); } else if (LineRight < LineThreshold) { motor.stopBothMotors(); motor.motor0Forward(127); delay(10); } else { Range = analogRead(RangeSensorPin); if ( Range < RangeThreshold ) { //Charge!!! motor.motor0Forward(127); motor.motor1Forward(127); delay(1000); } else { //let's look around motor.motor0Forward(64); motor.motor1Forward(0); delay(10); } } }