start:projet:arduino:testeur_batterie

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
start:projet:arduino:testeur_batterie [2014/11/12 08:37] – [III - Codage] jcanostart:projet:arduino:testeur_batterie [2014/11/14 19:11] (Version actuelle) – [II - Structure du système] jcano
Ligne 1: Ligne 1:
 +====== Réalisation : Testeur de batterie ======
 +==== Introduction ====
 +Cette page décrit une réalisation très facile à mettre en œuvre à l'aide d'une carte Arduino, on estime un temps
 +de la réalisation de l'ordre de 20 minutes. Je vous encourage à réaliser ce montage afin de maitriser **analogRead()** et ** digitalWrite() **
 +===== I - Contexte =====
 +On veut réaliser un testeur de batterie 12V avec les fonctionnalités suivantes : \\
 +  * Si la tension de sortie de la batterie est inférieure à 10.5V alors une diode rouge clignotera pour annoncer à l'utilisateur que la batterie est à plat (RED ALERT ! )
 +  * Durant la période de charge de la batterie, on veut que la diode s'allume de manière continue
 +  * Puis quand la batterie est chargée à 13.6V (les chargeurs ayant une tension de 13.8V) la diode s’arrête de clignoter jusqu'à ce qu'un <del>andouille</del> utilisateur décharge la batterie...
 +===== II - Structure du système =====
 +Il faut bien à un moment donner savoir de quoi on a besoin afin de réaliser le système : \\
 +  * **Les tensions d'entrées sont trop hautes pour la carte !** En effet, celle ci ne lit que de 0 à 5V (et au delà c'est la destruction assurée). Les tensions attendues sont en tous les cas inférieures à 15V donc un facteur de division 3 paraît approprié. On prendra un **pont diviseur de tension** avec R1 = 10 K et R2 = 20K par exemple. \\
 + 
 +  * **Et la diode ?** J'ai failli l'oublier celle là ! m( On pourrait utiliser la diode de l'arduino (pin 13) mais ce serait **trop** facile et **pas** réaliste (intégration du système sur un tableau de bord par exemple) donc on utilisera une diode rouge par exemple.\\
  
 +  * **5V pour une diode, c'est pas trop?** En effet, généralement 2.2V (à 10mA) lui suffisent amplement. Donc, si on n'a pas de résistance on branchera **deux** diodes en série, ou sinon une résistance de **R = (5-2.2)/(10e-3) = 280 Ω (+-20%)** en série fera l'affaire . \\
 +
 +** EN BREF : ** il faut une carte Arduino (par exemple, une UNO), une entrée (A0) pour la mesure, une sortie (1) pour la diode, trois résistances, une diode. Ajoutons à cela une alimentation variable (pour faire office de batterie) et une fixe comprise entre 7 et 12V (alimentation de la carte Arduino UNO)
 +
 +{{ :start:projet:arduino:schema_testeur.jpg |}}
 +
 +
 +===== III - Codage ===== 
 +Voici le code à copier-coller dans le logiciel Arduino (après avoir crée un fichier "test_batterie" par exemple) puis à **implémenter** sur votre chère carte quand le montage ci-dessus sera réalisé. \\
 +\\
 +
 +----
 +  /* TEST BATTERIE 
 +  Premièrement on va nommer les Pins */
 +  int voltmetre = A0;
 +  int led = 1;
 +  /* vient l'initialisation, led est une sortie !
 +  on va créer également les variables et constantes de mesure */
 +  void setup () {
 +   pinMode(led,OUTPUT);  
 +  }
 +  /* vient la structure principale */
 +  void loop () { 
 +   float Ubatterie = 0; /* initialisation de la variable */
 +   float Ufaible = 10500; /* le seuil de 10,5V en mV */
 +   float Uchargee = 13600; /* le seuil de charge à 13.6V en mV */
 +   boolean decharge = LOW; /* on mémorise la décharge de batterie */
 +  
 +   Ubatterie=analogRead(voltmetre)*5000.0/1024.0; /* mesure de Ubatterie
 +   on suppose la batterie en service (chargée initialement) */ 
 +   while (Ubatterie<Ufaible) {
 +     /* un petit programme de clignotant avec mesure */
 +     digitalWrite(led,HIGH);
 +     delay(100);
 +     digitalWrite(led,LOW);
 +     delay(150);
 +     Ubatterie=analogRead(voltmetre)*5000.0/1024.0;
 +     decharge = HIGH;
 +   }
 +   /* même principe pour la phase de charge, si il y a eu décharge */
 +   while (Ubatterie<Uchargee && decharge == HIGH) {
 +     digitalWrite(led,HIGH);
 +     Ubatterie=analogRead(voltmetre)*5000.0/1024.0;
 +      }
 +  //* réarmement du programme */
 +  decharge = LOW ;  
 +  digitalWrite(led,LOW);
 +   }  
 +    
 +