#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Définition des broches
#define DHTPIN 4 // Broche du DHT22
#define DHTTYPE DHT22
#define GAS_SENSOR_PIN 34 // Capteur de gaz (analogique)
#define FLAME_SENSOR_PIN 35 // Capteur de flamme (analogique)
#define BUZZER_PIN 19
#define RELAY_PIN 27
#define GREEN_LED_PIN 2
#define RED_LED_PIN 15
// Initialisation du capteur DHT
DHT dht(DHTPIN, DHTTYPE);
// Seuils de déclenchement
const int gasThreshold = 880;
const float tempThreshold = 30;
const float humidityThreshold = 20;
const int flameThreshold = 400; // Ajuste ce seuil selon ton capteur de flamme
// Variables de temps
unsigned long lastSensorRead = 0;
const unsigned long sensorInterval = 1000;
void setup() {
Serial.begin(115200);
// Initialisation de l'afficheur LCD
lcd.init();
lcd.backlight();
lcd.setCursor(6, 0);
lcd.print("BIENVENUE");
lcd.setCursor(0, 1);
lcd.print("SYSTEME DE DETECTION");
lcd.setCursor(6, 2);
lcd.print("D'INCENDIE");
delay(3000);
lcd.clear();
// Initialisation des broches
pinMode(GAS_SENSOR_PIN, INPUT);
pinMode(FLAME_SENSOR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
dht.begin();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - lastSensorRead >= sensorInterval) {
lastSensorRead = currentMillis;
// Lecture des capteurs
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int gasValue = analogRead(GAS_SENSOR_PIN);
int flameValue = analogRead(FLAME_SENSOR_PIN); // Lecture analogique du capteur de flamme
// Vérification des lectures DHT
if (isnan(temp) || isnan(hum)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erreur lecture DHT");
return; // Si erreur DHT, on arrête ici la boucle
}
// 🔥 Si une flamme est détectée (en fonction du seuil)
if (flameValue < flameThreshold) {
digitalWrite(RED_LED_PIN, HIGH); // LED rouge allumée
tone(BUZZER_PIN, 1000); // Buzzer ON (1000Hz)
digitalWrite(GREEN_LED_PIN, LOW); // LED verte éteinte
digitalWrite(RELAY_PIN, HIGH); // Active le relais
}
// ⚠️ Si température, gaz ou humidité dépassent le seuil
else if (temp > tempThreshold || gasValue > gasThreshold || hum < humidityThreshold) {
digitalWrite(RED_LED_PIN, HIGH); // LED rouge allumée
tone(BUZZER_PIN, 800); // Buzzer ON (800Hz)
digitalWrite(GREEN_LED_PIN, LOW); // LED verte éteinte
digitalWrite(RELAY_PIN, HIGH); // Active le relais
}
// ✅ Aucun problème détecté
else {
digitalWrite(RED_LED_PIN, LOW); // LED rouge éteinte
noTone(BUZZER_PIN); // Buzzer OFF
digitalWrite(GREEN_LED_PIN, HIGH); // LED verte allumée
digitalWrite(RELAY_PIN, LOW); // Relais désactivé
}
// Affichage LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TEMP: ");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("HUM: ");
lcd.print(hum);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("GAZ: ");
lcd.print(gasValue);
lcd.setCursor(0, 3);
lcd.print("FLAMME: ");
lcd.print(flameValue < flameThreshold ? "OUI" : "NON"); // Affiche "OUI" si flamme détectée
}
}