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

This circuit is designed for a 4-wheeled fire-fighting robot. It includes an array of sensors, actuators, and control electronics to navigate towards a fire and extinguish it. The core controller is an Arduino UNO, which interfaces with IR sensors to detect fire, controls DC motors for movement, operates a servo motor for directional control, and activates a water pump to put out the fire.

Component List

IR Sensors

DC Motors

9V Battery

Arduino UNO

Servo Motor

L298N DC Motor Driver

5V Mini Water Pump

Wiring Details

IR Sensors

DC Motors

9V Battery

Arduino UNO

Servo Motor

L298N DC Motor Driver

5V Mini Water Pump

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 autonomous operation of the fire-fighting robot. It initializes the hardware components, reads sensor data, and controls the actuators based on the sensor inputs. The robot's behavior is determined by the logic implemented in the loop function, which includes movement commands and water pump activation.