#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Paramètres du capteur DHT22
#define DHTPIN 15 // Broche à laquelle le capteur DHT22 est connecté
#define DHTTYPE DHT22 // Type de capteur
DHT dht(DHTPIN, DHTTYPE);
// Paramètres de l'écran LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C de l'écran LCD (0x27 est une adresse courante, peut varier)
// Broche du potentiomètre
#define POT_PIN 34
unsigned long previousMillis = 0; // Temps écoulé depuis le dernier calcul
unsigned long startMillis = 0; // Temps de démarrage du compteur
const long interval = 1000; // Intervalle de temps pour le calcul (en millisecondes)
float voltage; // Variable pour stocker la tension simulée
float current; // Variable pour stocker le courant simulé
float power; // Variable pour stocker la puissance instantanée
float energy = 0.0; // Variable pour stocker l'énergie consommée
const float resistance = 1000.0; // Valeur de la résistance en ohms (1k ohms)
void setup() {
lcd.begin(16, 2); // Initialisation de l'écran LCD 16x2
lcd.init();
lcd.backlight();
Serial.begin(115200); // Initialisation de la communication série
startMillis = millis(); // Enregistrer le temps de démarrage
dht.begin(); // Initialisation du capteur DHT22
}
void loop() {
unsigned long currentMillis = millis(); // Temps actuel
float timeDiff = (currentMillis - previousMillis) / 1000.0; // Temps écoulé en secondes depuis le dernier calcul
float elapsedTime = (currentMillis - startMillis) / 1000.0; // Temps total écoulé en secondes depuis le début
if (timeDiff >= interval / 1000.0) {
// Lecture de la valeur du potentiomètre pour simuler la tension
int potValue = analogRead(POT_PIN);
voltage = potValue * (3.3 / 4095.0); // Lecture de la tension simulée
current = voltage / resistance; // Calcul du courant simulé (Ohm's Law)
// Débogage : Afficher les valeurs lues
Serial.print("Valeur potentiomètre : ");
Serial.println(potValue);
Serial.print("Tension : ");
Serial.print(voltage);
Serial.println(" V");
Serial.print("Courant : ");
Serial.print(current);
Serial.println(" A");
// Calcul de la puissance instantanée
power = voltage * current;
// Calcul de l'énergie consommée
energy += power * (timeDiff / 3600.0); // Convertir le temps en heures pour l'énergie en watt-heure
// Lire les valeurs du capteur DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Vérifier si les lectures ont échoué
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Échec de la lecture du capteur DHT22 !");
return;
}
// Affichage des résultats dans le moniteur série
Serial.print("Puissance instantanee : ");
Serial.print(power);
Serial.println(" W");
Serial.print("Energie consommee : ");
Serial.print(energy);
Serial.println(" Wh");
Serial.print("Temps ecoule : ");
Serial.print(elapsedTime);
Serial.println(" s");
Serial.print("Temperature : ");
Serial.print(temperature);
Serial.println(" C");
Serial.print("Humidite : ");
Serial.print(humidity);
Serial.println(" %");
Serial.println("");
// Affichage des résultats sur l'écran LCD
lcd.setCursor(0, 0);
lcd.print("Puiss: ");
lcd.print(power);
lcd.print("W ");
lcd.setCursor(0, 1);
lcd.print("Energie: ");
lcd.print(energy);
lcd.print("Wh");
// Mise à jour du temps précédent pour le prochain intervalle
previousMillis = currentMillis;
}
delay(100); // Délai pour la stabilité de la boucle
}