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
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 :
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.
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
hey can i get PCB design of this bot
ReplyDeletecan i also get the list of components used...
ReplyDeleteplease mail me at anshul076@gmail.com thnks...
can I use 16F84A as the microcontroller?? If so how do I write the program ? Please mail me.
ReplyDeleteskwije225@gmail.com
Why Link for Complete Code and Hex File Not Found!!!
ReplyDeletehey can u provide the pcb design
ReplyDeleteand also how 2 program it i.e how to connect it to pc
u can mail me on jay03893@gmail.com
hi u have done great job....best of luck for ur future project.
ReplyDeleteIn 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.
ReplyDeleteLM324 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)
ReplyDeleteWhat in your opinion should we do to to achieve 5V(digital) as output ?
This comment has been removed by a blog administrator.
ReplyDeletevere nice web sait
ReplyDeleteWhat 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
ReplyDeletethanks for this usefull article, waiting for this article like this again. spy phone
ReplyDeletethis 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.
ReplyDeleteWhat is Google My Businesses
ReplyDeleteThis comment has been removed by the author.
ReplyDelete