/*
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);
}
}
|