Indicateur de batterie faible

22

Je cherche à créer un indicateur d'autonomie de batterie que je peux utiliser en conjonction avec un micro-contrôleur. J'espère que je pourrai ensuite lire la durée de vie restante de la batterie et mettre de plus en plus le micro-contrôleur en veille pour préserver la durée de vie de la batterie.

littlebirdceo
la source
1
Quel microcontrôleur?
Brian Carlton

Réponses:

13

À la question principale, quant à la façon de mesurer la tension d'une batterie, la méthode la plus simple consiste à utiliser l'une des broches ADC de l'arduino.

Si vous fournissez 5v à partir de la batterie (peu probable), vous pouvez exécuter le + directement sur l'une des broches analogiques et utiliser analogRead () - chaque incrément de valeur (de 0 à 1023) représentera 4,9 mV. Multipliez donc la valeur lue par 0,0049 pour obtenir la lecture des volts.

Si vous utilisez plus de 5 V (plus probablement), vous pouvez utiliser un circuit diviseur de tension (voir: http://en.wikipedia.org/wiki/Voltage_divider ) pour amener la tension que vous envoyez à l'entrée analogique. <= 5v. Si vous utilisez 12V, vous voudrez diviser la tension en environ 1/3. Ensuite, après avoir multiplié la valeur ADC, multipliez par 3 pour obtenir la tension réelle.

Ainsi, si vous utilisez 12V et un diviseur de tension 1/3:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

! c

obturateur
la source
2
J'ai deux choses importantes à ajouter à cela. Tout d'abord, la plupart des batteries 12V ne meurent pas à 0 V, mais à quelque chose d'assez proche, au moins à moins de 5 V, de votre tension de charge complète. Une technique courante pour obtenir des mesures de résolution plus élevées dans la plage de fonctionnement consiste à abaisser la tension avec une diode Zener. Une résistance en série avec un zener et vous mesurez à travers la résistance. Deuxièmement, la plupart des gens ne réalisent pas que vous devez tirer du courant d'une batterie pour avoir une bonne idée de la puissance restante.
Kortuk
@Kortuk: Pourriez-vous apporter deux clarifications à mon apprentissage: (1) Pour entrer dans la plage de tension acceptée par les broches, suggérez-vous que l'approche par diode zener donnera une résolution plus élevée que la méthode du diviseur de tension? (2) Pourquoi avez-vous mentionné ici en particulier que "vous devez utiliser le courant ...", etc.?
boardbite
22

tinker.it a publié un indicateur de niveau de tension "secret" dans l'Atmega168 / atmega328. Avec une petite astuce, un Arduino est capable de comparer le VCC avec une référence de précision interne de 1,1 V. L'explication et le code sont ici: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

bpijls
la source
excellent, je fais tourner un atmega sur piles et je n'ai pas pu avoir une valeur vref fiable. merci d'avoir posté ça, ça a résolu mon problème comme par magie!
radhoo
10

La suggestion de shutterdrone est très bonne, mais il manque un détail, car elle implique que la référence de tension analogique est la même que la tension mesurée (à part supposer qu'un Arduino est utilisé, ce qui n'est pas explicitement indiqué).

Vous aurez besoin d'un ADC, qu'il soit intégré à votre uC ou à un composant externe. L'ADC a besoin d'une référence de tension analogique (ARef) pour comparer l'entrée avec. Vous ne voulez pas que l'ARef soit identique à la tension que vous détectez car alors l'ADC verra toujours les tensions d'entrée et de référence comme égales, donc la valeur analogique de la tension détectée sera toujours le maximum. Vous avez besoin d'une référence de tension analogique très précise qui ne changera pas à mesure que la tension d'alimentation change. L'ADC comparera cette tension de référence à la tension de la batterie; vous pouvez utiliser un diviseur de tension pour réduire la tension de la batterie détectée dans la plage de l'ARef.

L'Arduino (Atmega8 / 168/328 / etc.) a un ADC intégré et une référence analogique 1.1V intégrée, donc les seuls composants externes dont vous auriez besoin sont des résistances pour le diviseur de tension. Je pense que vous voudriez également utiliser des valeurs très élevées pour les résistances afin de réduire la consommation de courant sur la batterie.

blalor
la source
2
Excellents points - et vous avez raison de supposer (à tort) un Arduino dans le mix. =)! c
shutterdrone