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

FINAL PROGRAMMING

Uploaded by

abhijt Maitra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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
We take content rights seriously. If you suspect this is your content, claim it here.
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