// Définir le numéro de la broche où est connectée la LED
const int ledPin = 13; // Sur Arduino Uno, la LED intégrée est sur la broche
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <DHT.h>
#include <DHT_U.h>
// Définir le type de capteur et la broche DATA
#define DHTPIN 2 // La broche DATA est connectée à D2
#define DHTTYPE DHT11 // Utiliser DHT11 (remplacez par DHT22 si nécessaire)
// Initialisation du capteur
DHT dht(DHTPIN, DHTTYPE);
// Définir les broches du capteur HC-SR04
const int trigPin = 9; // Broche Trig
const int echoPin = 10; // Broche Echo
// Définir la hauteur totale du réservoir (en cm)
const float hauteurReservoir = 100.0; // Ajustez selon votre réservoir
// Initialisation de l'écran LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // Adresse I2C (0x27 ou 0x3F), LCD 20x4
void setup() {
pinMode(ledPin, OUTPUT); // Configurer la broche comme sortie
digitalWrite(ledPin, LOW); // Allumer la LED
Serial.begin(9600); // Initialiser la communication série
dht.begin(); // Initialiser le capteur DHT
Serial.println("DHT11 : Mesure de température et d'humidité et niveau d'eau ");
randomSeed(analogRead(0)); // Initialiser le générateur aléatoire avec du bruit
pinMode(trigPin, OUTPUT); // Configurer Trig comme sortie
pinMode(echoPin, INPUT); // Configurer Echo comme entrée
// Initialiser l'écran LCD
lcd.init();
lcd.backlight(); // Allumer le rétroéclairage
lcd.setCursor(0, 0);
lcd.print("DHT11 : Lecture");
}
void loop() {
// put your main code here, to run repeatedly:
// Lire l'humidité et la température
float humidity = dht.readHumidity();
float temperature = (dht.readTemperature()+random(5, 40));
// Vérifier si les lectures sont valides
if (isnan(humidity) || isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("Erreur capteur !");
delay(2000);
return;
}
// Envoyer une impulsion ultrasonique
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lire le temps de retour de l'impulsion
long duration = pulseIn(echoPin, HIGH);
// Calculer la distance en cm
//float distance = (duration * 0.034) / 2;
float distance = random(10, 101); // Génère une distance aléatoire entre 10 et 100 cm
// Calculer le niveau d'eau
float niveauEau = hauteurReservoir - distance;
// Afficher la température , l'humidité et niveau d'eau sur l'écran LCD
lcd.clear();
lcd.setCursor(0, 0 );// Positionner le curseur (colonne 0, ligne 0)
lcd.print("Temperature: ");
lcd.print(temperature);
lcd.print(" C");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C || ");
lcd.setCursor(0, 1);
lcd.print("Humidite: ");
lcd.print(humidity);
lcd.print(" %");
Serial.print("Humidite: ");
Serial.print(humidity);
Serial.print(" % || ");
lcd.setCursor(0, 2);
lcd.print("Niveau : ");
lcd.print(niveauEau);
lcd.print(" cm");
Serial.print("Niveau d'eau: ");
Serial.print(niveauEau);
Serial.println(" cm ");
if (niveauEau <= 10 || temperature >= 30) {
Serial.println("Niveau d'eau Bas ou temperature élévée !");
digitalWrite(ledPin, HIGH);
lcd.setCursor(0, 3);
lcd.print("Etat : ");
lcd.print(" Anormal ! ");
}
else {
digitalWrite(ledPin, LOW);
lcd.setCursor(0, 3);
lcd.print("Etat : ");
lcd.print(" Normal :-) ");
}
delay(5000); // Mise à jour toutes les 3 secondes
}