0% found this document useful (0 votes)
2 views

FINAL PROGRAMMING

Uploaded by

abhijt Maitra
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

FINAL PROGRAMMING

Uploaded by

abhijt Maitra
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

IGNIS

FINAL PROGRAMMING
#include <Servo.h>

// Flame sensor pins


#define FLAME_CENTER A0
#define FLAME_LEFT A1
#define FLAME_RIGHT A2

// Motor control pins


#define LM_FORWARD 2
#define LM_BACKWARD 3
#define RM_FORWARD 4
#define RM_BACKWARD 5

// Servo and pump control pins


#define PUMP_PIN 6
#define SERVO_PIN 11

// Ultrasonic sensor pins


#define TRIG_PIN 8
#define ECHO_PIN 9

// Constants
const int SERVO_CENTER = 90;
const int SERVO_LEFT = 45;
const int SERVO_RIGHT = 135;
const int OBSTACLE_DISTANCE = 20; // cm
const int FLAME_THRESHOLD = 500; // Flame intensity threshold

Servo myservo;
bool isExtinguishing = false;

void setup() {
// Motor pins
pinMode(LM_FORWARD, OUTPUT);
pinMode(LM_BACKWARD, OUTPUT);
pinMode(RM_FORWARD, OUTPUT);
pinMode(RM_BACKWARD, OUTPUT);

// Flame sensor pins


pinMode(FLAME_CENTER, INPUT);
pinMode(FLAME_LEFT, INPUT);
pinMode(FLAME_RIGHT, INPUT);

// Other pins
pinMode(PUMP_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);

// Initialize components
myservo.attach(SERVO_PIN);
myservo.write(SERVO_CENTER);

Serial.begin(9600);
Serial.println("Firefighting robot initialized and ready!");
}

void loop() {
1
IGNIS
if (isObstacleAhead()) {
handleObstacle();
return;
}

if (detectFlame()) {
extinguishFire();
} else {
moveForward();
}
}

// Flame detection
bool detectFlame() {
int center = analogRead(FLAME_CENTER);
int left = analogRead(FLAME_LEFT);
int right = analogRead(FLAME_RIGHT);

Serial.print("Flame Readings - Center: ");


Serial.print(center);
Serial.print(", Left: ");
Serial.print(left);
Serial.print(", Right: ");
Serial.println(right);

return (center < FLAME_THRESHOLD || left < FLAME_THRESHOLD || right <


FLAME_THRESHOLD);
}

// Extinguish fire with improvements


void extinguishFire() {
if (isExtinguishing) return;

isExtinguishing = true;
stopMovement();
Serial.println("Fire detected! Activating extinguisher...");

unsigned long pumpStartTime = millis(); // Track time for water dispensing

while (millis() - pumpStartTime < 5000) { // Keep spraying water for 5 seconds
digitalWrite(PUMP_PIN, HIGH);

// Sweeping motion for the servo


for (int angle = SERVO_LEFT; angle <= SERVO_RIGHT; angle += 5) {
myservo.write(angle);
delay(50); // Small delay for smooth movement
}
for (int angle = SERVO_RIGHT; angle >= SERVO_LEFT; angle -= 5) {
myservo.write(angle);
delay(50);
}

// Re-check flame during sweeping


if (!detectFlame()) break; // Stop if flame is extinguished
}

digitalWrite(PUMP_PIN, LOW);
myservo.write(SERVO_CENTER); // Reset servo to center position
Serial.println("Fire extinguished. Re-checking for flame...");
2
IGNIS
delay(2000); // Re-check flame after 2 seconds
if (detectFlame()) {
Serial.println("Flame reignited! Re-engaging extinguisher...");
extinguishFire();
}

isExtinguishing = false;
}

// Movement functions
void moveForward() {
setMotors(HIGH, LOW, HIGH, LOW);
}

void moveBackward() {
setMotors(LOW, HIGH, LOW, HIGH);
}

void turnLeft() {
setMotors(LOW, HIGH, HIGH, LOW);
}

void turnRight() {
setMotors(HIGH, LOW, LOW, HIGH);
}

void stopMovement() {
setMotors(LOW, LOW, LOW, LOW);
}

// Set motor states


void setMotors(int lmForward, int lmBackward, int rmForward, int rmBackward) {
digitalWrite(LM_FORWARD, lmForward);
digitalWrite(LM_BACKWARD, lmBackward);
digitalWrite(RM_FORWARD, rmForward);
digitalWrite(RM_BACKWARD, rmBackward);
}

// Obstacle detection
bool isObstacleAhead() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);

long duration = pulseIn(ECHO_PIN, HIGH);


int distance = duration * 0.034 / 2;

return distance < OBSTACLE_DISTANCE;


}

// Handle obstacles
void handleObstacle() {
stopMovement();
Serial.println("Obstacle detected. Navigating...");

turnLeft();
3
IGNIS
delay(700); // Turn left
if (isObstacleAhead()) {
turnRight();
delay(1400); // Turn right longer if left is blocked
}
moveForward();
}

You might also like