#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Définition des broches des LEDs
const int blueLedPin = 13;
const int greenLedPin = 10;
const int redLedPin = 7;
// Définition du capteur analogique de température (Thermistance)
const int tempSensor = A0;
const int BETA = 3950; // Coefficient BETA pour la thermistance
// Définition du capteur DHT22
#define DHTPIN 2 // Broche de connexion du DHT22
#define DHTTYPE DHT22 // Type du capteur
DHT dht(DHTPIN, DHTTYPE);
// Création de l'objet LCD (20 colonnes, 4 lignes, adresse I2C 0x27)
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
// Initialisation des LEDs
pinMode(blueLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
// Initialisation du capteur DHT22
dht.begin();
// Initialisation du LCD
lcd.init();
lcd.backlight();
}
void loop()
{
// Lecture de la température via le capteur analogique
int val = analogRead(tempSensor);
float tempAnalog = 1 / (log(1 / (1023.0 / val - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Lecture des valeurs du capteur DHT22
float tempDHT = dht.readTemperature(); // Température en °C
float humidity = dht.readHumidity(); // Humidité en %
// Vérification des erreurs de lecture du DHT22
if (isnan(tempDHT) || isnan(humidity)) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Erreur: DHT22!");
delay(2000);
return;
}
// Effacer l'écran avant d'afficher les nouvelles valeurs
lcd.clear();
// Ligne 1 : Température T1 (Thermistance)
lcd.setCursor(0, 0);
lcd.print("T1 Analog: ");
lcd.print(tempAnalog, 1);
lcd.print((char)223); // Symbole °C
// Ligne 2 : Température T2 (DHT22)
lcd.setCursor(0, 1);
lcd.print("T2 DHT22 : ");
lcd.print(tempDHT, 1);
lcd.print((char)223); // Symbole °C
// Ligne 3 : Humidité
lcd.setCursor(0, 2);
lcd.print("Humidite : ");
lcd.print(humidity, 1);
lcd.print("%");
// Ligne 4 : Affichage de l'état de la température
lcd.setCursor(0, 3);
lcd.print("Etat : ");
// Gestion des LEDs en fonction de la température DHT22
if (tempDHT > 25)
{
lcd.print("Chaud");
digitalWrite(redLedPin, HIGH);
digitalWrite(blueLedPin, LOW);
digitalWrite(greenLedPin, LOW);
}
else if (tempDHT <= 18)
{
lcd.print("Froid");
digitalWrite(redLedPin, LOW);
digitalWrite(blueLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
}
else
{
lcd.print("Normal");
digitalWrite(redLedPin, LOW);
digitalWrite(blueLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
}
// Pause avant la prochaine lecture
delay(2000);
}