21.line Following Robot
21.line Following Robot
21.line Following Robot
1. SYNOPSIS………………………………………………………………. 01
2. PREAMBLE……………………………………………………………... 03
2.1 INTRODUCTION………………………………………….... 03
2.2 PROBLEM DEFINITION………………………..………... 04
2.3 OBJECTIVES OF THE STUDY……………………………. 04
2.4 SCOPE OF STUDY…………………………………………. 05
2.5 REVIEW OF LITERATURE……………………………….. 05
2.6 APPLICATIONS………………………………………......... 06
2.7 LIMITATIONS…………………………………………….... 06
2.8 METHODOLOGY…………………………………………... 07
3. THEORY……………………………………………………………….... 09
3.1 THE DIFFRENTIAL STEERING SYSTEM……………….. 09
3.2 D.C. MOTORS……………………………………………… 10
3.3 H-BRIDGE MOTOR CONTROL…………………………... 11
3.4 INTELLIGENCE……………………………………………. 14
3.5 THE PIC 16F873 MICROCONTROLLER…………………. 16
3.6 PWM SPEED CONTROL…………………………………... 18
3.7 THE PICMICRO CCP MODULES…………………………. 18
4. DESIGN AND IMPLEMENTATION…………………………………. 22
4.1 SCHEMATIC……………………………………….………... 22
4.2 PROCESS EXPLANATION…………………………..……... 35
4.3 FLOW CHART………………………………..…….……….. 37
4.4 CODE……………………………………………………….... 40
4.5 CODE EXPLANATION…………………………...………… 51
5. RESULT & CONCLUSION………………………………………….. 55
6. BIBLIOGRAPHY……………………………………………………….. 56
7. APPENDIX……………………………………………………………… 58
1. SYNOPSIS
The line following robot, operates as the name specifies. It is programmed to
follow a dark line on a white background and detect turns or deviations and modify the
motors appropriately. The optical sensor is an array of commercially available IR
reflective type sensors.
The core of the robot is the PIC 16F873 microcontroller. The speed control of the
motors is achieved by the two PWM modules in the µC. The direction control is provided
by 2 I/O pins. The H-Bridge motor driving/control chip takes these signals and translates
it into current direction entering the motor armature. The motors require separate supply
for operation.
The differential steering system is used to turn the robot. In this system, each back
wheel has a dedicated motor while the front wheels are free to rotate. To move in a
straight line, both the motors are given the same voltage (same polarity). To manage a
turn of different sharpness, the motor on the side of the turn required is given lesser
voltage. To take a sharp turn, its polarity is reversed.
The control has 6 modes of operation, turn left/right, move left/right, and drift
left/right. The actual action is caused by controlling the direction/speed of the two motors
(the two back wheels), thus causing a turn. The actual implementation is a behavior based
(neural) control with the sensors providing the inputs. The robot can also be programmed
to find the line by pseudo-random movement in case no line is detected by the optical
sensor.
Main Motor
Clock
Power Power
4 MHz
Supply Supply
Left
H - Bridge Motor
PIC 16F873 DC Motor
Microcontroller HEX Control
Inverter Right
Motor
Priority
Encoder
Analog Threshold
Comparators Voltage
NOR
Gate
Sensor Array
2.1. INTRODUCTION
The robots of the movies, such as C-3PO and the Terminator are portrayed as
fantastic, intelligent, even dangerous forms of artificial life. However, robots of today are
not exactly the walking, talking intelligent machines of movies, stories and our dreams.
In the 1970’s scientists proposed that in the year 2000 we would have created
artificial life forms, almost perfect in terms of intelligence and capabilities. The dream of
free and efficient labor made the researchers of the time go on day and night to bring the
dream to existence. But the task was futile due to the lack of compact processors to carry
out the calculations which were oh so necessary. Now in the year 2000, the micro-
processor technology is thousands of times more advanced than what existed back then.
But still the robots of today are no way close to what our movies portray them to be. This
is not only due to drawbacks in processor technology, but also in various other fields such
as vision, motor control so and so forth.
Robots may never make it to our kitchens or living rooms as personal slaves, but
they certainly have made their way to the manufacturing industry, aero-space industry,
and yes to the work benches of robotic hobbyists. Robots are now working in dangerous
places, such as nuclear disposal, space explorers, fire fighting, etc.
The word "robot" originates from the Czech word for forced labor or serf. Robots
are electronic devices intended to perform a desired function. Many refer to them as
"machines", however, a drill press is a machine, yet it requires an operator to perform its
function, where robots can be programmed to do it themselves. Robots have the potential
to change our economy, our health, our standard of living, our knowledge and the world
in which we live. As the technology progresses, we are finding new ways to use robots.
Each new use brings new hope and possibilities, but also potential dangers and risks.
Robotics is not only a science, but it is also an art. The bots we build reflect the ideas and
personalities we portray. There are many different versions of robots that can be made.
From turtle bots to vehicles like the Mars rovers to rovers like R2-D2. From walkers that
have anywhere from 1 to 10 legs to robotic arms to androids. Whatever you can dream,
you can create. The level of expertise you want your robot to have and how much
learning and research you want to do is up to you. For those who have relative experience
in computer programming and electronics, this may come easier to you than anyone new
to the hobby. Those who build models, RC vehicles, and other artwork will find it
challenging to modify some of their previous projects.
We have seen how ants always travel in a line, following an invisible route in
search of food, or back home. How on roads we follow lanes to avoid accidents and
traffic jams. Ever thought about a robot which follows line? A perfect or near perfect
mimic of mother-nature? After all the purpose of robotics is to recreate in terms of
machines what we see around to solve a problem or fulfill a requirement.
Programming intelligence into a robot (or computer) is a difficult task and one
that has not been very successful to date even when supercomputers are used. This is not
to say that robots cannot be programmed to perform very useful, detailed, and difficult
tasks; they are. Some tasks are impossible for humans to perform quickly and
productively. For instance, imagine trying to solder 28 filament wires to a 1/4in square
sliver of silicon in 2 s to make an integrated circuit chip. It’s not very likely that a human
would be able to accomplish this task without a machine. But machine task performance,
as impressive as it is, isn’t intelligence.
The next resource for the PIC microcontroller was the MIDRANGE MANUAL
which provides a detailed explanation of each and every hardware feature and the
instruction set. The most helpful is the design tips section which answered most of the
questions which were bogging my head down.
Looking through the library on books on robotics, there was one thing I noticed.
There are no books which deal with understandable basics, or implementation. After a lot
of search, I found “PIC Robotics, A beginner’s guide to robotics projects using the
PICmicro” by John Iovine on the net in the form of an e-Book, which I later printed out
and got it bound! This book is an excellent compliment to the book by Predko.
Robotics by C. K. Kuo was another book I referred for this project. Even though it
was of no direct use to this project, it made me understand many aspects of robotics
which I’d have ignored otherwise. Hopefully, the knowledge I have gained by this book
will come in handy in my next robotic endeavor.
Last but definitely not the least, the Internet. This is where I found websites giving
detailed explanations on a few terminologies. Reference of similar projects created by
others and badly needed tutorials. There is no other place to easily get the data sheets of
the used components. I have listed out a few websites which were of most help for the
project. And in the finale, a huge thanks to Google.com, no other search engine is even
close! No I could not have done anything without the NET even if I had a million books.
The NET is worth much more.
2.6. APPLICATION
• Industrial automated equipment carriers
• Entertainment and small household applications.
• Automated cars.
• Tour guides in museums and other similar applications.
• Second wave robotic reconnaissance operations.
2.7. LIMITATIONS
• Choice of line is made in the hardware abstraction and cannot be changed by
software.
• Calibration is difficult, and it is not easy to set a perfect value.
• The steering mechanism is not easily implemented in huge vehicles and
impossible for non-electric vehicles (petrol powered).
• Few curves are not made efficiently, and must be avoided.
• Lack of a four wheel drive, makes it not suitable for a rough terrain.
• Use of IR even though solves a lot of problems pertaining to interference, makes it
hard to debug a faulty sensor.
• Lack of speed control makes the robot unstable at times.
2.8. METHODOLOGY
The first idea was to use optical imaging (CCD cameras) to see the line. This was
later given up due to various reasons including complexity and unavailability of
components. Later a choice was made to use an array of sensors which solved most of
the problems pertaining to complexity.
The resistor values used in the sensor array were experimentally determined rather
than theoretical mathematical design calculations. This was done as the data sheets of
the proximity sensor was not available anywhere and most of the parameters had to be
determined experimentally.
The L293D chip is used as it was a much better option than forming an H-Bridge
out of discrete transistors, which would make the design unstable and prone to risk of
damage.
The PIC microcontroller was used as it is the only device I have a full practical
knowledge about, and most of all a RISC processor which are better suited for real-
time operations. Thus the midrange devices were chosen. The part 16F873 was used
as it has 2 CCP modules which I could use in PWM mode thus simplifying the
software routines which I’d otherwise had to write to generate the PWM control for
the motors.
A priority encoder was used to reduce the number of I/O lines used, which
reduces it to 5 which otherwise would require 7 and a lot of additional complexity in
software which only results is sluggish operation and inefficiency.
Extra hardware was added to let the robot know if it is on a surface or not. This
helps it from not running off a table or preserving battery if manually lifted off the
floor.
Software was coded day and night, deciding on a few algorithms and few tiny
details which gradually got the robot to do what was required. Then extra code was
put to find a line if it is not on one.
The PCB is the only thing in the whole project for which I turned for outside help.
By the time the design became successful, time had run out. I no longer had time or
resources to create a PCM myself. This was done by JI Electronics.
The project was entirely (other than PCB) designed, created, soldered, tested and
coded by me. For which I’m thankful for, as I have learnt much more in the processes and
not to mention the fun had.
3. THEORY
The differential steering system is familiar from ordinary life because it is the
arrangement used in a wheelchair. Two wheels mounted on a single axis are
independently powered and controlled, thus providing both drive and steering. Additional
passive wheels (usually casters) are provided for support. Most of us have an intuitive
grasp of the basic behavior of a differential steering system. If both drive wheels turn in
tandem, the robot moves in a straight line. If one wheel turns faster than the other, the
robot follows a curved path. If the wheels turn at equal speed, but in opposite directions,
the robot pivots.
where give the displacement (distance traveled) for the left and right wheels
respectively, is the turn radius for the inner (left) wheel, is the distance between
wheels (from center-to-center along the length of the axle), and is the angle of the turn
LINE FOLLOWING ROBOT
Once we've established the simple geometry for the differential steering system, it
is easy to develop algorithms for controlling the robot's path. Note, though, that we did
make an important simplifying assumption: the wheels maintain a steady velocity. We
neglected the effects of acceleration. If the wheels are allowed to accelerate, the curve
which describes the robot's trajectory can become much more complicated. When
working with very light robots, where the mass (and inertia) of the platform is small, we
can often get away with treating changes in speed as nearly instantaneous. The path that
the robot follows will not be truly circular, but it will be close enough for many
applications. For larger and heavier robots, of course mass is important and acceleration
must be considered.
If the right wheel is moving at a velocity of VR and the left wheel at a velocity of VL, then
the following equation can be derived.
Where a positive θ implies counter-clockwise rotation; the above equation clearly shows
that the angle of the turn can be increased by either,
• Increasing the difference in the wheel’s velocities (VR – VL), or
• Keep the wheels at the different velocity for a longer time (t)
All this while b remains constant; in the line following robot, both these parameters are
dynamically changed by the sensors in order to keep the robot on the line.
Several characteristics are important when selecting DC motors and these can be
split into two specific categories. The first category is associated with the input ratings of
the motor and specifies its electrical requirements, like operating voltage and current.
The second category is related to the motor's output characteristics and specifies the
physical limitations of the motor in terms of speed, torque and power.
Characteristic Value
Torque: 30 gm-cm
As noticed, the torque provided can hardly move 30gm of weight around with
wheel diameter of about 2cm. This is a fairly a huge drawback as the robot could easily
weigh about a kg. This is accomplished by gears which reduce the speed (2400 rpm is
highly impractical) and effectively increase the torque. If the speed is reduced by using a
gear system by a factor of ρ then the torque is increased by the same factor. For
example, if the speed is reduced from 2400 rpm, to 30 rpm, then the torque is increased
by a factor of (2400/30 = 80) in other words the torque becomes 30 × 80 2400 gm-cm or
2.4 kg-cm which is more than sufficient.
1 0 0 1 CLOCKWISE
0 1 1 0 COUNTER-CLOCKWISE
The Explanation is simple, If A & D are turned on, then the current flows in the direction
shown in the figure below.
If B & C are turned on, then the motor rotates in counter clockwise direction.
If you turn on the two upper circuits, the motor resists turning, so you effectively
have a breaking mechanism. The same is true if you turn on both of the lower circuits.
This is because the motor is a generator and when it turns it generates a voltage. If the
terminals of the motor are connected (shorted), then the voltage generated counteracts the
motors freedom to turn. It is as if you are applying a similar but opposite voltage to the
one generated by the motor being turned. In other words, it acts like a brake. Any other
state like A & C = ON or B & D = ON will cause a direct path to ground causing a very
high current to pass through the relays thus causing a burnt fuse (if it exists).
The following figure shows an H-Bridge using only transistors. The same theory
applies.
Usually, the above circuitry can be used only for direction control. The Existing H-Bridge
is further modified to include another transistor, now making speed control possible too.
This is shown in the figure below.
The same direction rules apply, but now the motor will behave as per the direction
control only when a ‘1’ is given to the EN input. Speed control is usually done by giving
a PWM signal, and the duty cycle is varied to vary the speed of the motor. Usually
protection diodes are also incorporated across the transistors to catch the back voltage that
is generated by the motor's coil when the power is switched on and off. This fly-back
voltage can be many times higher than the supply voltage! If diodes are not used, the
transistors have a good chance to get burnt.
3.4. INTELLIGENCE
There are two schools of thought concerning the creation of intelligence in
artificial systems. The first approach programs an expert system (top down); the second is
a neural or behavior based system (bottom up). The expert system uses rules to guide the
robot in task performance. Behavior based programs create an “artificial” behavior in the
robot that causes it to reflectively (automatically) perform the task required. Behaviors
may be programmed (software) or may be hardwired into the robot. Behavior based
intelligence doesn’t require a central processor, although such a system may have one.
Let’s look at a practical programming problem and see how each approach differs.
Suppose you worked for a company that designed a new robotic vacuum cleaner. The
purpose of the robot is to vacuum the floor of a customer’s home or apartment. Your job
is to program the navigation system. The robot needs to move autonomously throughout
the house. How would you go about programming the robot to accomplish navigation
around the home so it could travel in and out of rooms without destroying the place?
Let’s assume you first decide to try an expert navigation system. This approach uses brute
force programming and a lot of memory. You might begin by dividing the task of
vacuuming the apartment or home into smaller tasks such as vacuuming individual
rooms. You begin by programming into the robot’s memory an electronic map (floor
plan) of the home or area where the robot needs to vacuum. Then you map out each
individual room and its contents. The robot must have the ability to measure its
movement as it moves as well as compass direction to maintain its location integrity.
Once this is accomplished, the robot must have an exact start location on the floor plan.
LINE FOLLOWING ROBOT
The robot’s movement from the start position is measured and plotted on its
internal floor plan map. Problems occur if an object is positioned differently or is out of
place, such as a trash receptacle or chair that has been moved. In this situation the real
world does not match the robot’s internal map. Similar problems occur if new objects are
left on the floor such as a bag, toy, or pet.
Even so, these obstacles would not present too much of a problem for an expert
system. To compensate, a secondary collision detection subprogram could be written to
detect, map, and go around an obstacle not existing on the internal map. The robot
continues to move and vacuum the floor. Keep in mind that as the robot navigates around
new obstacles, it’s continually updating its internal map as it travels, to maintain its
location integrity. These tasks are gobbling up computer time and memory.
The robot vacuum accomplished its task. Now suppose you w ant to share this
robot or rent it. Now you have a problem. Each new house and every room in the new
house would require its own electronic map. Although expert programming does work, it
tends to be inflexible and not adaptive toward new or innovative situations.
Now let’s try the other approach that uses behavior based or bottom-up
programming. Instead of programming internal maps, we program sensor responses and
behavior based algorithms (feed-forward and feedback loops) for sensing and traveling
around obstacles and avoiding getting stuck underneath furniture or trapped in corners.
Without any internal map we allow the robot to travel and move around the house in a
random manner. The idea is that while traveling in a haphazard manner, it will eventually
make its way throughout the rooms, cleaning the floor as it goes. Because the robot
travels randomly, it will take longer for the robot to vacuum the entire floor, and it may
miss a spot here and there, but it gets the job done. Since this behavior based type of robot
vacuum isn’t programmed for a particular house or room, it may be used in any house in
any room at any time.
While our example is simple, it does illustrate the main differences between
expert and behavior based (neural) programming. But let’s look at just one more example
before we move on.
LINE FOLLOWING ROBOT
Expert systems typically have all the answers that the designers believe will be required
by the system programmed into the system before it begins. It may store and categorize
new information, but based on previously determined categories and existing knowledge.
An example of this system could be a rock identification system. The robot examines
unknown rocks based on known characteristics of rocks, such as color, hardness,
scratchability, acid reaction tests, mass, etc. The expert system fails if it inadvertently
picks up a piece of ice that melts to water during the tests. Well, it fails as long as the
designer(s) never anticipated the robot picking up a piece of ice by mistake and made
allowances for it.
Neural (behavior based) systems are not programmed and are more adaptive, as
shown in the previous example. But is a neural system suitable for this task of rock
identification? Probably not! There are instances in which expert systems are the method
of choice. One shouldn’t blindly assume one system is better than the other in all cases.
To date, behavior based robots are more successful at task accomplishments such
as traveling over unfamiliar and rough terrain than are programmed robots. (Other neural
based intelligence includes speech recognition, artificial vision, speech generation,
complex analysis of stock market data, and life insurance policies.)
The line following robot uses behavior based programming, to accomplish the
task at hand. For one, the system may not be a “neural” system pre say. But this is
simulated in software.
Peripheral Features:
• Port A: 6bit bidirectional port
• Port B & C: 8bit bidirectional port
• Timer0: 8-bit timer/counter with 8-bit pre-scalar
• Timer1: 16-bit timer/counter with pre-scalar, can be incremented during
SLEEP via external crystal/clock
• Timer2: 8-bit timer/counter with 8-bit period register, pre-scalar and post-
scalar
• Two Capture, Compare, PWM modules (CCP modules)
• 10-bit, 5 - channel Analog-to-Digital converter
2
• Synchronous Serial Port (SSP) with SPI (Master mode) and I C
(Master/Slave)
Universal Synchronous Asynchronous Receiver
• Transmitter (USART/SCI) with 9-bit address detection
• Brown-out detection circuitry for Brown-out Reset (BOR)
LINE FOLLOWING ROBOT
128 bytes in the RAM is reserved for the special purpose registers which show the
status or allows configuring of the microcontroller. The rest of the features are explained
as they are used in the following sections. The programming is done via an ICSP
compatible programmer. The Line following robot was programmed using the ElCheapo
programmer.
1
A=
t
∫ vdt
tON
1
A = ∫ + 5dt
t 0
t ON
A = 12 = 12V ×
ρ
t
Where ρ is the duty cycle of the PWM control signal; this shows that by varying the
duty cycle of the PWM control, we effectively vary the DC voltage supplied to the
motors, thus controlling their speed. This is generated by the microcontroller built-in
hardware.
Each CCP module has 3 registers. Multiple CCP modules may exist on a single
device. Throughout this section we’ll use generic names for the CCP registers. These
generic names are shown in the table below.
LINE FOLLOWING ROBOT
The PIC 16F873 has 2 CCP modules, with a common timer resource. Thus, if
both the CCP modules are configured as PWM modules, then both of they will have the
same period, but can have different duty cycles. In PWM mode, the timer 2 resource is
used and hence should not be used for other purposes.
In Pulse Width Modulation (PWM) mode, the CCPx pin produces up to a 10-bit
resolution PWM output. Since the CCPx pin is multiplexed with the PORT data latch, the
corresponding TRIS bit must be cleared to make the CCPx pin an output. The PWM
module’s block diagram is shown in the figure below.
4.1. SCHEMATIC
The schematic of the “Line following robot” is shown in the figure. The main
component is the PIC 16F873 microcontroller. Due to page limitations, the schematic is
divided into two sections; one the Sensor Array Board, and the other the motor-control or
main board.
The main features incorporated into the hardware are given below:
• The PIC 16F873 microcontroller
• The voltage regulator and supporting components.
• Crystal oscillator (4MHz)
• The 74HC04 CMOS inverters
• The H-bridge motor control IC (L293D)
• Motors, with coupled reduction gears.
• The 74HC148 priority encoder
• The 74HC27 NOR gate.
• 12V, 1.2AH Lead-Acid battery.
• MOC7811 IR interrupt sensor, modified to be a reflective sensor.
• The LM339 quad comparator IC
• A POT to calibrate the reference voltage.
• Connectors to join the different boards to form one functional device.
The 74HCTXX versions of the IC’s are used whenever possible. This is due to their
higher speed and better TTL and CMOS compatibility. The 74HCXX versions are used
only when the corresponding HCT version is not available. Note that the 74LSXX are
TTL logic IC’s where as their HC & HCT counterparts are CMOS logic IC’s.
Each of the hardware is dissected and was designed/implemented separately for their
functional and later incorporated as one whole application. This helped in the debugging
processes. In similar fashion the separate modules forming the ensemble will be
explained separately.
LINE FOLLOWING ROBOT
The PIC microcontroller was used as it’s a RISC processor which is better suited
for real-time operations. Thus the midrange devices were chosen. The part 16F873 was
used as it has 2 CCP modules which could be used in PWM mode thus simplifying the
software routines to generate the PWM control for the motors.
4.1.3. BATTERY
Motors on a robot consume most of the power. For most of them, each DC motor
typically consumes 1.5W on the average. For differential steering, two DC motors
consume up to 3W. By comparison, the logic components typically draw a total of about
80mA. Even at a supply voltage of 12V, the logic component only consumes 1W.
If we assume the whole robot consume 5W, it requires 4500J of energy to last 15
minutes. If we use a 12V battery, it must have a capacity of 4500J/12V=375Asec or
104mAH. This may imply that getting a battery of 150mAH is sufficient. Unfortunately,
the discharge curve of a 150mAH will not sustain the required voltage for 15 minutes.
Thus a Lead Acid battery was used of rating of 1.2AH for the robot to last longer
than 15min and also to take practical situations into considerations.
25
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT
It has been shown that practically all electronic devices need DC supply. A direct
voltage of constant magnitude requires to be supplied, for the smooth and efficient
functioning of these devices. A properly designed voltage regulator ensures that,
irrespective of change in supply voltage, load impedance or temperature, the DC supply is
maintained at a constant level. This is achieved by incorporating some type of feedback in
the regulator circuit.
An IC voltage regulator unit contains all the circuitry required in a single IC. Thus
there are no discrete components and the circuitry needed for the reference source, the
comparator and control elements are fabricated on a single chip. Even the over load and
short-circuit protection mechanism is integrated into the IC. IC voltage regulators are
designed to provide either a fixed positive or negative voltage, or an adjustable voltage
which can be set for any value ranging between two voltage levels.
The circuit requires two voltage sources; one for the digital IC’s (+5V) and a
+12V to the motors. The motor is supplied 12V unregulated supply directly from the
battery as regulation would be difficult and unnecessary; whereas the digital IC’s and the
microcontroller require a perfect ripple free +5V to function properly. The L7805C is a
5V voltage regulator IC. The capacitors added to the input of the voltage regulator are to
isolate the spikes generated by the motor from the input and to reduce noise. The 10 μ F
capacitor at the output is to maintain stability and improve regulation. These are standard
values. The 0.1 μ F capacitor is used at the input because of the fact that high value
capacitors have poor high frequency response.
26
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT
27
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT
Figure 4.5: Geared D.C. Motor
Geared D.C. motors were used which can operate in the range from 0V to ± 12V .
The D.C. motors have a speed of 2400rpm and a torque of 15gm-cm. The gears decrease
the speed to 30rpm at 6V and thus considerably increasing the torque so that the robot can
carry the load of its frame and the lead-acid battery. Two such motors are used in the rear
of the robot, and a dummy castor is fixed to the front to stabilize the robot.
28
Department of Electronics & Communication, GAT, Bangalore - 98
The entire motor control circuitry is shown in the above figure along with the
internal circuitry of the L293D motor control IC. The table below clearly indicated the
operation of the IC.
The total number of directional control signals required is 4; but as it can be observed in
the above table, IN1 & IN2 are complimentary (and so is IN3 & IN4) that is, both the
inputs have to take the opposite states for a safe operation. This is done by connecting DL
to IN1 and D L to IN2. The same is done to IN3 & IN4. Now we have 1 directional
control per motor. The ENABLE of each motor section is given PWM inputs to further
improve on the control. Now, each motor has a direction control and a speed control. The
clamping diodes are built into the chip which prevent the back EMF generated by the
motors to harm the H-bridge. The inversion was achieved using the 74HCT04 HEX
inverter IC having a slew rate of about 6ns which is negligible compared to the reaction
time of the H-bridge itself.
The L293D chip can operate on PWM signals up to 5kHz, which was decided to be used.
For the emitter, the collector resistor was determined experimentally on a trial and
error basis. It was decided to use a value of 56 kΩ . For this value, the potential across the
LINE FOLLOWING ROBOT
detector is normally 4.6V, when an object reflects the rays towards the detector, then the
potential drops to 0.6V. The output is obviously analog in nature.
4.1.9. COMPARATOR
A comparator is a circuit which compares a signal voltage applied at one input of
an op-amp with a known reference voltage at the other input, and produces either a high
or a low output voltage, depending on which input is higher. The input / output
characteristics of a comparator is as shown.
The sensor circuit is redrawn using the comparator, and this is shown below.
The reference voltage is generated by the 20k POT and given to all the
comparators to the non-inverting input. When the respective sensor is on the line, the
emitted light is absorbed by the line and the transistor is the cut-off mode, thus a potential
of 4.6V is given to the inverting input which is greater than Vref (which is chosen to be
2.5V), thus the output of the comparator goes low. When the sensor is not on the line
(reflective white surface) the potential across the detector is usually 0.6V. Thus the output
of the comparator goes high (the non-inverting input has a greater potential). Thus the
output of the comparator goes low only when the sensor is over the line. The comparator
LINE FOLLOWING ROBOT
is open collector, and hence a pull-up resistor of 10 kΩ is required at the output.
LINE FOLLOWING ROBOT
This priority encoder accepts 8 input request lines 0–7 and outputs 3 lines A0–A2.
The priority encoding ensures that only the highest order data line is encoded. The
extreme sensors are given to the higher order inputs so that they are given a higher
priority compared to the inner sensors so that no required turn is left out of the priority
process. This is shown in the figure shown below. The truth table is also shown.
LINE FOLLOWING ROBOT
As can be noticed from the truth table, the 74HC148 is an active low priority
encoder. The chip has an active low enable (EI) input which is always grounded. If the
robot is not on any line, all the input lines will be high, thus the GS line will go high. This
pin is used as the input to the microcontroller for it to decide if it is on a line or not. The
0’th input is always connected to +Vcc = 5V thus allowing the other inputs to generate an
output from 0 to 6. The chip used is 74HC148 which is a high speed CMOS priority
encoder.
Noticing the placement of the sensors A, B & G, it can be noticed that under no
conditions will all of them detect a line (go low). This will only happen when the line is
too thick, or when the robot is lifted off the surface. Only when all the lines go low, will
the NOR gate’s output go high. This line is used by the microcontroller to sense a surface.
The NOR gate used is the 74HCT27 which is a high speed CMOS gate.
LINE FOLLOWING ROBOT
NS GS A2 A1 A0 STATE IN ACTION
The process involved is taken care of the software. The comparator outputs could have
been directly connected to the microcontroller and all these operations could have been
accomplished in software. But considering that the software would require at least a few
LINE FOLLOWING ROBOT
tens of micro seconds whereas the hardware accomplishes the same in say a 100ns. Thus
due to speed considerations, the present design was arrived at.
If no line is seen, the microcontroller just follows the previous action. This
process is continued till either 5 seconds elapse or a line is reached. If a line is not
reached within 5 seconds (software controlled), the microcontroller shifts into “line find”
mode. In this mode, the robot takes a right turn and starts rotating about a fixed point. The
LINE FOLLOWING ROBOT
radius is continuously incremented every second. Thus the robot follows the path of a
spiral. This process is continued till either a line is reached or till the robot has achieved a
maximum radius of curvature (is traveling in straight line) when the process is reset and
the robot is made to turn in the starting circle, but now at a different point. This is the
algorithm with minimum complexity considering speed requirements.
START
STOP
TMR0 INTERRUPT
HANDLER
LINE FOLLOWING ROBOT
Is
surface Stop motors
NO
detected
YES
Is line NO
YES
A RETI
A
Adjust command
register to have just
3 bits
Is command NO
different
from
previous?
YES
CALL motor
subroutine
YES
Error
C
?
NO
RETI
LINE FOLLOWING ROBOT
MOTOR
LINE FOLLOWING ROBOT
SHARP TURN LEFT
Cmd YES Left motor = reverse,
=000 Right motor = forward,
Both motors = high speed.
NO
TURN LEFT
Cmd YES Both motors = forward
=010 Left motor = zero speed
Right motor = high speed
NO
TURN RIGHT
YES
Cmd Both motors = forward
=011 Left motor = high speed
Right motor = zero speed
NO
MOVE LEFT
Cmd YES
Both motors = forward
=100 Left motor = low speed
Right motor = high speed
NO
MOVE RIGHT
Cmd YES
Both motors = forward
=101 Left motor = high speed
Right motor = low speed
NO
GO STRAIGHT
YES
Cmd Both motors = forward
=110 Both motors = high speed
NO
RETURN
4.4. CODE
The code is divided into 4 modules.
LFR.ASM = this has the main code (Initialization). The rest of the work is done by the
TMR0 interrupt service routine.
LFR.INC = this is an include file holding all the macro definitions, defines and constant
declarations used in the program.
ROUTINE.INC = this is the TMR0 interrupt service routine, does the entire work.
SUBROUTINES.INC = this has all the subroutines used in the program, one delay
subroutine and the “motor” subroutine.
4.4.1. LFR.ASM
;==========================================================;
;==============LINE FOLLOWING ROBOT =======================;
;====================FIRMWARE==============================;
;==================VERSION: 2.0============================;
;**********************************************************;
;+CODE BY: AMITHASH E. PRASAD, ELECTRONICS & COMMUNICATION+;
;++++++++++GLOBAL ACADEMY OF TECHOLOGY+++++++++++++++++++++;
;**********************************************************;
;==========================================================;
LIST P=PIC16F873
#INCLUDE "P16F873.INC"
#INCLUDE "LFR.INC"
CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF
CBLOCK 0X20
BANK1 MACRO
BCF STATUS,IRP
BCF STATUS,RP1
BSF STATUS,RP0
ENDM
BANK2 MACRO
BSF STATUS,IRP
BSF STATUS,RP1
BCF STATUS,RP0
ENDM
BANK3 MACRO
BSF STATUS,IRP
BSF STATUS,RP1
BSF STATUS,RP0
ENDM
;CONSTANTS USED
CONSTANT FORWARD = 0X03 ;0011
CONSTANT ST_LEFT = 0X02 ;0001
CONSTANT ST_RIGHT = 0X01 ;0010
CONSTANT BACKWARD = 0X00 ;0000,
;NEVER USED, KEPT FOR FUTURE
;PR2 = 0X0C8 = 200
CONSTANT LOWSPEED = 0X064 ;=100, DUTY CYCLE = 50%
CONSTANT HIGHSPEED = 0X0C0 ;=192 DUTY CLCLE = 96%
INITILIZATION PROCESS
• Port A & C are set as outputs
• Port B is set as inputs
• Timer 0 is set to have a pre scale of 1:8
• Period register is initialized
• Timer 2 is turned ON and is made to have a pre & post scale of 1:1
• Both CCP modules are reset and put in PWM mode
• Initialize duty cycle registers of both the modules to high speed
• Initialize variables & enable interrupts
Once done the goto $ will cause the processor to loop indefinitely and thus waiting for an
interrupt.
4.5.2. LFR.INC
• Bank0 to bank3 macros are used to set the bank select bits in the status register to
put the processor in the required bank.
• The INBANK1 to INBANK3 defines are used whenever a register not in bank 0 is
accessed. This removes the messages shown after build.
The 16 bit macros are used to simplify the code whenever 16bit numbers and
variables are manipulated. The macros are
• INC16F – increment a 16 bit variable in small end-in format.
• DEC16F – decrements a 16 bit variable in small end-in format.
• MOV16LW – loads the 16 bit variable in small end-in format with the specified
immediate 16 bit number
• CLR16F – clears a 16 bit variable in small end-in format.
The rest of the “defines” and constant declarations are used to make understanding the
code easier. But the purpose is lost if the reader skips this section. In fact, even though
this section is the second one presented, it must be the first one to read.
4.5.3. ROUTINE.INC
The first lines of the code check if the interrupt was actually a timer 0 overflow
interrupt just to make sure that no rogue interrupt has occurred. Then the NO_SURFACE
pin is checked; if high, both the motors are stopped and the routine is exited. If the
NO_SURFACE pin is low, it implies that the robot is actually on a surface and the
routine can continue.
Next, the NO_LINE pin is de-bounced high in software. That is, the pin is read,
then sampled again after 256 μs and compared with the previous value. The no line
section of the code is executed only when both the past and the present inputs were the
same and equal to 1. Otherwise it is assumed that the robot can see the line, and thus
continued onto the modifiers section of the code.
Once the 5 seconds are up, the NLA section of the code is reached. In this the
TIME_COUNT is initialized to 476 (0X01DC) so as to give a delay of 1 second and the
“motor” subroutine is called to set the motors to TURN RIGHT. Once this is done this
section of the code is skipped from the next second onwards. Every time TIME_COUNT
goes to zero (1 second), it is initialized back to 476, and CCPR2L is incremented by 10
thus increasing the radius of curvature of the curve the robot is tracing. CCPR2L is reset
back to zero when it incremented beyond HIGHSPEED. Note that every time, the timer 0
routine is exited.
4.5.4. SUBROUTINES.INC
The first subroutine is a simple 256 μs delay routine using just a single 8 bit
register. The second is the main one called the MOTOR subroutine. This is the one
responsible to modifying the PORT A pins and the PWM duty cycles to achieve the
required turns. Before the subroutine is called, the W register must hold the
COMMAND_WORD. This value is added to the PCL register, thus causing a jump
dependent on the value. For example if W contained 0, then the immediate instruction is
executed. This is a table of goto’s causing the control to shift to the appropriate locations.
The operations performed by each leg of the subroutine are as shown in the table below.
A user defined flag remembers if the last operation was a forward or something else. This
makes sure that the PORT A bits are not unnecessarily changed. NOP’s are added to each
leg so that each of them are of the same length, thus making the subroutine execute in the
same number of cycles for every command word.
This completes the code explanation. The code occupies 191 program memory words.
5. RESULT AND CONCLUSION
The Line following robot was finally completed. A lot of effort was put into the
design, implementation and days of toil in front of the computer, writing and debugging
the code. The robot was finally running with a few glitches here and there which were
sorted in the later revisions of the firmware. The line following robot still has a few short-
comings but achieves most of the objectives.
WEBSITES REFERRED
The Seattle Robotics Society Encoder library of robotics articles
http://www.seattlerobotics.org/encoder/library.html
Dallas Personal Robotics Group. Most of these tutorials and articles were referred.
http://www.dprg.org/articles/index.html
http://www.dprg.org/tutorials/index.html
Carnegie Mellon Robotics Club. This is the links page with lots of useful resources
http://www.roboticsclub.org/links.html
This page is called the “Micro-mouse Handbook” and an excellent tutorial for small scale
robotics.
http://www.drtak.org/teaches/UCD/book/book/
This is the main website of microchip. Thousands of application notes, tutorials &
manuals can be found here.
http://www.microchip.com
www.national.com