Indicador de batería baja

22

Estoy buscando hacer un indicador de duración de la batería que pueda usar junto con un microcontrolador. Espero poder leer la vida útil de la batería actual y poner cada vez más en reposo el microcontrolador para preservar la vida útil de la batería.

littlebirdceo
fuente
1
¿Qué microcontrolador?
Brian Carlton el

Respuestas:

13

Para la pregunta principal, en cuanto a cómo medir el voltaje de una batería, el método más simple es usar uno de los pines ADC en el arduino.

Si está proporcionando 5v de la batería (poco probable), puede ejecutar el + directamente a uno de los pines analógicos, y usar analogRead (): cada incremento en el valor (de 0-1023) representará 4.9mV. Entonces multiplique el valor de lectura por .0049 para obtener los voltios leídos.

Si está ejecutando a más de 5v (más probable), puede usar un circuito divisor de voltaje (consulte: http://en.wikipedia.org/wiki/Voltage_divider ) para llevar el voltaje que está enviando a la entrada analógica a <= 5v. Si está ejecutando 12V, querrá dividir el voltaje en aproximadamente 1/3. Luego, después de multiplicar el valor de ADC, multiplique por 3 para obtener el voltaje real.

Por lo tanto, si usa 12V y un divisor de voltaje de 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)
}

!do

obturador
fuente
2
Tengo dos cosas principales que agregar a esto. Primero, la mayoría de las baterías de 12V no mueren a 0V, sino a algo bastante cercano, al menos dentro de 5 V, de su voltaje de carga completa. Una técnica común para obtener mediciones de mayor resolución en el rango operativo es reducir el voltaje con un diodo zener. Una resistencia en serie con un zener y usted mide a través de la resistencia. En segundo lugar, la mayoría de las personas no se dan cuenta de que necesita extraer corriente de una batería para tener una buena idea de la potencia restante.
Kortuk
@Kortuk: ¿Podría hacer dos aclaraciones para mi aprendizaje: (1) Para estar dentro del rango de voltaje aceptado por el pin, ¿está sugiriendo que el enfoque de diodo zener dará una resolución más alta que el método del divisor de voltaje? (2) ¿Por qué hizo una mención particular aquí de que "necesita dibujar corriente ...", etc.?
mordida
22

tinker.it publicó un medidor de nivel de voltaje "secreto" en Atmega168 / atmega328. Con un pequeño truco, Arduino puede comparar VCC con una referencia interna de precisión de 1.1v. La explicación y el código están aquí: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

bpijls
fuente
excelente, estoy usando un atmega con baterías y no pude tener un valor de vref confiable. gracias por publicar esto, resolvió mi problema como magia!
radhoo
10

La sugerencia de Shutterdrone es muy buena, pero le falta un detalle, ya que implica que la referencia de voltaje analógico es la misma que el voltaje que se está midiendo (aparte de suponer que se está utilizando un Arduino, que no se indica explícitamente).

Necesitará un ADC, ya sea integral para su uC o un componente externo. El ADC necesita una referencia de voltaje analógico (ARef) para comparar la entrada. No desea que el ARef sea el mismo que el voltaje que está detectando porque entonces el ADC siempre verá los voltajes de entrada y de referencia como iguales, por lo que el valor analógico para el voltaje detectado siempre será el máximo. Lo que necesita es una referencia de voltaje analógica muy precisa que no cambiará a medida que cambie el voltaje de la fuente de alimentación. El ADC comparará ese voltaje de referencia con el voltaje de la batería; puede usar un divisor de voltaje para reducir el voltaje de la batería que se detecta en el rango del ARef.

El Arduino (Atmega8 / 168/328 / etc.) tiene un ADC incorporado y una referencia analógica de 1.1V incorporada, por lo que los únicos componentes externos que necesitaría son resistencias para el divisor de voltaje. Creo que también querría usar valores muy altos para las resistencias para reducir el consumo de corriente en la batería.

blalor
fuente
2
Excelentes puntos, y tiene razón en que (incorrectamente) asumí un Arduino en la mezcla. =)! c
shutterdrone el