Asuro Robot


Asuro Robot The Asuro robot is a small in C programmable robot. The robot comes as a kit and has the following features: AVR microcontroller, two drive-motors, two signal LEDs, two odometer sensors, a line follow sensor, six collision switches, a status LED and a serial communication (infra-red) with a PC.

A comprehensive manual is supplied to assemble the Asuro robot. But take a look at "My modifications to the Asuro robot" before assembling the Asuro robot.

Development environment

Asuro development environment The Asuro robot comes with software for writing the programs for the Asuro robot and for flashing the AVR microcontroller on the Asuro. The software is a little bit old (2003).

For myself I installed a development environment on a Linux system. I use Genie for writing the programs. These are being compiled with the gcc compiler that is supplemented with avr-gcc. For the flashing I use the Windows version of the flash program via Wine. This because the supplied Linux version is no longer usable on a modern Linux system due to its age.
For the communication with the Asuro robot via the USB infrared transceiver I use the program CuteCom.

Click here for a manual to install a development environment for the Asuro robot on a Linux system.

My modifications to the Asuro robot (1)

Modification of the odometer sensors. After assembling the Asuro robot I have tested the sensors. I wrote a small program that continues sends the data from the odometer sensors and the line follow sensor via the infrared transceiver to the PC.

Odometer sensors:

Problem: The gear with the odometer reflection sticker has a lot of play (about 3 mm).

Gear on minimum distance (0 mm):
Motor left, white surface: 862, black surface: 476
Motor right, white surface: 915, black surface: 675

Gear on maximum distance (3 mm):
Motor left, white surface: 885, black surface: 642
Motor right white surface: 937, black surface: 804


I moved the four axles of the Asuro robot 3 mm to the outside to make space for a locking system on the axles that have the gear with the odometer reflection sticker. On the axles with the wheels I installed small spacers to correctly align the gear and wheel. The locking system is made from a screw terminal.

The result of this modification is a stable measurement from the odometer sensors that are comparable with the measurements with 0 mm distance.

My modifications to the Asuro robot (2)

Modification of the line follow sensor.

Line follow sensor:

Problem: The surrounding light has influence on the line follow censor.

The line follow sensor is a light source that shines its light downwards and two light dependent sensors that receive the reflected light from the surface. I did two measurements, one normal and one when the Asuro robot was covered with two hands.

Sensor left, white surface: 970
Sensor left, black surface: 262
Sensor right, white surface: 912
Sensor right, black surface: 298

Sensor left, white surface: 600
Sensor left, black surface: 160
Sensor right, white surface: 514
Sensor right, black surface: 146

The following of a line is based on the difference between the two light dependent sensors, for this the absolute values are not that important.
But I also want to recognise a crossroad. The crossroads have a grey colour. I want to link a certain grey to an absolute value of the light dependent sensors.


I built a small shroud around the line follow sensor. This shroud is an old cap from a 9-pin SUB-D connector, from which I removed the top half. De distance between the shroud and the surface is minimal (about 0,5 mm) and that's why the surrounding light has no more influence.

With the shroud:
Sensor left, white surface: 520
Sensor left, grey surface: 375
Sensor left, black surface: 91
Sensor right, white surface: 440
Sensor right, grey surface: 310
Sensor right, black surface: 70

The result of this modification is a dependable measurement for white, grey and black.

My first program for the Asuro robot

This is a video of my first program for the Asuro robot. The program uses the line follow sensor to stay on the black line.

My modifications to the Asuro robot (3)

Modification of the motor and the odometer sensors. After experimenting with the Asuro robot for a while there was a problem. Strange things happened during the execution of a program, and also the program stopped for an unexplained reason.
I wrote a program that controls the motors and LEDs with the switches. I started testing the Asuro robot and the problem happened when the left motor was turning, but not always.
After I had removed the motor from the circuit board the problem was gone. My conclusion is that the metal cover of the motor caused a short-circuit on the circuit board. I placed a piece of isolation tape on the circuit board and the problem is solved. An extra advantage is that the isolation tape is much less slippery and the motor stays on its place much better. I also applied this to the right motor.

I also made a cover for the odometry sensors. When there is strong sun-light the odometry sensors are nor working correctly. This effects the Asuro robot when driving in a straight line or turning. The cover is made of cardboard.

My modifications to the Asuro robot (4)

Modification of the asuro.c software. Not every Asuro robot is exactly the same. This has an effect on the measuring values of the sensors. There are possibilities in the software (asuro.c - v2.61) to correct this. I made the following corrections.

The function: ISR (ADC_vect)

I made a temporary change to asuro.c, in the function ISR (ADC_vect), that sends the value of tmp[toggle] from one of the odometry sensors to the PC. I made a graph of these values and this helps to determine the best switch values. My values are < 190 and > 200.

The function: Go()

I use the 6 + 6 reflective sticker on my Asuro robot. I wrote a small program that makes the Asuro robot drive forwards for 200 mm. In reality this was not 200 mm.
A small correction in the function Go() solved this problem:
enc_count=abs((100L * distance) / 200L);

The function: Turn()

After that I wrote a small program that turns the Asuro robot 180 degrees. A small correction in the function Turn() now takes care of a correct turn:

The function: PollSwitch()

I also wrote a small program that sends the value of the switches on the Asuro robot to the PC.
I have changed the standard value of 61 to 63.

The function: LineData()

After that I wrote a small program that sends the value of the line follow sensor on the Asuro robot to the PC. There was a difference between left and right of 20%.
A small correction in the function LineData() has solved this problem:
data[1] = (((ADCL + (ADCH << 8)) * 120L) / 100L);

My second Asuro Robot program

This time a bigger and more difficult track and an obstacle! The program uses the line following sensor to stay on the black line and switches to detect a collision.

Update: 2017-08-27 10:21:59