Arduino Project 030 - Line Following Robot
Project 30 Line Following Robot
Use L298P Driver Line Following Robot

Line or Trace Following Robot Circuit

Line or Trace Following Robot Schematic
/* Coding Ron Wang
Nov.21th 2024
Autaba support for coding Hardware
Project 30 Tracking Line Robot
*/
int mr1=8; //motor right 1
int mr2=9; //motor right 2
int ml1=10; //motor left 1
int ml2=11; //motor left 2
int sr=6; //sensor right
int sl=7; //sensor left
int svr=0;
int svl=0;
int led=13;
int enr=3;
int enl=5;
int vspeed=100;
int tspeed=255;
int tdelay=20;
void setup()
{
pinMode(mr1,OUTPUT);
pinMode(mr2,OUTPUT);
pinMode(ml1,OUTPUT);
pinMode(ml2,OUTPUT);
pinMode(led,OUTPUT);
pinMode(sr,INPUT);
pinMode(sl,INPUT);
delay(5000);
}
void loop()
{
svr=digitalRead(sr);
svl=digitalRead(sl);
if(svl==LOW && svr==LOW)
{
forward(); // Forward
}
if(svl==HIGH && svr==LOW)
{
left(); //Turn left
}
if(svl==LOW && svr==HIGH)
{
right(); //Turn Right
}
if(svl==HIGH && svr==HIGH)
{
stop(); // Stop
}
}
void forward()
{
digitalWrite(mr1,HIGH);
digitalWrite(mr2,LOW);
digitalWrite(ml1,HIGH);
digitalWrite(ml2,LOW);
analogWrite (enr,vspeed);
analogWrite (enl,vspeed);
}
void backward()
{
digitalWrite(mr1,LOW);
digitalWrite(mr2,HIGH);
digitalWrite(ml1,LOW);
digitalWrite(ml2,HIGH);
analogWrite (enr,vspeed);
analogWrite (enl,vspeed);
}
void right()
{
digitalWrite(mr1,LOW);
digitalWrite(mr2,HIGH);
digitalWrite(ml1,HIGH);
digitalWrite(ml2,LOW);
analogWrite (enr,tspeed);
analogWrite (enl,tspeed);
delay(tdelay);
}
void left()
{
digitalWrite(mr1,HIGH);
digitalWrite(mr2,LOW);
digitalWrite(ml1,LOW);
digitalWrite(ml2,HIGH);
analogWrite (enr,tspeed);
analogWrite (enl,tspeed);
delay(tdelay);
}
void stop()
{
analogWrite (enr,0);
analogWrite (enl,0);
}3 Way or 5Way Trace Following Robot
/* Coding Ron Wang
Nov.21th 2024
Autaba support for coding Hardware
Project 30 3way or 5 ways Trace Following Robot
*/
#define lights 9
int LDR1, LDR2, LDR3; // sensor values
// calibration offsets
int leftOffset = 0, rightOffset = 0, centre = 0;
// pins for motor speed and direction
int speed1 = 3, speed2 = 11, direction1 = 12, direction2 = 13;
// starting speed and rotation offset
int startSpeed = 70, rotate = 30;
// sensor threshold
int threshhold = 5;
// initial speeds of left and right motors
int left = startSpeed, right = startSpeed;
// Sensor calibration routine
void calibrate() {
for (int x=0; x<10; x++) { // run this 10 times to obtain average
digitalWrite(lights, HIGH); // lights on
delay(100);
LDR1 = analogRead(0); // read the 3 sensors
LDR2 = analogRead(1);
LDR3 = analogRead(2);
leftOffset = leftOffset + LDR1; // add value of left sensor to total
centre = centre + LDR2; // add value of centre sensor to total
rightOffset = rightOffset + LDR3; // add value of right sensor to total
delay(100);
digitalWrite(lights, LOW); // lights off
delay(100);
}
// obtain average for each sensor
leftOffset = leftOffset / 10;
rightOffset = rightOffset / 10;
centre = centre /10;
// calculate offsets for left and right sensors
leftOffset = centre - leftOffset;
rightOffset = centre - rightOffset;
}
void setup()
{
// set the motor pins to outputs
pinMode(lights, OUTPUT); // lights
pinMode(speed1, OUTPUT);
pinMode(speed2, OUTPUT);
pinMode(direction1, OUTPUT);
pinMode(direction2, OUTPUT);
// calibrate the sensors
calibrate();
delay(3000);
digitalWrite(lights, HIGH); // lights on
delay(100);
// set motor direction to forward
digitalWrite(direction1, HIGH);
digitalWrite(direction2, HIGH);
// set speed of both motors
analogWrite(speed1,left);
analogWrite(speed2,right);
}
void loop() {
// make both motors same speed
left = startSpeed;
right = startSpeed;
// read the sensors and add the offsets
LDR1 = analogRead(0) + leftOffset;
LDR2 = analogRead(1);
LDR3 = analogRead(2) + rightOffset;
// if LDR1 is greater than the centre sensor + threshold turn right
if (LDR1 > (LDR2+threshhold)) {
left = startSpeed + rotate;
right = startSpeed - rotate;
}
// if LDR3 is greater than the centre sensor + threshold turn left
if (LDR3 > (LDR2+threshhold)) {
left = startSpeed - rotate;
right = startSpeed + rotate;
}
// send the speed values to the motors
analogWrite(speed1,left);
analogWrite(speed2,right);
} 版权声明:本文为原创文章,版权归donstudio所有,欢迎分享本文,转载请保留出处!





