Arduino UNO Based Fire-Fighting Robot with IR Sensors and Servo-Controlled Water Pump
View and Edit Project In Cirkit Designer
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
- Quantity: 3
- Description: Used to detect the presence of fire by sensing infrared (IR) light.
Arduino UNO
- Quantity: 1
- Description: Microcontroller board based on the ATmega328P, used as the main controller for the robot.
Servo Motor
- Quantity: 1
- Description: Rotates to specific angles to position the water pump nozzle.
5V Mini Water Pump
- Quantity: 1
- Description: Pumps water to extinguish the fire when activated.
Motors and Wheels
- Quantity: 4
- Description: Provides mobility to the robot, allowing it to move towards the fire.
7.4V Battery
- Quantity: 1
- Description: Power source for the motors and motor driver.
L298N DC Motor Driver
- Quantity: 1
- Description: Controls the speed and direction of the four DC motors.
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, and D4).
Arduino UNO
- 5V & GND: Power distribution to IR sensors and servo motor.
- Vin & GND: Power connection to the L298N motor driver.
- Digital Pins (D2-D13): Control signals for 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.
5V Mini Water Pump
- Positive Pin: Connected to digital pin D13 on the Arduino UNO.
- Negative Pin: Connected to GND on the Arduino UNO.
Motors and Wheels
- VCC & GND: Connected to the output channels of the L298N motor driver (OUT1-OUT4).
7.4V Battery
- +: Connected to the 12V input on the L298N motor driver.
- -: Connected to the GND on the L298N motor driver.
L298N DC Motor Driver
- 5V: Connected to the Vin on the Arduino UNO.
- GND: Shared ground with the Arduino UNO and 7.4V battery.
- ENA & ENB: Connected to digital pins D11 and D12 on the Arduino UNO.
- IN1-IN4: Connected to digital pins D6-D9 on the Arduino UNO.
- OUT1-OUT4: Connected to the motors and wheels.
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.