The line follower robot is an automated vehicle that follows a visual black line or path on the surface. This visual line is a path on which the line follower robot moves. It uses a black line on a white surface, or you can also adjust it as a white line on a black surface as per your need.
Beginners and students get their first robotic experience with this type of line follower robot. In this article, we are going to learn how to make a line follower robot using Arduino and the L298N motor driver module.
In industries, line follower robots are used for guiding the automated production process. They are also used in restaurants, military applications, delivery services, hotels, bars, etc. are some of its common applications.
How Line Follower Robot works?
The concept of the line follower robot is related to the transmitting and receiving of light. The white colour reflects all the light that falls on it whereas the black colour absorbs all the light.
In this line follower robot, we have used IR transmitters and receivers ( also known as photodiodes). When IR light falls on a white surface, it gets reflected back towards the IR receiver, generating some voltage changes that are analyzed by the Arduino.
When IR light falls on a black surface, it gets absorbed by the black surface, and no rays are reflected back thus, the IR receiver doesn’t receive any rays.
In this project, when the IR sensor senses a white surface, an Arduino gets HIGH as input, and when it senses a black line, an Arduino gets LOW as input. Based on these inputs, an Arduino Uno provides the proper output to control the line follower.
L298N Module
IR sensor consists of an Infrared LED and a Photodiode. An IR LED is a special-purpose LED, that emits infrared rays ranging from 700 nm to 1 mm wavelength. Such types of rays are invisible to our eyes. In nutshell, a photodiode or IR Receiver LED detects infrared rays.
Datasheet
Motor controller |
L298N, drives 2 DC motors |
Operating Voltage |
5- 35V |
Logic voltage |
4.5 – 7 V |
Max current |
2A per channel |
Voltage Regulator |
78M05 |
Module dimensions |
43 x 43 x 28 mm |
Junction operating temperature |
-25 to 130 o Celsius |
How IR Sensor Module Works
When we connect the InfraRed sensor module to the 5v power supply. Infrared LED starts emitting infrared rays. These infrared rays reach to object’s surface and this radiation gets reflected back to the IR receiver. The Photodiode or IR receiver detects the infrared light and produces output accordingly.
Components Required
- Arduino Board (UNO)
- USB –A to micro-USB cable
- Car chassis
- L298 motor driver module
- IR sensor module
- 12V Battery
- On-Off- Switch
- DC Female Connector Jack
- Connecting wires
- Soldering iron
- Solder wire
- Hot Melt Glue Gun
Software Required
- Arduino IDE
Line Follower Robot Circuit Diagram
Follow this table in order to make your connections.
L298N driver Pins |
Arduino Pins |
ENA |
jumper |
IN1 |
D9 |
IN2 |
D6 |
IN3 |
D5 |
IN4 |
D3 |
ENB |
jumper |
Infrared Sensor pins |
Arduino pins |
Vcc |
5v |
GND |
GND |
Right IR sensor OUT |
D13 |
Left IR sensor OUT |
D12 |
For L298N motor driver module, motors are connected to the motor terminals of the motor driver module. The motor driver has another 3 terminals, in which one is 12Volt connected to the battery. The GND terminal is connected to the battery’s negative terminal and it is also connected to the Arduino board GND pin and 5v is connected to 5v of the Arduino board.
Arduino Code for Line Follower Robot
#define MOTOR_SPEED 60
int mot1=9;
int mot2=6;
int mot3=5;
int mot4=3;
int left=13;
int right=12;
int Left=0;
int Right=0;
void LEFT (void);
void RIGHT (void);
void STOP (void);
void setup() {
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(mot3,OUTPUT);
pinMode(mot4,OUTPUT);
pinMode(left,INPUT);
pinMode(right,INPUT);
digitalWrite(left,HIGH);
digitalWrite(right,HIGH);
}
void loop() {
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
while(1) {
Left=digitalRead(left);
Right=digitalRead(right);
if((Left==0 && Right==1)==1)
LEFT();
else if((Right==0 && Left==1)==1)
RIGHT();
}
}
void LEFT (void) {
analogWrite(mot3,0);
analogWrite(mot4,30);
while(Left==0) {
Left=digitalRead(left);
Right=digitalRead(right);
if(Right==0) {
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1) {
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
}
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
}
void RIGHT (void) {
analogWrite(mot1,0);
analogWrite(mot2,30);
while(Right==0) {
Left=digitalRead(left);
Right=digitalRead(right);
if(Left==0) {
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1) {
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
}
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
}
void STOP (void) {
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}
Troubleshooting
Robot is moving too fast?For this change value of motor speed in the code. Note that 1 is the minimum value and 255 is the maximum speed.
No power supply?Try changing your batteries. Ensure that you must supply 12v to the L298 Motor Driver module. A Voltage rating less than this will not work.
Project not working?Ensure that the circuit you have made is according to the circuit diagram. Check for loose connections. Cross-check for motor connections.
Motors are rotating in opposite direction?For this, reverse the terminals of the motor connecting the Motor driver module.
IR sensitivity issue?
There is a potentiomenter on the IR sensor module. Adjust with the help of screwdriver as per your requirement.