#include "DHTesp.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int DHT_PIN = 27;
const int LDR_PIN = 34; // Broche analogique pour le LDR
const int PIR_PIN = 26; // Broche pour le capteur PIR
const int TRIG_PIN = 25; // Broche TRIG du HC-SR04
const int ECHO_PIN = 33; // Broche ECHO du HC-SR04
int buzzerPin = 5;
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(buzzerPin, OUTPUT);
pinMode(PIR_PIN, INPUT); // Configurer le PIR comme entrée
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.println("System Initialized!");
}
void loop() {
// Lecture des données du capteur DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Lecture des données du capteur de luminosité (LDR)
int ldrValue = analogRead(LDR_PIN);
float brightness = map(ldrValue, 0, 4095, 0, 100); // Conversion en pourcentage
// Lecture de l'état du capteur PIR
int pirState = digitalRead(PIR_PIN);
// Mesure de la distance avec HC-SR04
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2; // Calculer la distance en cm
// Affichage sur le moniteur série
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Luminosity: " + String(brightness, 1) + "%");
Serial.println("Distance: " + String(distance, 1) + " cm");
if (pirState == HIGH) {
Serial.println("Mouvement détecté !");
} else {
Serial.println("Aucun mouvement.");
}
Serial.println("---");
// Conditions pour activer le buzzer
if (data.temperature > 8 || data.temperature < 3 ||
data.humidity > 90 || data.humidity < 85 ||
pirState == HIGH || distance < 10) {
Serial.println("Conditions hors limites !");
tone(buzzerPin, 1000); // Active le buzzer avec une fréquence de 1000 Hz
delay(500);
noTone(buzzerPin); // Arrête le buzzer après une courte durée
} else {
Serial.println("Conditions normales.");
noTone(buzzerPin); // Désactive le buzzer
}
// Affichage des données sur l'écran LCD
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + (char)223 + "C");
lcd.setCursor(0, 1);
lcd.print("Humidity: " + String(data.humidity, 1) + "%");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luminosity:");
lcd.setCursor(0, 1);
lcd.print(String(brightness, 1) + "%");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance:");
lcd.setCursor(0, 1);
lcd.print(String(distance, 1) + " cm");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
if (pirState == HIGH) {
lcd.print("Mouvement: Oui");
} else {
lcd.print("Mouvement: Non");
}
delay(2000);
lcd.clear();
}