Introduction: Line Follower Bot (Using IR Sensor Array)

Here's a detailed instruction of making a Line Follower Bot using IR Sensor array. Line follower is a bot which follows black line which is made on a white surface. It can move along with the line and even rotates back in case of a dead end.

Supplies

1 Bot chassis

1 caster wheel

2 DC motors

2 Wheel

1 Arduino

2 Batteries (12v and 9v)

1 L293n Motor driver

1 IR Sensor Array of 5

Jumper wires

Tapes

1 Arduino Wire

Ground

Step 1: Draw a Rough Diagram

First of all, draw a rough diagram that will represent the end product. As it will help you to get organised and well informed about your bot. Here I have used tinkercad to make my rough project. It makes everything more easy and helps to place everything at right place.

Step 2: Make the Connections

Make the connections according to the following points:

1. Connect both motors with L298n Motor driver. It provides constant power to wheels according to arduino signals provided to it. Then take out 12v and 2 gnd wires from it's front. They will be used to give it power for it's use, for motor and to make ground with arduino.

2. Connect motor wires from Motor driver to arduino.

3. Connect vcc and gnd of IR array to arduino for it's power and IR connections.

Step 3: Code

const int rme=10,lme=11; //enable pins

const int rmb=8, rmf=9, lmb=12, lmf=13; //motor signals

const int ir0=2, ir1=3, ir2=4, ir3=5, ir4=6; //ir signals white=1 and black=0

int val0=0, val1=0, val2=0, val3=0, val4=0; //variables

void InALine(bool x) //to move in a line

{ if(x==true)

{ analogWrite(rme,60);

analogWrite(lme,60);

digitalWrite(rmb,LOW);

digitalWrite(rmf,HIGH);

digitalWrite(lmb,LOW);

digitalWrite(lmf,HIGH);

Serial.println("forward"); }

else //move backward

{ analogWrite(rme,50);

analogWrite(lme,50);

digitalWrite(rmb,HIGH);

digitalWrite(rmf,LOW);

digitalWrite(lmb,HIGH);

digitalWrite(lmf,LOW);

Serial.println("backward"); } }

void Turn(bool y) //to turn

{ analogWrite(rme,50);

analogWrite(lme,50);

if (y==true) //move right

{ digitalWrite(rmb,LOW);

digitalWrite(rmf,LOW);

digitalWrite(lmb,LOW);

digitalWrite(lmf,HIGH);

Serial.println("right"); }

else //move left

{ digitalWrite(rmb,LOW);

digitalWrite(rmf,HIGH);

digitalWrite(lmb,LOW);

digitalWrite(lmf,LOW);

Serial.println("left"); } }

void stop()

{ analogWrite(rme,0);

analogWrite(lme,0);

Serial.println("stop"); }

void setup() { // put your setup code here, to run once:

pinMode(rmb, OUTPUT);

pinMode(rmf, OUTPUT);

pinMode(lmb, OUTPUT);

pinMode(lmf, OUTPUT);

pinMode(rme, OUTPUT);

pinMode(lme, OUTPUT);

pinMode(ir0, INPUT);

pinMode(ir1, INPUT);

pinMode(ir2, INPUT);

pinMode(ir3, INPUT);

pinMode(ir4, INPUT);

Serial.begin(9600); }

void loop() { // put your main code here, to run repeatedly:

val0=digitalRead(ir0);

val1=digitalRead(ir1);

val2=digitalRead(ir2);

val3=digitalRead(ir3);

val4=digitalRead(ir4);

if(val0 && val1 && !val2 && val3 && val4) //forward

{ bool x=true; InALine(x); }

else if(val0 && val1 && val2 && !val3 && !val4) //turn right

{ bool y=true; Turn(y); }

else if(!val0 && !val1 && val2 && val3 && val4) //turn left

{ bool y=false; Turn(y); }

else if(!val0 && !val1 && !val2 && !val3 && !val4) //stop

{ stop(); }

else if(val0 && val1 && val2 && val3 && val4) //circle

{ bool y=false; Turn(y); }

else if(!val0 && !val1 && val2 && !val3 && !val4) //in a t-shape condition turn left

{ bool y=false; Turn(y); }

else if(val0 && val1 && !val2 && !val3 && !val4) //in a forward and left condition turn left

{ bool y=false; Turn(y); }

else if(!val0 && !val1 && !val2 && val3 && val4) //in a forward and right condition go straight

{ bool x=true; InALine(x); }

else

{ bool x=false; InALine(x); }

delay(1000); }

Step 4: Upload the Code and Have a Dry Run

Now upload the code and place bot on the track.

You may have to change the value of delay to your accordance and value of enable signals for speed.

After all the settings you are good to go!!