Indicador de bateria fraca


22

Estou procurando criar um indicador de duração da bateria que possa ser usado em conjunto com um microcontrolador. Espero poder ler a vida útil restante da bateria atual e colocar cada vez mais o microcontrolador em suspensão para preservar a vida útil da bateria.


1
Qual microcontrolador?
Brian Carlton

Respostas:


13

Para a questão principal, sobre como medir a tensão de uma bateria, o método mais simples é usar um dos pinos ADC no arduino.

Se você estiver fornecendo 5v da bateria (improvável), poderá executar o + direto para um dos pinos analógicos e usar analogRead () - cada incremento no valor (de 0 a 1023) representará 4,9 mV. Portanto, multiplique o valor de leitura por 0,0049 para obter a leitura dos volts.

Se você estiver executando acima de 5v (mais provável), poderá usar um circuito divisor de tensão (consulte: http://en.wikipedia.org/wiki/Voltage_divider ) para aumentar a tensão que você está enviando para a entrada analógica. <= 5v. Se você estiver rodando 12V, convém dividir a tensão em aproximadamente 1/3. Depois de multiplicar o valor ADC, multiplique por 3 para obter a tensão real.

Portanto, se estiver usando 12V e um divisor de 1/3 de tensão:

#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


2
Eu tenho duas coisas importantes a acrescentar a isso. Primeiro, a maioria das baterias de 12V não morre em 0V, mas em algo bem próximo, pelo menos dentro de 5V, da sua tensão de carga total. Uma técnica comum para obter medições de resolução mais alta na faixa de operação é diminuir a tensão com um diodo zener. Um resistor em série com um zener e você mede através do resistor. Segundo, a maioria das pessoas não percebe que você precisa extrair corrente de uma bateria para ter uma boa idéia da energia restante.
24909 Kortuk

@ Kortuk: Você poderia fazer dois esclarecimentos para o meu aprendizado: (1) Para ficar dentro da faixa de tensão aceita por pinos, você está sugerindo que a abordagem do diodo zener dê uma resolução mais alta que o método do divisor de tensão? (2) Por que você mencionou em particular aqui que "você precisa desenhar a corrente ..." etc.?
boardbite

22

O tinker.it publicou um medidor de nível de tensão "secreto" no Atmega168 / atmega328. Com um pequeno truque, o Arduino pode comparar o VCC com uma referência de precisão interna de 1.1v. A explicação e o código estão aqui: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/


excelente, estou usando um atmega com baterias e não consegui ter um valor vref confiável. obrigado por postar isso, ele resolveu meu problema como mágica!
radhoo 9/07/2013

10

A sugestão do shutterdrone é muito boa, mas falta um detalhe, pois implica que a referência de tensão analógica é a mesma que a tensão que está sendo medida (além de supor que um Arduino esteja sendo usado, o que não é explicitamente declarado).

Você precisará de um ADC, seja parte integrante do seu uC ou de um componente externo. O ADC precisa de uma referência de tensão analógica (ARef) para comparar a entrada. Você não deseja que o ARef seja o mesmo que a tensão que você está sentindo, porque o ADC sempre verá as tensões de entrada e de referência como iguais, portanto o valor analógico da tensão detectada será sempre o máximo. O que você precisa é de uma referência de tensão analógica muito precisa que não seja alterada à medida que a tensão da fonte de alimentação for alterada. O ADC comparará essa tensão de referência com a tensão da bateria; você pode usar um divisor de voltagem para reduzir a voltagem da bateria detectada no alcance do ARef.

O Arduino (Atmega8 / 168/328 / etc.) Possui um ADC interno e uma referência analógica de 1.1V integrada, portanto, os únicos componentes externos necessários são resistores para o divisor de tensão. Eu acho que você também gostaria de usar valores muito altos para os resistores para reduzir o consumo de corrente da bateria.


2
Excelentes pontos - e você está certo de que eu (incorretamente) assumi um Arduino na mistura. =)! c
shutterdrone
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.