A line follower robot which can follow a dark line on a bright surface.
https://www.youtube.com/watch?v=MXt_QuZyAjU
//My line follower car int SensorLED = 3; //Define the LED of the Line Sensor int button = 2; int LeftMotorPlus = 8; int LeftMotorMinus = 9; int LeftMotorEnable = 10; int RightMotorPlus = 12; int RightMotorMinus = 13; int RightMotorEnable = 11; int sensor1 = 0; int sensor2 = 0; int sensor3 = 0; int sensor4 = 0; int sensor5 = 0; int sensor6 = 0; int sensor7 = 0; void setup() { Serial.begin(9600); pinMode(LeftMotorPlus, OUTPUT); pinMode(LeftMotorMinus, OUTPUT); pinMode(LeftMotorEnable, OUTPUT); pinMode(RightMotorEnable, OUTPUT); pinMode(RightMotorMinus , OUTPUT); pinMode(RightMotorPlus , OUTPUT); pinMode(SensorLED, OUTPUT); } void move_forward() { digitalWrite(LeftMotorEnable, HIGH); digitalWrite(RightMotorEnable, HIGH); digitalWrite(LeftMotorPlus, HIGH); digitalWrite(LeftMotorMinus, LOW); digitalWrite(RightMotorPlus, LOW); digitalWrite(RightMotorMinus, HIGH); } void move_backward() { digitalWrite(LeftMotorEnable, HIGH); digitalWrite(RightMotorEnable, HIGH); digitalWrite(LeftMotorPlus, LOW); digitalWrite(LeftMotorMinus, HIGH); digitalWrite(RightMotorPlus, HIGH); digitalWrite(RightMotorMinus, LOW); } void turn_left() { analogWrite(LeftMotorEnable, 210); analogWrite(RightMotorEnable, 210); digitalWrite(LeftMotorPlus, HIGH); digitalWrite(LeftMotorMinus, LOW); digitalWrite(RightMotorPlus, HIGH); digitalWrite(RightMotorMinus, LOW); } void turn_right() { analogWrite(LeftMotorEnable, 210); analogWrite(RightMotorEnable, 210); digitalWrite(LeftMotorPlus, LOW); digitalWrite(LeftMotorMinus, HIGH); digitalWrite(RightMotorPlus, LOW); digitalWrite(RightMotorMinus, HIGH); } void stop_moving() { digitalWrite(LeftMotorEnable, LOW); digitalWrite(RightMotorEnable, LOW); digitalWrite(LeftMotorPlus, LOW); digitalWrite(LeftMotorMinus, LOW); digitalWrite(RightMotorPlus, LOW); digitalWrite(RightMotorMinus, LOW); } int find_line_position() { digitalWrite(SensorLED, HIGH);//Turn on Sensor LED delay(1); //Read the sensors and display Serially int sensorValue1 = analogRead(A1); delay(1); sensorValue1 = analogRead(A1); if (sensorValue1 < 600 && sensorValue1 > 320) { sensor1 = 1; } else { sensor1 = 0; } Serial.println(sensorValue1); delay(1); int sensorValue2 = analogRead(A2); delay(1); sensorValue2 = analogRead(A2); if (sensorValue2 < 600 && sensorValue2 > 320) { sensor2 = 1; } else { sensor2 = 0; } Serial.println(sensorValue2); delay(1); int sensorValue3 = analogRead(A3); delay(1); sensorValue3 = analogRead(A3); if (sensorValue3 < 600 && sensorValue3 > 320) { sensor3 = 1; } else { sensor3 = 0; } Serial.println(sensorValue3); delay(1); int sensorValue4 = analogRead(A4); delay(1); sensorValue4 = analogRead(A4); if (sensorValue4 < 600 && sensorValue4 > 320) { sensor4 = 1; } else { sensor4 = 0; } Serial.println(sensorValue4); delay(1); int sensorValue5 = analogRead(A5); delay(1); sensorValue5 = analogRead(A5); if (sensorValue5 < 600 && sensorValue5 > 320) { sensor5 = 1; } else { sensor5 = 0; } Serial.println(sensorValue5); delay(1); int sensorValue6 = analogRead(A6); delay(1); sensorValue6 = analogRead(A6); if (sensorValue6 < 600 && sensorValue6 > 320) { sensor6 = 1; } else { sensor6 = 0; } Serial.println(sensorValue6); delay(1); int sensorValue7 = analogRead(A7); delay(1); sensorValue7 = analogRead(A7); if (sensorValue7 < 600 && sensorValue7 > 320) { sensor7 = 1; } else { sensor7 = 0; } Serial.println(sensorValue7); Serial.println(" "); //delay(3200); //Calculate the Line Position Serial.print(sensor1); Serial.print(sensor2); Serial.print(sensor3); Serial.print(sensor4); Serial.print(sensor5); Serial.print(sensor6); Serial.print(sensor7); Serial.println(""); // Calculate the Decimal corresponding to the line position int dec = 1 * sensor7 + 2 * sensor6 + 4 * sensor5 + 8 * sensor4 + 16 * sensor3 + 32 * sensor2 + 64 * sensor1; Serial.print ("Detected line position is"); Serial.println(dec); return dec; } int count = 0; void loop() { int line_position = find_line_position(); if (line_position > 0 && line_position < 7) //i.e. the line is on the right { turn_right(); Serial.println("Line found on the right"); } if (line_position > 7 && line_position < 31)//i.e line is on the center { move_forward(); Serial.println("Line is in The Middle"); } if (line_position > 31 && line_position < 127) //i.e. line is on the left { turn_left(); Serial.println("Line is on the Left Side"); } if (line_position == 127 || line_position == 0) { count = count + 1; Serial.print(" Current No line Timeout is"); Serial.println(count); if (count > 250) { Serial.println("Stopping"); stop_moving(); } } }