Wall-ter is a wall following robot.
if (fwdIn == LOW && midIn == LOW && leftIn == LOW) { go_backward(); } else if (fwdIn == LOW && midIn == LOW && leftIn == HIGH ) { turn_right(); } else if (fwdIn == LOW && midIn == HIGH && leftIn == LOW ) { stay(); } else if (fwdIn == LOW && midIn == HIGH && leftIn == HIGH ) { turn_right(); } else if (fwdIn == HIGH && midIn == LOW && leftIn == LOW ) { turn_right(); } else if (fwdIn == HIGH && midIn == LOW && leftIn == HIGH ) { go_forward(); wall_timer = millis(); } else if (fwdIn == HIGH && midIn == HIGH && leftIn == LOW ) { go_forward(); wall_timer = millis(); } else if (fwdIn == HIGH && midIn == HIGH && leftIn == HIGH ) { if( millis() - wall_timer > 1500 ) go_forward(); else turn_left(); } }
Each of those simple instructions carried out when the sensors are activated in a certain way adds up to a more simple elegant behavior. This robot seems to follow walls. This is a small example of
emergence
, here's a little example of emergence from MIT
exploring emergence
.
/* LucidTronix Wall Follower * autonomous robot * 3 proximity sensors * Details pictures, explanation at: * http://www.lucidtronix.com/tutorials/5 */#includeServo right;Servo left;int fwdSensor = 0;int midSensor = 1;int leftSensor = 2;int high_pwm = 110;int low_pwm = 75;boolean wall_near = false;unsigned int wall_timer = 0;void setup() { right.attach(6); left.attach(5); pinMode(fwdSensor, INPUT); pinMode(leftSensor, INPUT); pinMode(midSensor,INPUT);}void loop() { int leftIn = digitalRead(leftSensor); int midIn = digitalRead(midSensor); int fwdIn = digitalRead(fwdSensor); if (fwdIn == LOW && midIn == LOW && leftIn == LOW) { go_backward(); } else if (fwdIn == LOW && midIn == LOW && leftIn == HIGH ) { turn_right(); } else if (fwdIn == LOW && midIn == HIGH && leftIn == LOW ) { stay(); } else if (fwdIn == LOW && midIn == HIGH && leftIn == HIGH ) { turn_right(); } else if (fwdIn == HIGH && midIn == LOW && leftIn == LOW ) { turn_right(); } else if (fwdIn == HIGH && midIn == LOW && leftIn == HIGH ) { go_forward(); wall_timer = millis(); } else if (fwdIn == HIGH && midIn == HIGH && leftIn == LOW ) { go_forward(); wall_timer = millis(); } else if (fwdIn == HIGH && midIn == HIGH && leftIn == HIGH ) { if( millis() - wall_timer > 1500 ) go_forward(); else turn_left(); } }void turn_left(){ left.write( high_pwm); right.write( high_pwm ); }void turn_right(){ left.write( low_pwm ); right.write (low_pwm );}void go_forward(){ left.write(high_pwm); right.write( low_pwm );}void go_backward(){ left.write(low_pwm); right.write( high_pwm );}void stay(){ left.write( 90 ); right.write( 90 ); }
| Title | Description | # | Cost | Link | Picture |
| Servo Motor | Continuous rotation servo motor. | 2 | $13.95 | Link |
|
| Proximity Sensor | Digital proximity sensor. 5vValue:5v | 3 | $6.95 | Link |
|
| Servo Wheel | Wheel that attaches easily to servo motors. | 2 | $4.0 | Link |
|
| ATMEGA168A-AU | IC MCU AVR 16K FLASH 32TQFPValue:1.8 V ~ 5.5 V 20MHz | 1 | $2.43 | Link |
|
Comments: