#include <DHT.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h> // Utilisez LiquidCrystal_I2C pour l'interface I2C
#include <Wire.h> // Ajoutez cette ligne pour la communication I2C
#define brocheDeBranchementDHT 6 // La ligne de communication du DHT22 sera donc branchée sur la pin D6 de l'Arduino
#define typeDeDHT DHT22 // Ici, le type de DHT utilisé est un DHT22 (que vous pouvez changer en DHT11, DHT21, ou autre, le cas échéant)
#define pinDuServo 3
// Définition de l'adresse I2C de l'écran LCD
#define LCD_ADDR 0x27 // Adaptez l'adresse en fonction de votre écran LCD
// Instanciation de la librairie DHT
DHT dht(brocheDeBranchementDHT, typeDeDHT);
Servo arm;
// Initialisation de l'écran LCD en mode I2C
LiquidCrystal_I2C lcd(LCD_ADDR, 16, 2); // 16 colonnes, 2 lignes
// ========================
// Initialisation programme
// ========================
void setup () {
// Initialisation de la liaison série (pour retourner les infos au moniteur série de l'ordi)
Serial.begin(9600);
Serial.println("Programme de test du DHT22");
Serial.println("==========================");
Serial.println();
// Initialisation du DHT22;
dht.begin();
// Initialisation du servo moteur
arm.attach(pinDuServo);
// Initialisation de l'écran LCD
lcd.init();
lcd.backlight();
}
// =================
// Boucle principale
// =================
void loop () {
// Lecture des données
float tauxHumidite = 70.00; // Lecture du taux d'humidité (en %)
float temperatureEnCelsius = 15.00; // Lecture de la température, exprimée en degrés Celsius
// Vérification si données bien reçues
if (isnan(tauxHumidite) || isnan(temperatureEnCelsius)) {
Serial.println("Aucune valeur retournée par le DHT22. Est-il bien branché ?");
delay(2000);
return; // Si aucune valeur n'a été reçue par l'Arduino, on attend 2 secondes, puis on redémarre la fonction loop()
}
if ((temperatureEnCelsius < 14.00 || temperatureEnCelsius >= 18.00) || (tauxHumidite < 65.00 || tauxHumidite >= 80.00)) {
// Allumer la LED
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
lcd.setCursor((7 - 6) / 1, 3); // Centrer le curseur sur la deuxième ligne
lcd.print("ALARM");
// Positionner le servo moteur
arm.write(0);
delay(500);
// Éteindre la LED
digitalWrite(LED_BUILTIN, LOW);
// Positionner le servo moteur
arm.write(180); // Ajustez la position du servo en fonction de vos besoins
delay((500));
} else {
// Éteindre la LED
digitalWrite(LED_BUILTIN, LOW);
// Remettre le servo moteur à sa position neutre
arm.write(180); // Mettre le servo moteur en position neutre
delay(100);
}
// Calcul de la température ressentie
float temperatureRessentieEnCelsius = dht.computeHeatIndex(temperatureEnCelsius, tauxHumidite, false); // Le "false" est là pour dire qu'on travaille en °C, et non en °F
// Affichage des valeurs
Serial.print("Humidité = "); Serial.print(tauxHumidite); Serial.println(" %");
Serial.print("Température = "); Serial.print(temperatureEnCelsius); Serial.println(" °C");
Serial.print("Température ressentie = "); Serial.print(temperatureRessentieEnCelsius); Serial.println(" °C");
Serial.println("By Abdel_Lfrah");
Serial.println();
// Affichage des valeurs sur l'écran LCD
lcd.setCursor((16 - 15) / 2, 0); // Centrer le curseur sur la deuxième ligne
lcd.print("Humidite = ");
lcd.print(tauxHumidite);
lcd.print("%");
lcd.setCursor((20 - 20) / 2, 1); // Centrer le curseur sur la troisième ligne
lcd.print("Temperature = ");
lcd.print(temperatureEnCelsius);
lcd.print("C");
// Temporisation de 2 secondes (pour rappel : il ne faut pas essayer de faire plus d'1 lecture toutes les 2 secondes, avec le DHT22, selon le fabricant)
delay(1000);
}