Tutorials

 Line Follower

Introduction
What is a line follower?
Line follower is a machine that can follow a path. The path can be visible like a black
line on a white surface (or vice-versa) or it can be invisible like a magnetic field.
Why build a line follower?
Sensing a line and maneuvering the robot to stay on course, while constantly correcting
wrong moves using feedback mechanism forms a simple yet effective closed loop
system. As a programmer you get an opportunity to ‘teach’ the robot how to follow the
line thus giving it a human-like property of responding to stimuli.
Practical applications of a line follower : Automated cars running on roads with
embedded magnets; guidance system for industrial robots moving on shop floor etc.
Prerequisites:
Knowledge of basic digital and analog electronics.
(A course on Digital Design and Electronic Devices & Circuits would be helpful)
C Programming
Sheer interest, an innovative brain and perseverance!
Background:
I started with building a parallel port based robot which could be controlled
manually by a keyboard. On the robot side was an arrangement of relays connected to
parallel port pins via opto-couplers.
The next version was a true computer controlled line follower. It had sensors
connected to the status pins of the parallel port. A program running on the computer
polled the status register of the parallel port hundreds of times every second and sent
control signals accordingly through the data pins.
The drawbacks of using a personal computer were soon clear –
It’s difficult to control speed of motors
As cable length increases signal strength decreases and latency increases.
A long multi core cable for parallel data transfer is expensive.
The robot is not portable if you use a desktop PC.
The obvious next step was to build an onboard control circuit; the options – a
hardwired logic circuit or a uC. Since I had no knowledge of uC at that time, I
implemented a hardwired logic circuit using multiplexers. It basically mapped input from
four sensors to four outputs for the motor driver according to a truth table. Though it
worked fine, it could show no intelligence – like coming back on line after losing it, or
doing something special when say the line ended. To get around this problem and add
some cool features, using a microcontroller was the best option.

Overview

The robot uses IR sensors to sense the line, an array of 8 IR LEDs (Tx) and sensors (Rx), facing
the ground has been used in this setup. The output of the sensors is an analog signal which
depends on the amount of light reflected back, this analog signal is given to the comparator to
produce 0s and 1s which are then fed to the uC.
                                               L4 L3 L2  L1 R1  R2 R3 R4
                                                     Left     Center   Right
Sensor Array
Starting from the center, the sensors on the left are named L1, L2, L3, L4 and those on the right
are named R1, R2, R3, R4.
Let us assume that when a sensor is on the line it reads 0 and when it is off the line it reads 1
The uC decides the next move according to the algorithm given below which tries to position the
robot such that L1 and R1 both read 0 and the rest read 1.
                             L4 L3 L2 L1 R1 R2 R3 R4
                              1   1    1   0   0    1   1   1
                                  Left     Center     Right

Algorithm:

1. L= leftmost sensor which reads 0; R= rightmost sensor which reads 0.
If no sensor on Left (or Right) is 0 then L (or R) equals 0;
Ex:
Left Center Right
Here L=3 R=0
Left Center Right
Here L=2 R=4
2. If all sensors read 1 go to step 3,
else,
If L>R Move Left
If L<R Move Right
If L=R Move Forward
Goto step 4
3. Move Clockwise if line was last seen on Right
Move Counter Clockwise if line was last seen on Left
Repeat step 3 till line is found.
4. Goto step 1.
                                 L4 L3 L2 L1 R1 R2 R3 R4
                                   1   0   0   1   1    1   1   1
                                L4 L3 L2 L1 R1 R2 R3 R4
                                 1    1   0   0   0    0    0   0

Implementation

Sensor Circuit:
To get a good voltage swing , the value of R1 must be carefully chosen. If Rsensor = a when no
light falls on it and Rsensor = b when light falls on it. The difference in the two potentials is:
Vcc * { a/(a+R1) - b/(b+R1) }
Relative voltage swing = Actual Voltage Swing / Vcc
= Vcc * { a/(a+R1) - b/(b+R1) } / Vcc
= a/(a+R1) - b/(b+R1)
The resistance of the sensor decreases
when IR light falls on it. A good
sensor will have near zero resistance in presence of light and a very large resistance in absence of light. We have used this property of the sensor to form a otential divider. The potential at point ‘2’ is Rsensor / (Rsensor + R1). Again, a good sensor circuit should give maximum change in potential at point ‘2’ for no-light and bright-light conditions. This is especially important if you plan to use an ADC in place of the comparator.
The sensor I used had a = 930 K and b = 36 K. If we plot a curve of the voltage swing over a
range of values of R1 we can see that the maximum swing is obtained at R1= 150 K (use calculus
for an accurate value).
There is a catch though, with such high resistance, the current is very small and hence susceptible
to be distorted by noise. The solution is to strike a balance between sensitivity and noise
immunity. I chose value of R1 as 60 K. Your choice would depend on the ‘a’ and ‘b’ values of
your sensor.
If you found this part confusing, use a 10K resistor straightaway, as long as you are using a
comparator it won’t matter much.
The 8 sensors are connected to PORTA.
You need not connect anything to AVCC and AREF, it is required only if ADC is used.
The L298 Motor Driver has 4 inputs to control the motion of the motors and two enable inputs
which are used for switching the motors on and off. To control the speed of the motors a PWM
waveform with variable duty cycle is applied to the enable pins. Rapidly switching the voltage
between Vs and GND gives an effective voltage between Vs and GND whose value depends on
the duty cycle of PWM. 100% duty cycle corresponds to voltage equal to Vs, 50 % corresponds
to 0.5Vs and so on. The 1N4004 diodes are used to prevent back EMF of the motors from
disturbing the remaining circuit. Many circuits use L293D for motor control, I chose L298 as it
has current capacity of 2A per channel @ 45V compared to 0.6 A @ 36 V of a L293D. L293D’s
package is not suitable for attaching a good heat sink, practically you can’t use it above 16V without frying it. L298 on the other hand works happily at 16V without a heat sink, though it is
always better to use one.

Possible Improvements:
-Use of differential steering with gradual change in wheel speeds.
-Use of Hysteresis in sensor circuit using LM339
-Use of ADC so that the exact position of the line can be interpolated
-Use of Wheel Chair or three wheel drive to reduce traction.
-General improvements like using a low dropout voltage regulator, lighter chassis etc


Note:
If you are really interested in developing a line follower mail we will provide you the entire circuit

All the required components for developing line follower were available with you, mail us if u require more information.