Untitled
unknown
plain_text
8 months ago
4.3 kB
6
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