Hello,
For my school project I am making a line tracking robot using five Line tracking sensors from DFRobot.
It needs to follow a black line in a certain course. But my robot can't take sharp corners. Can I improve my code to make this work or do I need to reposition my sensors?
Here's my code;
#define RECHTS_DIR 13
#define RECHTS_SPEED 11
#define RECHTS_BRAKE 8
#define LINKS_DIR 12
#define LINKS_SPEED 3
#define LINKS_BRAKE 9
#define SENSOR_1 2
#define SENSOR_2 4
#define SENSOR_3 5
#define SENSOR_4 10
#define SENSOR_5 A2
#define VOORUIT HIGH
#define ACHTERUIT LOW
int out1=0;
int out2=0;
int out3=0;
int out4=0;
int out5=0;
void setup() {
pinMode(LINKS_DIR, OUTPUT);
pinMode(LINKS_SPEED, OUTPUT);
pinMode(LINKS_BRAKE, OUTPUT);
pinMode(RECHTS_DIR, OUTPUT);
pinMode(RECHTS_SPEED, OUTPUT);
pinMode(RECHTS_BRAKE, OUTPUT);
pinMode(SENSOR_1, INPUT);
pinMode(SENSOR_2, INPUT);
pinMode(SENSOR_3, INPUT);
pinMode(SENSOR_4, INPUT);
pinMode(SENSOR_5, INPUT);
digitalWrite(LINKS_DIR, VOORUIT);
digitalWrite(RECHTS_DIR, VOORUIT);
digitalWrite(LINKS_BRAKE, LOW);
digitalWrite(RECHTS_BRAKE, LOW);
}
void loop()
{
out1 = digitalRead(SENSOR_1);
out2 = digitalRead(SENSOR_2);
out3 = digitalRead(SENSOR_3);
out4 = digitalRead(SENSOR_4);
out5 = digitalRead(SENSOR_5);
if(out3==0) // Als middensensor alleen lijn ziet
{
digitalWrite(LINKS_SPEED,HIGH); //beide motors maximum
digitalWrite(RECHTS_SPEED,HIGH);
}
else if(out4==0 && out3==1) // als rechts4 lijn ziet maar midden niet (kleine bocht)
{
if(out3 != 0)
{
digitalWrite(RECHTS_SPEED,LOW);
digitalWrite(LINKS_SPEED,150);
}
}
else if(out4==0 && out3==0) // als middensensor lijn ziet en rechts4 (erg kleine bocht)
{
if(out4 != 1)
{
digitalWrite(RECHTS_SPEED,LOW);
digitalWrite(LINKS_SPEED,130);
}
}
else if(out5 ==0 && out3==1) // als rechts5 lijn ziet en midden niet (scherpe bocht)
{
if(out3 != 0)
{
digitalWrite(RECHTS_SPEED,LOW);
digitalWrite(LINKS_SPEED,185);
}
}
else if(out5==0 && out3==1) // als rechts5 lijn ziet en midden lijn ziet (ERG SCHERP)
{
if(out5 != 1)
{
digitalWrite(RECHTS_SPEED,LOW);
digitalWrite(LINKS_SPEED,HIGH);
}
}
else if(out2==0 && out3==1) // als links2 lijn ziet maar midden niet
{
if(out3 != 0)
{
digitalWrite(LINKS_SPEED,LOW);
digitalWrite(RECHTS_SPEED,150);
}
}
else if(out2==0 && out3==0) // als links2 lijn ziet en midden ook
{
if(out2 != 1)
{
digitalWrite(LINKS_SPEED,LOW);
digitalWrite(RECHTS_SPEED,130);
}
}
else if( out2==0 && out1==0) // als links2 lijn ziet en links1 ook (redelijk scherpe bocht)
{
if(out3 !=0)
{
digitalWrite(RECHTS_SPEED,185);
digitalWrite(LINKS_SPEED,LOW);
}
}
else if(out1==0) // als links1 alleen lijn ziet (erg scherpe bocht)
{
if(out3 !=0)
{
digitalWrite(RECHTS_SPEED,HIGH);
digitalWrite(LINKS_SPEED,LOW);
}
}
else if(out1==1 && out2==1 && out3==1 && out4==1 && out5==1) // als alle sensors geen lijn zien
{
digitalWrite(RECHTS_SPEED,LOW);
digitalWrite(LINKS_SPEED,LOW);
}
delay(30);
}
And here's a picture of the line tracking sensors on the front of the robot;
