#include <LiquidCrystal.h>
#include <DHT.h>
// LCD pins <--> Arduino pins
const int RS = 12, EN = 13, D4 = 5, D5 = 4, D6 = 3, D7 = 2;
#define DHTPIN 7 // Pin du capteur DHT11
#define DHTTYPE DHT22 // Type du capteur DHT11
#define LDRPIN A0 // Pin du capteur LDR
//#define MQ2PIN A1 // Pin du capteur de gaz MQ2
#define BUZZER_PIN 9 // Pin du buzzer
#define LED_PIN 8
const int TEMP_THRESHOLD = 35; // Seuil de température en °C
//const int GAS_THRESHOLD = 400; // Seuil du capteur de gaz
const int LUMINOSITY_THRESHOLD = 500; // Seuil de luminosité
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
dht.begin();
lcd.begin(16, 2); // set up number of columns and rows
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
lcd.print("Systeme de");
lcd.setCursor(0, 1);
lcd.print("Surveillance");
delay(2000); // Pause de démarrage
}
void loop()
{
// Lecture des capteurs
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrValue = analogRead(LDRPIN);
//int gasValue = analogRead(MQ2PIN);
// Vérifier si les lectures sont valides
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Erreur de lecture du DHT11 !");
return;
}
// Afficher les données dans le moniteur série
Serial.print("Température: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidité: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Luminosité: ");
Serial.print(ldrValue);
Serial.println();
//Serial.print("Gaz: ");
//Serial.println(gasValue);
// Afficher les données sur l'écran LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(int(temperature));
lcd.print("C Hum:");
lcd.print(int(humidity));
lcd.setCursor(0, 1);
lcd.print("L:");
lcd.print(ldrValue);
//lcd.print(" G:");
//lcd.print(gasValue);
delay(2000);
// Gestion des alertes
bool alert = false;
if (temperature > TEMP_THRESHOLD) {
alert = true;
Serial.println("Alerte: Température élevée !");
}
//if (gasValue > GAS_THRESHOLD) {
// alert = true;
// Serial.println("Alerte: Niveau de gaz élevé !");
//}
// Supposons que la luminosité doit être supérieure au seuil pendant la journée
if (ldrValue < LUMINOSITY_THRESHOLD) {
if (isDaytime()) {
alert = true;
Serial.println("Alerte: Luminosité faible pendant la journée !");
}
}
// Activer l'alarme si une condition d'alerte est vraie
if (alert) {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
}
delay(1000); // Délai pour éviter la surcharge de la boucle
}
bool isDaytime() {
// Exemple simple : On considère la journée si l'ldrValue est plus élevé que 300
// Cette logique peut être ajustée en fonction des conditions réelles
int ldrValue = analogRead(LDRPIN);
return ldrValue > 300; // Ajuster cette valeur pour déterminer le jour/nuit
}