Bonjour
J'ai fait un montage pour surveiller le niveau d'eau dans un bac dans lequel se déverse une fuite de ma chaudière. Ca fonctionne bien. Il y a 2 LED, un capteur de niveau d'eau, un buzzer et un nano.
J'alimente le tout avec une batterie LiPo 7.4V.
Je pensais que ça durerait longtemps, au moins un mois, mais la batterie s'est déchargée en une nuit (elle n'était peut-être pas chargée à fond, je la recharge aujourd'hui pour retester). Normalement, pendant cette nuit, seule la LED verte s'est allumée (elle clignote toutes les 2 secondes), le niveau n'est pas monté assez haut pour déclencher le reste.
Mais comment faire pour que mon montage consomme le minimum ?
Voici le sketch : peut-on l'optimiser en consommation ?
//****************************************************
// Mesure analogique et digitale de l'humidité du sol
// Avec le module Humidité Sol
// TipTopboards.com
// 23 12 2013 demo_hsol
//****************************************************
// Brancher +V -> 5V et GND
// Sortie analogique du capteur -> A0 Arduino
// Sortie digitale du capteur -> pin 3 Arduino (avec seuil)
//On rajoute une LEd témoin sur pin 7
int PinAnalogiqueHumidite=0; //Broche Analogique de mesure d'humidité
int PinLed=7; //LED témoin de seuil de sécheresse
int hsol; //Humidite su sol, mesure analogique
int buzzer = 10;// Borne de sortie du buzzer
int ledV = 2; // Led Verte D2
void setup(){ // Initialisation
Serial.begin(9600); //Connection série à 9600 baud
pinMode(PinAnalogiqueHumidite, INPUT); //pin A0 en entrée analogique
pinMode(PinLed, OUTPUT); //LED témoin
pinMode(buzzer,OUTPUT);// Définir la sortie du buzzer
pinMode(ledV, OUTPUT);
digitalWrite(ledV, HIGH);
}
void loop() { //boucle principale
delay(2000);
hsol = 1024-analogRead(PinAnalogiqueHumidite); // Lit la tension analogique
int niveau = map(hsol,0,750,-70,100);
Serial.println(niveau); // afficher la mesure
while (niveau>50) {
digitalWrite(ledV, HIGH);
digitalWrite(PinLed, HIGH); // LED allumée
int freq = map(niveau,20,100,2200,3000);
tone(buzzer,freq);
delay(200);
noTone(buzzer);
hsol = 1024-analogRead(PinAnalogiqueHumidite); // Lit la tension analogique
niveau = map(hsol,0,750,-70,100);
Serial.println(niveau);
int delai = map(niveau,20,100,1000,100);
delay(delai); //delai entre 2 mesures 20ms}
}
digitalWrite(PinLed, LOW); // LED off
digitalWrite(ledV,!digitalRead(ledV));
}