Thursday, April 21, 2011

§Line Tracker : Tiny2313 based line follower robot


Hello,
          Here i am going to explain a very simple well known and Interesting project "Line Tracking Robot". Line tracker is a machine that can track a path. The path can be visible like a black line on a white surface  or it can be invisible like a magnetic field.
How to Sense Line??
Line can be Black on a White surface or White on a Black surface.To sense the line we can use LDR, IR Sensor etc. The basic concept is that when light falling on that Sensors they get activated.

 

When light falls on a black surface it will completely absorbed by the black surface. And when this light fall on the white surface it will be reflected through it. I am using IR Tx. Rx. pair to sense the black line. IR Tx. continuously spread IR light (Not visible to human Eye) and when this falls on IR Rx. it will generate output in millivolt.


I am using very low cost AVR series 20 pin Tiny2313 Micro-controller. We know that MCU understand TTL logic +5v for HIGH and 0v for LOW. The output of the IR sensor is fed to the MCU  pins but the output of the sensor is in millivolt ; MCU always consider it as LOW. Hence we require an Amplifier to amplify the sensor's output at TTL level.

We can use comparator which compares potentials at its Inverting and Non-inverting terminals and gives +5V or 0V signal at the output, now we can fed the output of comparator to MCU i/o pins. One major  advantage is to select Comparator as amplifier is that we can adjust the sensitivity of our sensors. LM324 is a 14-pin quad comparator IC.
LM324 Pin details
According to sensors outputs MCU takes decision and moves the Motors. Here again one thing  is to remember that the output current of MCU is not sufficient to drive the DC-Motors hence we require a Motor Driver IC. I am using very popular L293D Motor Driver IC.
Block Diagram according to above discussion-


IR Sensor and LM324 Connection.Repeat this circuit three times.The Output of LM324 is fed to the PORTD (PD0,PD1,PD2) of Tiny2313.

 Make the array of  IR sensors according to circuit below.Look the images in making steps which describes it clearly.
 
Motor Driver L293D Connections : The MCU generates outputs according to sensors input; output of MCU from PORTB(PB0,PB1,PB2,PB3) connected to pin 2,7,15,10 of L293D respectively.

  Look the table's below to understand how it work.
                

 Complete Circuit Diagram :

 

 Making Steps :
step:1
 step:2
 step:3
step:4
 step:5
 step:6
 step:7
 step:8
 step:9
 step:10
 step:11
 step:12
 step:13
 step:14
 step:15
 step:16
 step:17
 step:18
 step:19
 step:20

Code : Code is very basic and easy to understand for beginners. You can modify this to make more powerful.

/*Microcontroller: ATtiny2313
CPU Frequency: 1MHz Internal 
Compiler: WinAVR*/

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

#define TURN_LEFT                  0b00001011
#define TURN_RIGHT                0b00001110
#define MOVE_FORWARD       0b00001010
#define ROTATE                         0b00000110
#define MOVE_BACKWARD    0b00000101
#define STOP                               0b00001111

void delayms(uint16_t millis) {
  while ( millis ) {
    _delay_ms(1);
    millis--;
  }
}
int main(void){

  unsigned char sensor;
  
  DDRB = 0xFF;   //PORTB output port
  DDRD = 0x00;   //PORTD input port
 
  while(1) {

    sensor = (PIND & 0x07);

    switch(sensor)
        {
            case 0x00:PORTB = MOVE_FORWARD;   //000
                             break;
   
            case 0x01:PORTB = TURN_RIGHT;            //001
                            break;
   
            case 0x02:PORTB = MOVE_FORWARD;   //010
                             break;

            case 0x03:PORTB = TURN_RIGHT;            //011
                             break;

            case 0x04:PORTB = TURN_LEFT;              //100
                             break;

            case 0x05:PORTB = MOVE_FORWARD;    //101                   
                             break;

            case 0x06:PORTB = TURN_LEFT;                //110   
                             break;

            case 0x07:PORTB = STOP;                           //111
                            break;
               
            default:PORTB = MOVE_FORWARD;   
                       break;
        }
           }
     return 0;
  }

Troubleshooting :
1.First check the IR Transmitter is working or not. IR light is not visible to human eye ; use your mobile camera to see the IR light.
2.Check the power supply using multimeter.
3.If L293D gets heated don't worry its not a problem.
4.Most important thing is to adjust the sensitivity of the sensors by varying the 10k Pots.Without proper adjustment of Pots robot doesn't move properly.
5.You can connect one extra base for LM324 to extend this Robot in Obstacle Avoiding Robot in Future the circuitry will same only IR sensors is increased and little modification.
6.If motors rotate on opposite or reverse direction then change the polarity of motors.

Downloads :

Video: LINE-TRACKER

 

If this article is useful for you then don't forget to leave comment.Your suggestion and questions are also invited.
                                                                                                                        ~pratyush

15 comments:

  1. hey can i get PCB design of this bot

    ReplyDelete
  2. can i also get the list of components used...
    please mail me at anshul076@gmail.com thnks...

    ReplyDelete
  3. can I use 16F84A as the microcontroller?? If so how do I write the program ? Please mail me.
    skwije225@gmail.com

    ReplyDelete
  4. Why Link for Complete Code and Hex File Not Found!!!

    ReplyDelete
  5. hey can u provide the pcb design
    and also how 2 program it i.e how to connect it to pc
    u can mail me on jay03893@gmail.com

    ReplyDelete
  6. hi u have done great job....best of luck for ur future project.

    ReplyDelete
  7. In the code you have defined that if all sensors are high (000) the robot continues to move forward , but if we have to make the robot to make a 360 degree when there is no line ahead (the robot will turn back to the line) what will be the necessary code change. i have made many robots published in internet but i don't know to write the code by myself or edit the given code.

    ReplyDelete
  8. LM324 op amp doesn't give rail to rail output i.e. output volt will be Vss-5V. In case of above circuit diagram PINS 1,7 and 14 will output either 0 or ~3.5V. (is it enough for MCU to detect Digital High signal)
    What in your opinion should we do to to achieve 5V(digital) as output ?

    ReplyDelete
  9. This comment has been removed by a blog administrator.

    ReplyDelete
  10. What a fantabulous post this has been. Never seen this kind of useful post. I am grateful to you and expect more number of posts like these. Thank you very much. mobile phone tracker

    ReplyDelete
  11. thanks for this usefull article, waiting for this article like this again. spy phone

    ReplyDelete
  12. this post is really helpful for me thanks for choosing this topic. this time to must be know about it Can Dogs Eat Cauliflower for more details.

    ReplyDelete
  13. This comment has been removed by the author.

    ReplyDelete

PID Controlled Self balancing Robot using ESP8266 and MPU6050

This ROBOT is made using ESP8266 Node MCU and MPU6050 accelerometer. Motor used here is normal gear motor of 150 rpm with TB6612FNG motor dr...