Line Following Robot

Project: Line Following Robot

Build a robot that can follow a black line on a white surface!

Components Needed

  • Arduino Uno
  • 2× IR Sensors
  • L298N Motor Driver
  • 2× DC Motors
  • Chassis and wheels
  • Battery

How IR Sensors Work

IR sensors detect the difference between black and white surfaces:

  • White surface: Reflects IR light → Sensor OUTPUT = HIGH
  • Black line: Absorbs IR light → Sensor OUTPUT = LOW

Complete Code


// IR Sensor pins
const int leftSensor = 2;
const int rightSensor = 3;

// Motor pins
const int enA = 9;
const int in1 = 8;
const int in2 = 7;
const int enB = 10;
const int in3 = 5;
const int in4 = 4;

const int motorSpeed = 150;

void setup() {
  pinMode(leftSensor, INPUT);
  pinMode(rightSensor, INPUT);

  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  int left = digitalRead(leftSensor);
  int right = digitalRead(rightSensor);

  Serial.print("Left: ");
  Serial.print(left);
  Serial.print(" Right: ");
  Serial.println(right);

  if (left == LOW && right == LOW) {
    // Both sensors on black line - move forward
    moveForward();
  }
  else if (left == LOW && right == HIGH) {
    // Left sensor on line - turn left
    turnLeft();
  }
  else if (left == HIGH && right == LOW) {
    // Right sensor on line - turn right
    turnRight();
  }
  else {
    // Both off line - stop
    stopRobot();
  }
}

void moveForward() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enA, motorSpeed);
  analogWrite(enB, motorSpeed);
}

void turnLeft() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enA, 0);
  analogWrite(enB, motorSpeed);
}

void turnRight() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  analogWrite(enA, motorSpeed);
  analogWrite(enB, 0);
}

void stopRobot() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}
      

Testing Tips

  • Use black electrical tape on white surface
  • Line width: 2-3 cm
  • Adjust IR sensor height: 0.5-1 cm above surface
  • Calibrate sensor sensitivity with potentiometer

💡 Tip: Tip: Start with slow speed (100-150) for better accuracy. Increase speed once robot follows reliably.