Arduino-Controlled Fire Fighting Robot with IR Sensors and Water Pump
View and Edit Project In Cirkit Designer
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
- Quantity: 3
- Description: Used to detect the presence of fire based on infrared radiation.
DC Motors
- Quantity: 4
- Description: Provide movement to the robot's wheels.
9V Battery
- Quantity: 1
- Description: Powers the circuit.
Arduino UNO
- Quantity: 1
- Description: The main microcontroller board that controls the robot's operations.
Servo Motor
- Quantity: 1
- Description: Adjusts the direction of the water pump nozzle.
L298N DC Motor Driver
- Quantity: 1
- Description: Controls the speed and direction of the DC motors.
5V Mini Water Pump
- Quantity: 1
- Description: Pumps water to extinguish the fire.
Wiring Details
IR Sensors
- VCC: Connected to the 5V output on the Arduino UNO.
- GND: Connected to the GND on the Arduino UNO.
- OUT: Each sensor's output is connected to a digital input pin on the Arduino UNO (D2, D3, D4).
DC Motors
- Pin 1 & Pin 2: Each pair of DC motors is connected to the L298N motor driver's output pins (OUT1/OUT2 and OUT3/OUT4).
9V Battery
- +: Connected to the 12V input on the L298N motor driver.
- -: Connected to the GND on the Arduino UNO and the L298N motor driver.
Arduino UNO
- 5V and GND: Provide power to the IR sensors and the servo motor.
- Digital Pins (D2-D13): Control the IR sensors, servo motor, water pump, and motor driver.
Servo Motor
- VCC: Connected to the 5V output on the Arduino UNO.
- GND: Connected to the GND on the Arduino UNO.
- PWM: Connected to digital pin D5 on the Arduino UNO.
L298N DC Motor Driver
- 5V: Connected to the Vin on the Arduino UNO.
- GND: Connected to the GND on the Arduino UNO.
- ENA/ENB: Connected to digital pins D11/D12 on the Arduino UNO.
- IN1-IN4: Connected to digital pins D6-D9 on the Arduino UNO.
5V Mini Water Pump
- Positive Pin: Connected to digital pin D13 on the Arduino UNO.
- Negative Pin: Connected to GND on the Arduino UNO.
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.