Line Follower Robot

I designed and programmed a Line Follower Robot (LFR), a robotic vehicle capable of following a designated path autonomously. With this, I participated in the World Robotics Championship organised by Technoxian. The competition required intricate engineering, problem-solving, and programming skills. It was not just a test of our technical abilities but also a platform that encouraged creativity and innovation.

Material used:

5 IR Sensors

Arduino UNO

L28n Motor Driver

12 Volt Battery

Switch

Acrylic Chassis

Few Jumper Wires

Source Code:

#define IR_SENSOR_RIGHT 11

#define IR_SENSOR_LEFT 12

#define IR_SENSOR_RIGHT_MIDDLE 2

#define IR_SENSOR_LEFT_MIDDLE 3

#define IR_SENSOR_MIDDLE 4

#define MOTOR_SPEED 100

//Right motor

int enableRightMotor=6;

int rightMotorPin1=7;

int rightMotorPin2=8;

//Left motor

int enableLeftMotor=5;

int leftMotorPin1=9;

int leftMotorPin2=10;

void setup()

{

//The problem with TT gear motors is that, at very low pwm value it does not even rotate.

//If we increase the PWM value then it rotates faster and our robot is not controlled in that speed and goes out of line.

//For that we need to increase the frequency of analogWrite.

//Below line is important to change the frequency of PWM signal on pin D5 and D6

//Because of this, motor runs in controlled manner (lower speed) at high PWM value.

//This sets frequecny as 7812.5 hz.

TCCR0B = TCCR0B & B11111000 | B00000010 ;

// put your setup code here, to run once:

pinMode(enableRightMotor, OUTPUT);

pinMode(rightMotorPin1, OUTPUT);

pinMode(rightMotorPin2, OUTPUT);

pinMode(enableLeftMotor, OUTPUT);

pinMode(leftMotorPin1, OUTPUT);

pinMode(leftMotorPin2, OUTPUT);

pinMode(IR_SENSOR_RIGHT, INPUT);

pinMode(IR_SENSOR_LEFT, INPUT);

pinMode(IR_SENSOR_RIGHT_MIDDLE, INPUT);

pinMode(IR_SENSOR_LEFT_MIDDLE, INPUT);

pinMode(IR_SENSOR_MIDDLE, INPUT);

rotateMotor(0,0);

}

void loop()

{

int rightIRSensorValue = digitalRead(IR_SENSOR_RIGHT);

int leftIRSensorValue = digitalRead(IR_SENSOR_LEFT);

int middlerightIRSensorValue = digitalRead(IR_SENSOR_RIGHT_MIDDLE);

int middleleftIRSensorValue = digitalRead(IR_SENSOR_LEFT_MIDDLE);

int middleIRSensorValue = digitalRead(IR_SENSOR_MIDDLE);

//If none of the sensors detects black line, then go straight

if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == HIGH && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW)

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == HIGH && middleIRSensorValue == HIGH && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED,-MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == HIGH && middlerightIRSensorValue == HIGH && rightIRSensorValue == HIGH )

{

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == HIGH && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED,-MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == HIGH && rightIRSensorValue == LOW )

{

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == HIGH && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == HIGH && rightIRSensorValue == HIGH )

{

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == HIGH && middleIRSensorValue == HIGH && middlerightIRSensorValue == HIGH && rightIRSensorValue == HIGH )

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == HIGH && middleIRSensorValue == HIGH && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == HIGH && middlerightIRSensorValue == HIGH && rightIRSensorValue == LOW )

{

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

}

//sesor 5 right motor reverse

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == HIGH )

{

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == LOW && middleIRSensorValue == LOW && middlerightIRSensorValue == LOW && rightIRSensorValue == HIGH )

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == HIGH && middleleftIRSensorValue == HIGH && middleIRSensorValue == LOW && middlerightIRSensorValue == HIGH && rightIRSensorValue == HIGH )

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

else if (leftIRSensorValue == LOW && middleleftIRSensorValue == HIGH && middleIRSensorValue == LOW && middlerightIRSensorValue == HIGH && rightIRSensorValue == LOW )

{

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

}

//If both the sensors detect black line, then stop

else

{

// Move left for 1 second

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

delay(1000); // 1 second delay

// Move right for 1 second

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

delay(1000); // 1 second delay

}

}

void rotateMotor(int rightMotorSpeed, int leftMotorSpeed)

{

if (rightMotorSpeed < 0)

{

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,HIGH);

}

else if (rightMotorSpeed > 0)

{

digitalWrite(rightMotorPin1,HIGH);

digitalWrite(rightMotorPin2,LOW);

}

else

{

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,LOW);

}

if (leftMotorSpeed < 0)

{

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,HIGH);

}

else if (leftMotorSpeed > 0)

{

digitalWrite(leftMotorPin1,HIGH);

digitalWrite(leftMotorPin2,LOW);

}

else

{

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,LOW);

}

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

.

See More Related Posts -

104 thoughts on “Line Follower Robot”

  1. 83. Клининговая компания в Челябинске предоставляет услуги по уборке квартир перед продажей или сдачей в аренду, включая глубокую мойку полов, стен, окон, мебели, уборку кухни, санузла, устранение неприятных запахов и другие работы для повышения привлекательности объекта.
    Клининговая компания Челябинск .

  2. Приобрести диплом без лишних хлопот, онлайн.
    Как купить диплом без риска, узнайте сейчас.
    Заказать официальный документ о образовании, важная информация.
    Почему выгодно купить диплом, рассказываем.
    Где купить диплом без проблем, на проверенных ресурсах.
    Купить диплом по выгодной цене, интересные варианты.
    Дипломы на заказ по лучшим ценам, подробности на сайте.
    Скрытая покупка дипломов, проверенные решения.
    Как быстро купить диплом, подробности на сайте.
    Купить диплом срочно и законно, лучшие условия.
    Как выбрать диплом, лучшие цены.
    Как купить диплом срочно, без рисков.
    Почему стоит заказать диплом, подробности у нас.
    Как выбрать и купить диплом, лучшие предложения.
    Легальная покупка дипломов безопасно, безопасность на первом месте.
    Купить дипломы легко, интересные варианты.
    Официальная покупка диплома, подробности здесь.
    Официальный документ об образовании, подробности у нас.
    купить диплом https://www.7arusak-diploms.com/ .

  3. Приобрести диплом без лишних хлопот, онлайн.
    Как купить диплом без риска, без заморочек.
    Какой диплом купить, проверенные варианты.
    Преимущества покупки диплома, все секреты.
    Где купить диплом без проблем, без риска.
    Как выбрать диплом для покупки, секреты выбора.
    Дипломы на заказ по лучшим ценам, лучшие условия.
    Скрытая покупка дипломов, проверенные решения.
    Лучшие дипломы для покупки, только актуальная информация.
    Как купить диплом онлайн, подробности у нас.
    Официальные документы для покупки, лучшие цены.
    Легальная покупка дипломов, лучшие условия.
    Почему стоит заказать диплом, подробности у нас.
    Дипломы на всех условиях, лучшие предложения.
    Купить диплом без риска, подробности у нас.
    Купить дипломы легко, интересные варианты.
    Заказать диплом онлайн без проблем, лучшие условия.
    Официальный документ об образовании, гарантированный результат.
    купить диплом https://www.7arusak-diploms.com .

  4. Секреты оформления пропуска на МКАД, советы, рекомендации, Какие документы нужны для оформления пропуска на МКАД, 10 вопросов о пропуске на МКАД, Пропуск на МКАД: сроки и стоимость, основные моменты, Пропуск на МКАД: основные преимущества, Сроки и порядок продления пропуска на МКАД, подробная информация
    Проверить пропуск на мкад Проверить пропуск на мкад .

  5. Whats up this is kind of of off topic but I
    was wanting to know if blogs use WYSIWYG editors or if
    you have to manually code with HTML. I’m starting a blog soon but have no coding experience so I wanted to get advice from
    someone with experience. Any help would be enormously appreciated!

  6. Mystic Knightt

    Great article! I found your perspective on this topic both enlightening and thought-provoking. The way you break down complex ideas into understandable insights is truly commendable. It’s interesting to see how these developments could shape our future. I’m particularly intrigued by your point about potential challenges and would love to dive deeper into that.

    For those who are interested in exploring this topic further, I recommend checking out this resource for more detailed information: comprehensive guide. It offers additional insights that complement what’s discussed here.

    Looking forward to hearing others’ thoughts and continuing this discussion. Thanks for sharing such valuable information!

  7. Great article! I appreciate the clear and insightful perspective you’ve shared. It’s fascinating to see how this topic is developing. For those interested in diving deeper, I found an excellent resource that expands on these ideas: check it out here. Looking forward to hearing others’ thoughts and continuing the discussion!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top