Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Based Fire-Fighting Robot with IR Sensors and Servo-Controlled Water Pump

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Fire-Fighting Robot with IR Sensors and Servo-Controlled Water Pump

Circuit Documentation

Summary

The circuit is designed for a 4-wheeled fire-fighting robot equipped with three IR sensors, a servo motor, a water pump, and four DC motors controlled by an L298N motor driver. The robot navigates towards a fire detected by the IR sensors and activates the water pump to extinguish it. The Arduino UNO serves as the central microcontroller unit, interfacing with the sensors, motors, and pump to coordinate the robot's actions.

Component List

IR Sensors

Arduino UNO

Servo Motor

5V Mini Water Pump

Motors and Wheels

7.4V Battery

L298N DC Motor Driver

Wiring Details

IR Sensors

Arduino UNO

Servo Motor

5V Mini Water Pump

Motors and Wheels

7.4V Battery

L298N DC Motor Driver

Documented Code

/*
 * 4-Wheeled Fire Fighting Robot
 * This code controls a fire fighting robot with 4 DC motors, 3 IR sensors,
 * a servo motor, and a water pump. The robot moves towards the fire detected
 * by the IR sensors and uses the water pump to extinguish it.
 */

// Pin definitions
#define IR_SENSOR_LEFT 2
#define IR_SENSOR_CENTER 3
#define IR_SENSOR_RIGHT 4
#define SERVO_PIN 5
#define WATER_PUMP_PIN 13
#define ENA 11
#define ENB 12
#define IN1 6
#define IN2 7
#define IN3 8
#define IN4 9

#include <Servo.h>
Servo servo;

void setup() {
  // Initialize serial communication
  Serial.begin(9600);

  // Initialize IR sensor pins
  pinMode(IR_SENSOR_LEFT, INPUT);
  pinMode(IR_SENSOR_CENTER, INPUT);
  pinMode(IR_SENSOR_RIGHT, INPUT);

  // Initialize motor driver pins
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  // Initialize water pump pin
  pinMode(WATER_PUMP_PIN, OUTPUT);

  // Attach servo to pin
  servo.attach(SERVO_PIN);

  // Set initial servo position
  servo.write(90);
}

void loop() {
  // Read IR sensor values
  int irLeft = digitalRead(IR_SENSOR_LEFT);
  int irCenter = digitalRead(IR_SENSOR_CENTER);
  int irRight = digitalRead(IR_SENSOR_RIGHT);

  // Print IR sensor values for debugging
  Serial.print("IR Left: ");
  Serial.print(irLeft);
  Serial.print(" IR Center: ");
  Serial.print(irCenter);
  Serial.print(" IR Right: ");
  Serial.println(irRight);

  // Determine robot movement based on IR sensor values
  if (irLeft == LOW && irCenter == LOW && irRight == LOW) {
    // Move forward
    moveForward();
  } else if (irLeft == LOW && irCenter == HIGH && irRight == HIGH) {
    // Turn left
    turnLeft();
  } else if (irLeft == HIGH && irCenter == HIGH && irRight == LOW) {
    // Turn right
    turnRight();
  } else if (irLeft == HIGH && irCenter == HIGH && irRight == HIGH) {
    // Fire detected, stop and activate water pump
    stopRobot();
    activateWaterPump();
  } else {
    // Default to stop
    stopRobot();
  }

  delay(100);
}

void moveForward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 160);
  analogWrite(ENB, 160);
  servo.write(90); // Rotate servo back to 90 degrees (center position)
  
}

void turnLeft() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 160);
  analogWrite(ENB, 160);
  servo.write(45); // Rotate servo to 45 degrees
}

void turnRight() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENA, 160);
  analogWrite(ENB, 160);
  servo.write(135); // Rotate servo to 135 degrees
  
}

void stopRobot() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}

void activateWaterPump() {
  digitalWrite(WATER_PUMP_PIN, HIGH);
  delay(5000); // Run the pump for 5 seconds
  digitalWrite(WATER_PUMP_PIN, LOW);
}

This code is responsible for the operation of the fire-fighting robot. It initializes the hardware components, reads sensor data, and controls the robot's movements and actions based on the sensor inputs. The robot can move forward, turn left or right, stop, and activate the water pump to extinguish fires.