Interesting Links
Code used for mobile robot demo
/*
Robot Obstacle Avoidance
*/
#define ENA1 2 /* turn on/off left motor */
#define IN1 3 /* control for left motor */
#define IN2 4 /* control for left motor */
#define ENA2 7 /* turn on/off right motor */
#define IN3 5 /* control for right motor */
#define IN4 6 /* control for right motor */
#define trigPin 11 /* trigger for sonar */
#define echoPin 10 /* data for sonar */
#define threshhold 50 /* how close is to close */
#define maxIterations 10
int i;
// the setup routine runs once when you press reset:
void setup()
{
Serial.begin(9600);
/* right motor */
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENA1,OUTPUT);
/* let motor */
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENA2,OUTPUT);
/* sonar */
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
i = 0;
}
// the loop routine runs over and over again forever:
void loop() {
/* direction:
forward: low/high
reverse: high/low
stop: low/low
*/
i = i + 1;
/* find out how farA away obstacle is */
if (threshhold > howFarAway())
{ /* obstruction -- must turn */
turnLeft(128, 15);
} /* obstruction -- must turn */
else
{ /* all clear -- forward ho! */
moveForward(96, 10);
} /* all clear -- forward ho! */
if (maxIterations < i)
{ /* turn other way in case we are hung up */
i = 0;
turnRight(128, 20);
Serial.println("turn right");
} /* turn other way in case we are hung up */
}
int howFarAway()
{
int duration;
int distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
if (0 > duration)
{ duration = 999999; } /* hack because over long returns negative */
distance = (duration/2) / 29.1;
Serial.print("Duration: ");
Serial.print(duration);
Serial.print(" Distance: ");
Serial.println(distance);
return distance;
}
void moveForward(int speed, int tSec)
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
moveRobot(speed, tSec);
}
void moveBackward(int speed, int tSec)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
moveRobot(speed, tSec);
}
void turnRight(int speed, int tSec)
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
moveRobot(speed, tSec);
}
void turnLeft(int speed, int tSec)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
Serial.println("Turn left");
moveRobot(speed, tSec);
}
void moveRobot(int motorSpeed, int tSec)
{
analogWrite(ENA1, motorSpeed - 0);// motor speed
analogWrite(ENA2, motorSpeed);// motor speed
Serial.println("Moving");
delay(tSec * 10);
Serial.println("Stopping");
analogWrite(ENA1, 0);
analogWrite(ENA2, 0);
}