Wednesday, March 12, 2025

3 IR sensor Line follower code

 //Arduino Code for Maze Solving Robot Project

//Written by: www.circuitdigest.com
#include <AFMotor.h>  // Include the Adafruit Motor Shield library for motor control
// Motor Definitions
AF_DCMotor motorA(1);  // Motor A connected to terminal M1 on the motor shield
AF_DCMotor motorB(2);  // Motor B connected to terminal M2 on the motor shield
// Sensor Pin Definitions
const int leftSensor = A0;   // Left IR sensor pin
const int frontSensor = A1;  // Front IR sensor pin
const int rightSensor = A2;  // Right IR sensor pin
// Movement Parameters
const int forwardSpeed = 90;  // Speed for forward movement uragshaa hodloh hurd
const int TurningSpeed = 100;  // Speed for turning movements ergeh hodolgoonii hurd
const int turnDelay = 25;      // Delay for completing a turn //ergelt duusah saatal
const int uTurnDelay = 50;    // Delay for completing a U-turn  //
void setup() {
 // Configure sensor pins as input
 pinMode(leftSensor, INPUT);
 pinMode(frontSensor, INPUT);
 pinMode(rightSensor, INPUT);
 // Initialize serial communication for debugging
 Serial.begin(9600);
}
void loop() {
 // Read sensor values (0 or 1)
 int leftValue = digitalRead(leftSensor);
 int frontValue = digitalRead(frontSensor);
 int rightValue = digitalRead(rightSensor);
 // Combine sensor states into a single value for switch-case logic
 int sensorState = (leftValue << 2) | (frontValue << 1) | rightValue;
 // Decision-making based on sensor states
 switch (sensorState) {
   case 0b000:  // No sensors detect a wall
     uTurn();   // Perform a U-turn
     Serial.println("Stop");
     break;
   case 0b010:       // Only the front sensor detects a wall
     moveForward();  // Move forward
     Serial.println("Move Forward");
     break;
   case 0b111:    // All sensors detect walls
     turnLeft();  // Turn left
     Serial.println("Turn Left");
     break;
   case 0b100:    // Only the left sensor detects a wall
     turnLeft();  // Turn left
     Serial.println("Turn Left");
     break;
   case 0b110:    // Front and left sensors detect walls
     turnLeft();  // Turn left
     Serial.println("Turn Left");
     break;
   case 0b001:     // Only the right sensor detects a wall
     turnRight();  // Turn right
     Serial.println("Turn Right");
     break;
   case 0b011:     // Front and right sensors detect walls
     turnRight();  // Turn right
     Serial.println("Turn Right");
     break;
   case 0b101:      // Left and right sensors detect walls
     stopMotors();  // Stop the motors
     Serial.println("Turn Left");
     break;
   default:         // Unknown sensor state
     stopMotors();  // Stop the motors as a safety measure
     Serial.println("Unknown State");
     break;
 }
}
// Function to move forward
void moveForward() {
 motorA.setSpeed(forwardSpeed);  // Set speed for motor A
 motorB.setSpeed(forwardSpeed);  // Set speed for motor B
 motorA.run(FORWARD);            // Move motor A forward
 motorB.run(FORWARD);            // Move motor B forward
}
// Function to turn left
void turnLeft() {
 motorA.setSpeed(TurningSpeed - 20);  // Reduce speed of motor A for smoother turn
 motorB.setSpeed(TurningSpeed);       // Set speed for motor B
 motorA.run(BACKWARD);                // Move motor A backward
 motorB.run(FORWARD);                 // Move motor B forward
 delay(turnDelay);                    // Delay to complete the turn
}
// Function to turn right
void turnRight() {
 motorA.setSpeed(TurningSpeed);       // Set speed for motor A
 motorB.setSpeed(TurningSpeed - 20);  // Reduce speed of motor B for smoother turn
 motorA.run(FORWARD);                 // Move motor A forward
 motorB.run(BACKWARD);                // Move motor B backward
 delay(turnDelay);                    // Delay to complete the turn
}
// Function to stop the motors
void stopMotors() {
 motorA.run(RELEASE);  // Release motor A
 motorB.run(RELEASE);  // Release motor B
}
// Function to perform a U-turn
void uTurn() {
 motorA.setSpeed(TurningSpeed);  // Set speed for motor A
 motorB.setSpeed(TurningSpeed);  // Set speed for motor B
 motorA.run(FORWARD);            // Move motor A forward
 motorB.run(BACKWARD);           // Move motor B backward
 delay(uTurnDelay);              // Delay to complete the U-turn
}

No comments:

Post a Comment