Untitled

 avatar
unknown
plain_text
15 days ago
4.3 kB
3
Indexable
#include <SoftwareSerial.h>
#include <DHT.h>

// Pin Definitions
#define DHT_PIN 2
#define MQ2_PIN A0
#define KY026_PIN 3
#define RELAY_PIN 4
#define BUTTON_PIN 5

#define GREEN_LED 8     // SMD Strip 1 - Green
#define RED_LED 9       // SMD Strip 1 - Red
#define BLUE_LED 10     // SMD Strip 1 - Blue

#define GREEN_LED2 11   // SMD Strip 2 - Green
#define RED_LED2 12     // SMD Strip 2 - Red
#define BLUE_LED2 13    // SMD Strip 2 - Blue

#define DHT_TYPE DHT22

// SIM900 setup
SoftwareSerial sim900(6, 7);
char phoneNumber[] = "+639214928895";
DHT dht(DHT_PIN, DHT_TYPE);
bool alarmTriggered = false;

void setup() {
  Serial.begin(9600);
  sim900.begin(9600);
  dht.begin();

  pinMode(MQ2_PIN, INPUT);
  pinMode(KY026_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  // Initialize LED pins
  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  pinMode(GREEN_LED2, OUTPUT);
  pinMode(RED_LED2, OUTPUT);
  pinMode(BLUE_LED2, OUTPUT);

  turnOffLEDs();

  Serial.println("Waiting 10 seconds for SIM900A to connect...");
  delay(10000);

  if (sendATCommand("AT", "OK")) {
    Serial.println("GSM Initialized Successfully");
  } else {
    Serial.println("Failed to Initialize GSM");
  }

  sendATCommand("AT+CMGF=1", "OK");
  Serial.println("Fire Alarm System Ready");
}

void loop() {
  if (alarmTriggered) {
    if (digitalRead(BUTTON_PIN) == LOW) {
      Serial.println("Resetting system...");

      for (int i = 0; i < 3; i++) {
        lightAll(GREEN_LED);
        delay(500);
        lightAll(RED_LED);
        delay(500);
        lightAll(BLUE_LED);
        delay(500);
        turnOffLEDs();
      }

      digitalWrite(RELAY_PIN, LOW);
      turnOffLEDs();
      alarmTriggered = false;
      delay(1000);
    }
    return;
  }

  float temperature = dht.readTemperature();
  int smokeValue = analogRead(MQ2_PIN);
  int flameDetected = digitalRead(KY026_PIN);

  Serial.print("Temp: "); Serial.println(temperature);
  Serial.print("Smoke: "); Serial.println(smokeValue);
  Serial.print("Flame: "); Serial.println(flameDetected);

  if (temperature >= 60) {
    triggerAlarm(GREEN_LED, "Temperature Triggered");
  } else if (smokeValue >= 700) {
    triggerAlarm(RED_LED, "Smoke Triggered");
  } else if (flameDetected == HIGH) {
    triggerAlarm(BLUE_LED, "Flame Triggered");
  }

  delay(2000);
}

void triggerAlarm(int ledPin, String message) {
  Serial.println("Alarm Triggered!");
  digitalWrite(RELAY_PIN, HIGH);
  turnOffLEDs();
  lightAll(ledPin);

  String fullMsg = message + " - Temp: " + String(dht.readTemperature()) +
                   ", Smoke: " + String(analogRead(MQ2_PIN)) +
                   ", Flame: " + (digitalRead(KY026_PIN) == HIGH ? "Yes" : "No");

  sendSMS(fullMsg);
  delay(5000);
  makeCall();
  alarmTriggered = true;
}

void lightAll(int baseLedPin) {
  digitalWrite(baseLedPin, HIGH);
  if (baseLedPin == GREEN_LED) {
    digitalWrite(GREEN_LED2, HIGH);
  } else if (baseLedPin == RED_LED) {
    digitalWrite(RED_LED2, HIGH);
  } else if (baseLedPin == BLUE_LED) {
    digitalWrite(BLUE_LED2, HIGH);
  }
}

void turnOffLEDs() {
  digitalWrite(RED_LED, LOW);
  digitalWrite(GREEN_LED, LOW);
  digitalWrite(BLUE_LED, LOW);
  digitalWrite(RED_LED2, LOW);
  digitalWrite(GREEN_LED2, LOW);
  digitalWrite(BLUE_LED2, LOW);
}

void sendSMS(String message) {
  Serial.println("Sending SMS...");
  sim900.println("AT+CMGS=\"" + String(phoneNumber) + "\"");
  delay(1000);
  sim900.print(message);
  delay(500);
  sim900.write(26);  // CTRL+Z
  delay(3000);
  Serial.println("SMS Sent");
}

void makeCall() {
  Serial.println("Calling " + String(phoneNumber));
  sim900.println("ATD" + String(phoneNumber) + ";");
  delay(20000);
  sim900.println("ATH");
  delay(2000);
  Serial.println("Call Ended");
}

bool sendATCommand(String cmd, String expectedResponse) {
  sim900.println(cmd);
  delay(1000);
  while (sim900.available()) {
    String response = sim900.readString();
    Serial.println(response);
    if (response.indexOf(expectedResponse) != -1) return true;
  }
  return false;
}
Editor is loading...
Leave a Comment