/* Sketch surveillance tension batterie 12 volts pour ATtiny85 ou Digispark Surveille la tension d'une batterie plomb 12 volts. On utilise un pont diviseur par 4 pour lire cette tension. De façon a ce que la tension ne dépasse pas 5 volts sur l'entrée analogique. La valeur lue est lissée pour en faire une moyenne glissante Si la tension de la batterie passe en dessous de 12 volts, on allume une led clignotante. */ // Définition du nombre d'échantillons // pour le calcul de la moyenne glissante const int nEchantillons = 20; float echantillon[nEchantillons]; // un tableau pour stocker les échantillons lus int indice = 0; // l'indice de l'échantillon courant float total = 0; // la somme des échantillons mémorisés float moyenne = 0; // la moyenne des échantillons mémorisés float seuil = 3.00; // Seuil tension bas à ajuster selon votre batterie int inputPin = 0; // pin de raccordement de la lecture de tension (pont diviseur) const int ledPin = 3; // pin de raccordement de la LED void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // On remplit le tableau d'échantillons avec des 0 for (int i = 0; i < nEchantillons; i++) { echantillon[i] = 0; } } void loop() { // Soustraction de l'echantillon précédent total = total - echantillon[indice]; // Lecture du capteur echantillon[indice] = analogRead(inputPin); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V): echantillon[indice] = echantillon[indice] * (5.0 / 1023.0); // Ajout du dernier echantillon total = total + echantillon[indice]; // Incrémentation de l'indice indice++; // si on est à la fin du tableau ... if (indice >= nEchantillons) { // ...retour au début indice = 0; } // calcul de la moyenne moyenne = total / nEchantillons; // Si la moyenne de la lecture analogique de tension passe en dessous du seuil prédéfini on fait clignoter la LED: if (moyenne < seuil) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } else { digitalWrite(ledPin, LOW); } } |