A line following robot. by James Vroman

Design Goal:

The JavaBot1 is a small line following robot designed to follow a black line drawn on a dry erase board. It is designed to follow very tight curves. The software still has lot's of room for improvement but works well as is.

Motive Power:

The JavaBot1 uses 2 Cirrus CS-70 servos that have been modified

for full rotation and have had their controller boards removed to

convert them from servos to gear motors.

Servos are a common motive power for small robots due to their

low cost, ready availability, standardized sizes and the fact that it

only requires 1 bit on your processor to control the motor.

We initially tried this approach but found that the speed control was

very minimal with a finer control needed for this application. The

servo controller boards were then removed and the wires soldered

to the motor terminals and case ground. The motors were then

controlled by an H-bridge circuit to allow direction and speed control

with only 2 processor bits per motor. This is implemented as one bit for

direction and another bit for power/speed control per motor.

Click for Schematic


In order to follow the line I/R reflective sensors were used to

detect if a line was present or not. The sensors chosen are the

QRB1114 from QT Optoelectronics and have a focal point of

about 1/4 inch. They are available from DIGI-KEY.

Most line followers use 2 or 3 sensors of this type to do their

detection. This works but does not give the ability to follow

lines with very tight turns. An array of seven sensors arranged

in an "inverted V " patternare bolted under the front of the robot

The sensors are wired with all the receivers connected in parallel and

fed to an LM311 comparator to set the threshold trigger level with it's

output fed to a processor bit. The transmitter LEDs are connected

to a 74HCT138 with a current limiting resistor to VCC. This allows

the entire array to use 4 bits for the sensors.


The PIC16F84 was chosen for it's small size, easy reprogramability

and interrupts ( the fact that we manufacture a PIC processor

emulator also helped in this decision). It is clocked at 4 MHZ by

a ceramic resonator and is powered by 4 AA rechargeable batteries.

These same batteries power the motors. This is usually not recommended

since surges in motor current can affect the processors operation, but with

decoupling caps in place and the watchdog timer being used in the

software no problems were experienced. The watchdog could reset the

processor if it went stupid before you could ever see it act up.


The servos were modified for full rotation by disassembling the servo

to gain access to the gear compartment. The main gear is then removed

and the stop that keeps it from rotating removed with an hobby knife.

The plastic key that keeps the feedback pot hooked to the main gear is

removed to allow full rotation without moving the feedback pot. The

servo controller was removed and the feed back pot removed as well.

The wires were removed from the control board and resoldered to the

motor terminals. The servos were reassembled and taped together.

This assembly was then attached to the bottom with the standoffs that

held the line follower board in place. For this application the circuitry

was split into a sensor board and a processor/h-bridge board. The two

boards were connected by a ribbon cable. The entire assembly could

be built on one circuit board with the same board being used as the chassis.

The sensor board is mounted under the front of the chassis with

the processor/motor control board above. A skid (plastic knob )

is attached to the rear of the robot.

The battery holder is mounted over the skid to keep the weight

to the back and counterbalance the line sensors .

The drive wheels are model airplane aluminum, racing wheels and are bolted to the

servo horns with #2 bolts. Both the Dallas Personal Robotics Group

and the Seattle Robotics Society have more information on

modifying servos for use in robotic applications.


The firmware for JavaBot1 is based on the code written by

Jerry Merrill for the TechBot1.

The program is divided into 3 sections - The main program loop,

The pwm isr ( pulse width modulation interrupt sub routine) and

The action routines. The program functions to turn on the

transmitter portion of the sensors in order of priority and see

if a line is seen by the receiver section. The outer sensors are

tested first. If a line is seen then one motor is reversed while

the other continues forward. If no line is seen the next set in

are checked. If a line is seen here then one motor is stopped

while the other continues forward. If no line is seen here then

the next set in is checked. If a line is seen here then the speed

of one motor is reduced while the others speed is maintained.

If no line is seen by these sensors then the centermost sensor

is checked. If a line is seen here then the motors are set for

both full forward (we reduced this from full speed for better

reliability). If no line is seen by this last sensor than the last

motor setting is maintained in hopes of finding the line again.

Once a sensor detects a line and sets the motor settings then

the sensor routine is started again. In this manor priority is

given to the outermost sensors for the biggest corrections

with the more minor corrections being serviced last. More

details on this can be seen in the code listing. The firmware

was developed using the ClearView Mathias PIC emulator

and assembler which can be downloaded for evaluation

from HTTP://

Click to Download Firmware

What's next?

The firmware could be updated to give more decision

capability and a memory of the corrections. If the robot

gets off course and intersects a line with both outside

sensors it can sit there and oscillate till a sensor clears

the line. A search capability that if the line is not seen

in a certain period of time it can run a search pattern

to locate the line would be a good addition.

Add a speaker or sound effects chip. Robots

that make noise get far more attention than ones that do

not. The recovered I/O lines could be used for more sensors

or as a buss to talk to other processors.

Only your imagination will limit you.

James Vroman is a Technical sales and support representative

for TechTools and an active member of the Dallas Personal

Robotics Group. James has been involved in Electronics for

over 15 years and can be reached at



TechTools - HTTP://

Dallas Personal Robotics Group - HTTP://

Seattle Robotics Society - HTTP://

James Vroman -HTTP://