#include <DHT.h>
// Broches et capteurs
#define PIR_PIN 14 // Broche de sortie du capteur PIR
#define LDR_PIN 34 // Broche analogique pour le capteur de luminosité (LDR)
#define RED_PIN 21 // Broche pour la LED rouge
#define YELLOW_PIN 22 // Broche pour la LED jaune
#define WHITE_PIN 23 // Broche pour la LED blanche
#define DHT_PIN 4 // Broche pour le capteur DHT22
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// Fonction pour configurer les LEDs
void setLED(int red, int yellow, int white) {
digitalWrite(RED_PIN, red);
digitalWrite(YELLOW_PIN, yellow);
digitalWrite(WHITE_PIN, white);
}
void setup() {
// Initialisation des broches
pinMode(PIR_PIN, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(WHITE_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
// Initialisation du port série pour le débogage
Serial.begin(115200);
dht.begin();
}
void loop() {
// Lecture des capteurs
int pirState = digitalRead(PIR_PIN);
int ldrValue = analogRead(LDR_PIN);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Simulations pour la pression et la vitesse du vent
int pressure = random(1000, 1020);
int windSpeed = random(0, 50);
// Afficher les valeurs des capteurs dans le moniteur série
Serial.print("LDR: "); Serial.print(ldrValue);
Serial.print(" | Pressure: "); Serial.print(pressure);
Serial.print(" hPa | Wind Speed: "); Serial.print(windSpeed);
Serial.print(" km/h | Humidity: "); Serial.print(humidity);
Serial.print(" % | Temperature: "); Serial.println(temperature);
// Conditions pour le jour et la nuit
bool isNight = (ldrValue < 500);
// Conditions météorologiques
bool isFoggy = (humidity > 80 && temperature < 10);
bool isStormy = (windSpeed > 30 || pressure < 1005);
// Gestion des LEDs en fonction des conditions
if (isNight) {
if (pirState == HIGH) {
if (isFoggy) {
setLED(LOW, HIGH, LOW); // LED jaune pour brouillard (100%)
Serial.println("Nuit: Brouillard avec mouvement");
delay(2000);
} else if (isStormy) {
setLED(HIGH, LOW, LOW); // LED rouge pour tempête (100%)
Serial.println("Nuit: Tempête avec mouvement");
delay(2000);
} else {
setLED(LOW, LOW, HIGH); // LED blanche pour nuit normale (100%)
Serial.println("Nuit: Conditions normales avec mouvement");
delay(2000);
}
} else {
if (isFoggy) {
setLED(LOW, 13, LOW); // LED jaune pour brouillard (50%)
Serial.println("Nuit: Brouillard sans mouvement");
} else if (isStormy) {
setLED(13, LOW, LOW); // LED rouge pour tempête (50%)
Serial.println("Nuit: Tempête sans mouvement");
} else {
setLED(LOW, LOW, 13); // Pas de LED allumée pour nuit normale sans mouvement
Serial.println("Nuit: Conditions normales sans mouvement");
}
}
} else {
if (pirState == HIGH) {
if (isFoggy) {
setLED(LOW, HIGH, LOW); // LED jaune pour brouillard (100%)
Serial.println("Jour: Brouillard avec mouvement");
delay(2000);
} else if (isStormy) {
setLED(HIGH, LOW, LOW); // LED rouge pour tempête (100%)
Serial.println("Jour: Tempête avec mouvement");
delay(2000);
} else {
setLED(LOW, LOW, LOW); // LEDs éteintes pour jour normal
Serial.println("Jour: Conditions normales avec mouvement");
delay(2000);
}
} else {
if (isFoggy) {
setLED(LOW, 13, LOW); // LED jaune pour brouillard (50%)
Serial.println("Jour: Brouillard sans mouvement");
} else if (isStormy) {
setLED(13, LOW, LOW); // LED rouge pour tempête (50%)
Serial.println("Jour: Tempête sans mouvement");
} else {
setLED(LOW, LOW, LOW); // Pas de LED allumée pour jour normal sans mouvement
Serial.println("Jour: Conditions normales sans mouvement");
}
}
}
// Délai pour éviter les lectures trop rapides
delay(3000);
}