The microcontroller Arduino UNO is programmed with the following instructions:
Line following robot:
The codes used are given below:
void setup ()
{
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
}
void loop() {
int LS=digitalRead (7);
int RS=digitalRead (6);
if (LS==1 && RS==1) //move forward
{
//motor 1
digitalWrite (13, HIGH);
digitalWrite (12, LOW);
analogWrite (11,255);
//motor 2
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
analogWrite (10,255);
}
if (LS==1 && RS==0) // turn Right
{
//motor 1
digitalWrite (13, HIGH);
digitalWrite (12, LOW);
analogWrite (11,255);
//motor 2
digitalWrite (9, HIGH);
digitalWrite (8, LOW);
analogWrite (10,255);
}
if(LS==0 && RS==1) // turn Left
{
//motor 1
digitalWrite (12, HIGH);
digitalWrite (13, LOW);
analogWrite (11,255);
//motor 2
digitalWrite (9, HIGH);
digitalWrite (8, LOW);
analogWrite (10,255);
}
if(LS==0 && RS==0) // stop
{
//motor 1
digitalWrite (13, LOW);
digitalWrite (12, LOW);
analogWrite (11,255);
//motor 2
digitalWrite (9, LOW);
digitalWrite (8, LOW);
analogWrite (10,255);
}
}
Light following robot:
#include<Servo.h>
int E1 = 5; //Enable pin for Right gear motor
int E2 = 6; //Enable pin for Left gear motor
int M1 = 4; //Left Motor pin 1
int M2 = 7; //Left Motor pin 2
int M3 = 8; //Right Motor pin 3
int M4 = 9; //Right Motor pin 4
Servo MyServo ;
int sp=12;
int angle = 90; //initial Servo Angle
int butpin = 10;
int butState;
int LS = A2; //left Sensor
int RS = A1; //Right Sensor
int FS = A0; //Forward Sensor
int a = 400; // Tolarance Value
int LMRead; //Left Motor Reading
int RMRead; //Right Motor Reading
int FMRead; // Forward Motor Reading
void setup() {
Serial.begin(9600);
pinMode(M1,OUTPUT);
pinMode(M2,OUTPUT);
pinMode(M3,OUTPUT);
pinMode(M4,OUTPUT);
pinMode(butpin,INPUT);
MyServo.attach(sp);
digitalWrite (E1, HIGH); //These pins are always High in H-Bridge so those were made 'High'
digitalWrite(E2,HIGH);
}
void loop() {
// Light Following
butState = digitalRead(butpin);
if(butState == LOW) {
LMRead = analogRead(LS);
RMRead = analogRead(RS);
FMRead = analogRead(FS);
// Moving Robot to Left Position
if (LMRead >a && RMRead<a && FMRead<a)
{
MyServo.write(angle+60); // Moving Servo to 120 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// Moving Robot to Right Position
else if (RMRead >a && LMRead<a && FMRead<a)
{
MyServo.write(angle-60); // Moving Servo to 60 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// Moving Robot to Forward Position
else if (FMRead > a && RMRead < a && LMRead < a)
{
MyServo.write(angle); // Moving Servo to 90 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// If Enough Light is Detected from Left & Centre Sensor then
else if (FMRead > a && RMRead < a && LMRead > a)
{
MyServo.write((angle+60)/2); // Moving Servo to 90 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// If Enough Light is Detected from Right & Centre Sensor then
else if (FMRead > a && RMRead > a && LMRead < a)
{
MyServo.write(170); // Moving Servo to 90 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// Now IF Lght is Detected from eiter left ,right or Center Sensor
else
{
MyServo.write(angle);
digitalWrite(M1,LOW); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,LOW); //Right Motor pin 3
digitalWrite(M4,LOW); //Right Motor pin 4
}
}
// Light Avoiding
if(butState == HIGH)
{
LMRead = analogRead(LS); //LMRead mean Left Motor Reading
RMRead = analogRead(RS); //RMRead mean Right Motor Reading
FMRead = analogRead(FS); //FMRead mean Forward Motor Reading
// Moving Robot to Right Position
if (LMRead >a && RMRead<a && FMRead<a)
{
MyServo.write(angle-60); // Moving Servo to 30 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// Moving Robot to Left Position
else if (RMRead >a && LMRead<a && FMRead<a)
{
MyServo.write(angle+60); // Moving Servo to 120 Degree
digitalWrite(M1,HIGH); //left motor pin1
digitalWrite(M2,LOW); //Left motor pin2
digitalWrite(M3,HIGH); //Right Motor pin 3
digitalWrite(M4,LOW); //RM pin 4
}
// Moving Robot to Back Position
else if (FMRead >a && RMRead<a && LMRead<a)
{
MyServo.write(angle); // Moving Servo to 90 Degree
digitalWrite(M1,LOW); //left motor pin1
digitalWrite(M2,HIGH); //Left motor pin2
digitalWrite(M3,LOW); //Right Motor pin 3
digitalWrite(M4,HIGH); //RM pin 4
}
// Now IF Light is Detected from either left ,right or Centre Sensor
else if((FMRead >a && RMRead>a && LMRead<a) || (FMRead <a && RMRead>a && LMRead>a) || (FMRead >a && RMRead<a && LMRead>a) || (FMRead >a && RMRead>a && LMRead>a))
{
MyServo.write(angle);
digitalWrite(M1,LOW); //left motor pin1
digitalWrite(M2,HIGH); //Left motor pin2
digitalWrite(M3,LOW); //Right Motor pin 3
digitalWrite(M4,HIGH); //Right Motor pin 4
}
}
}
Human Following Robot:
#include<Servo.h>
#include<AFMotor.h>
#define LEFT A0
#define echopin A1 // echo pin
#define trigpin A2 // Trigger pin
#define RIGHT A3
AF_DCMotor Motor1(1,MOTOR12_1KHZ);
AF_DCMotor Motor2(2,MOTOR12_1KHZ);
AF_DCMotor Motor3(3,MOTOR34_1KHZ);
AF_DCMotor Motor4(4,MOTOR34_1KHZ);
Servo myservo;
int pos =0;
long time;
void setup()
{
Serial.begin(9600);
myservo.attach(10);
for(pos = 90; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos >= 0; pos-= 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 0; pos<=90; pos += 1)
{
myservo.write(pos);
delay(15);
}
pinMode(RIGHT, INPUT);
pinMode(LEFT, INPUT);
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
}
void loop()
{
unsigned int distance = read_cm();
int Right_Value = digitalRead(RIGHT);
int Left_Value = digitalRead(LEFT);
Serial.print("R= ");
Serial.print(Right_Value);
Serial.print(" L= ");
Serial.print(Left_Value);
Serial.print(" D= ");
Serial.println(distance);
if((Right_Value==1) && (distance>=10 && distance<=30)&&(Left_Value==1)){for
ward();}
else if((Right_Value==0) && (Left_Value==1)){turnRight();}
else if((Right_Value==1) && (Left_Value==0)){turnLeft();}
else if((Right_Value==1) && (Left_Value==1)){stop();}
else if(distance > 5 && distance < 10){stop();}
else if(distance < 5){backword();}
delay(50);
}
long read_cm(){
digitalWrite(trigpin, LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
time = pulseIn (echopin, HIGH);
return time / 29 / 2;
}
void forword(){// turn it on going forward
Motor1.setSpeed(120);
Motor1.run(FORWARD);
Motor2.setSpeed(120);
Motor2.run(FORWARD);
Motor3.setSpeed(120);
Motor3.run(FORWARD);
Motor4.setSpeed(120);
Motor4.run(FORWARD);
}
void backword(){ // the other way
Motor1.setSpeed(120);
Motor1.run(BACKWARD);
Motor2.setSpeed(120);
Motor2.run(BACKWARD);
Motor3.setSpeed(120);
Motor3.run(BACKWARD);
Motor4.setSpeed(120);
Motor4.run(BACKWARD);
}
void turnRight(){ // the other right
Motor1.setSpeed(200);
Motor1.run(FORWARD);
Motor2.setSpeed(200);
Motor2.run(FORWARD);
Motor3.setSpeed(100);
Motor3.run(BACKWARD);
Motor4.setSpeed(100);
Motor4.run(BACKWARD);
}
void turnLeft(){ // turn it on going left
Motor1.setSpeed(100);
Motor1.run(BACKWARD);
Motor2.setSpeed(100);
Motor2.run(BACKWARD);
Motor3.setSpeed(200);
Motor3.run(FORWARD);
Motor4.setSpeed(200);
Motor4.run(FORWARD);
}
void stop(){ // stopped
Motor1.setSpeed(0);
Motor1.run(RELEASE);
Motor2.setSpeed(0);
Motor2.run(RELEASE);
Motor3.setSpeed(0);
Motor3.run(RELEASE);
Motor4.setSpeed(0);
Motor4.run(RELEASE);
}