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

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

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

Circuit Documentation

Summary of the Circuit

This circuit is designed to control a 4-wheeled fire-fighting robot. It includes an Arduino UNO microcontroller, three IR sensors, a servo motor, a 5V mini water pump, four DC motors with wheels, and an L298N DC motor driver. The robot uses the IR sensors to detect fire and navigate towards it. Upon detection, the robot uses the water pump to extinguish the fire. The servo motor is used to adjust the direction of the water stream, and the DC motors are used for the robot's movement.

Component List

Arduino UNO

IR Sensors

Servo

5V Mini Water Pump

DC Motors and Wheels

L298N DC Motor Driver

7.4V Battery

Wiring Details

Arduino UNO

IR Sensors

Servo

5V Mini Water Pump

DC Motors and Wheels

L298N DC Motor Driver

7.4V Battery

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 IR sensors, motor driver, water pump, and servo motor in the setup() function. The loop() function continuously reads the IR sensor values to determine the robot's movement and activates the water pump when fire is detected. The functions moveForward(), turnLeft(), turnRight(), and stopRobot() control the robot's movement, while activateWaterPump() controls the water pump.