// From ChatGPT
//========================================================================
//========================================================================
// Line Following Robot Code
// Include necessary libraries
#include <Arduino.h>
// Define pin connections for IR sensors
#define LEFT_IR_SENSOR A0
#define RIGHT_IR_SENSOR A1
// Define pin connections for motor driver
#define ENA 9 // Enable pin for left motor
#define IN1 6 // Input 1 for left motor
#define IN2 7 // Input 2 for left motor
#define ENB 10 // Enable pin for right motor
#define IN3 8 // Input 3 for right motor
#define IN4 11 // Input 4 for right motor
// Define motor speed
const int motorSpeed = 150; // Speed can be adjusted between 0-255
void setup() {
// Set up motor pins as outputs
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Set up IR sensor pins as inputs
pinMode(LEFT_IR_SENSOR, INPUT);
pinMode(RIGHT_IR_SENSOR, INPUT);
}
void loop() {
// Read the IR sensor values
int leftSensor = digitalRead(LEFT_IR_SENSOR);
int rightSensor = digitalRead(RIGHT_IR_SENSOR);
// Logic for line following
if (leftSensor == LOW && rightSensor == LOW) {
// Both sensors on the black line - Move forward
moveForward();
} else if (leftSensor == LOW && rightSensor == HIGH) {
// Left sensor on the black line - Turn left
turnLeft();
} else if (leftSensor == HIGH && rightSensor == LOW) {
// Right sensor on the black line - Turn right
turnRight();
} else {
// Both sensors off the black line - Stop
stopMotors();
}
}
void moveForward() {
analogWrite(ENA, motorSpeed);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENB, motorSpeed);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void turnLeft() {
analogWrite(ENA, motorSpeed);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENB, motorSpeed);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void turnRight() {
analogWrite(ENA, motorSpeed);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENB, motorSpeed);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void stopMotors() {
analogWrite(ENA, 0);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENB, 0);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
// FEOM GEMINI
//========================================================================
//========================================================================
// মোটর পিন
#define LM1 6 // বাম মোটরের জন্য PWM পিন
#define LM2 5 // বাম মোটরের জন্য PWM পিন
#define RM1 10 // ডান মোটরের জন্য PWM পিন
#define RM2 9 // ডান মোটরের জন্য PWM পিন
// সেন্সর পিন
#define LS A0 // বাম সেন্সরের জন্য এনালগ পিন
#define RS A1 // ডান সেন্সরের জন্য এনালগ পিন
// থ্রেশহোল্ড মান (কালো লাইন সনাক্তকরণের জন্য)
#define THRESHOLD 500
// গতির মান
#define BASE_SPEED 80 // বেস গতি
#define TURN_SPEED 100 // টার্ন স্পিড
#define STOP_SPEED 0 // থামানোর গতি
void setup() {
// মোটর পিনকে আউটপুট হিসাবে সেট করুন
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(RM1, OUTPUT);
pinMode(RM2, OUTPUT);
// সেন্সর পিনকে ইনপুট হিসাবে সেট করুন
pinMode(LS, INPUT);
pinMode(RS, INPUT);
// সিরিয়াল মনিটর শুরু করুন (ডিবাগিংয়ের জন্য)
Serial.begin(9600);
}
void loop() {
// সেন্সর থেকে মান পড়ুন
int leftSensor = analogRead(LS);
int rightSensor = analogRead(RS);
// সেন্সর মান প্রিন্ট করুন (ডিবাগিংয়ের জন্য)
Serial.print("Left Sensor: ");
Serial.print(leftSensor);
Serial.print(" Right Sensor: ");
Serial.println(rightSensor);
// লাইন সনাক্তকরণের যুক্তি
if (leftSensor > THRESHOLD && rightSensor > THRESHOLD) {
// উভয় সেন্সর কালো লাইনের উপর থাকলে, সামনে যান
forward();
} else if (leftSensor > THRESHOLD && rightSensor < THRESHOLD) {
// বাম সেন্সর কালো লাইনের উপর থাকলে, বামে ঘুরুন
turnLeft();
} else if (leftSensor < THRESHOLD && rightSensor > THRESHOLD) {
// ডান সেন্সর কালো লাইনের উপর থাকলে, ডানে ঘুরুন
turnRight();
} else {
// কোনো সেন্সর কালো লাইনের উপর না থাকলে, থামুন
stopRobot();
}
}
// মোটর নিয়ন্ত্রণ ফাংশন
void forward() {
analogWrite(LM1, BASE_SPEED);
analogWrite(LM2, 0);
analogWrite(RM1, BASE_SPEED);
analogWrite(RM2, 0);
}
void turnLeft() {
analogWrite(LM1, 0);
analogWrite(LM2, TURN_SPEED);
analogWrite(RM1, TURN_SPEED);
analogWrite(RM2, 0);
}
void turnRight() {
analogWrite(LM1, TURN_SPEED);
analogWrite(LM2, 0);
analogWrite(RM1, 0);
analogWrite(RM2, TURN_SPEED);
}
void stopRobot() {
analogWrite(LM1, STOP_SPEED);
analogWrite(LM2, STOP_SPEED);
analogWrite(RM1, STOP_SPEED);
analogWrite(RM2, STOP_SPEED);
}