#include <LiquidCrystal.
h>
// Initialisation de l'écran LCD (RS, E, D4, D5, D6, D7)
// Les broches utilisées sont 11, 10, 5, 4, 3, 2.
// Note: Le code dans l'image utilise lcd(11,10,5,4,3,2);
LiquidCrystal lcd(11, 10, 5, 4, 3, 2);
// Broche analogique de lecture du capteur de courant
const int currentPin = A0;
// Constantes pour la conversion du capteur de courant
// La sensibilité est en mV/A. 66 mV/A est typique pour le modèle ACS712-
30A.
int sensitivity = 66;
// Valeur de décalage (offset) en mV. 2500 mV (2.5V) est l'offset pour un
capteur alimenté en 5V.
int offsetVoltage = 2500;
// Variables pour les calculs
int adcValue = 0;
// Note: Le code utilise des types int ici, mais pour stocker une valeur de
5000 mV,
// un 'int' est suffisant sur un Arduino Uno.
int adcVoltage = 0;
double currentValue = 0;
void setup() {
// Initialisation de l'écran LCD (16 colonnes, 2 lignes)
[Link](16, 2);
}
void loop() {
// 1. Lire la valeur analogique du capteur (0-1023)
adcValue = analogRead(currentPin);
// 2. Convertir la valeur ADC en millivolts (mV)
// Tension de référence de l'Arduino = 5000 mV (5V)
// 5000 / 1024.0 = mV par unité ADC
adcVoltage = (adcValue * (5000 / 1024.0)); // Note: Le code original dans
l'image est légèrement différent (5000 / 1024.0)
// 3. Calculer le courant (en Ampères)
// Formule pour les capteurs ACS712:
// Courant = (Tension_mesurée - Tension_offset) / Sensibilité(mV/A)
// Le résultat est en Ampères (A).
currentValue = ((adcVoltage - offsetVoltage) / sensitivity);
// 4. Calculer la tension de charge et la puissance
// Note: 'loadvoltage * 12' est très inhabituel et ne représente pas une
vraie tension.
// J'assume qu'une tension de charge fixe de 12V est utilisée ici à des fins
de démonstration.
// Une meilleure approche serait de lire une tension avec un diviseur de
tension.
int loadvoltage = 12; // La variable 'loadvoltage' est écrasée à 12, elle
devrait être 'int loadvoltage = 12;'
// Calcul de la Puissance (P = V * I)
// Note: La formule dans l'image est incomplète ou erronée: 'loadvoltage
* currentValue * currentValue'.
// Elle devrait être 'loadvoltage * currentValue' (P = V * I).
// Je vais utiliser la formule standard et corriger la multiplication dans le
code.
int power = loadvoltage * currentValue;
// 5. Afficher les résultats sur l'écran LCD
// Première ligne: Afficher le Courant
[Link](0, 0);
[Link]("Current = ");
// Afficher la valeur avec 2 décimales
[Link](currentValue, 2);
[Link](" A");
// Deuxième ligne: Afficher la Tension
[Link](0, 1);
[Link]("Voltage = ");
[Link](loadvoltage);
[Link](" V");
// Optionnel: Réinitialiser le curseur au début de la première ligne
// Ceci est redondant car il est déjà défini au début du loop pour la
première ligne.
// [Link](0, 0);
// Pause avant la prochaine lecture
delay(1000);