Go Down

Topic: Medidor de bateria Arduino Nano (Read 5601 times) previous topic - next topic

aaRonRJ

Hola, soy nuevo en el foro y vengo a pediros ayuda. Estoy trabajando con una Arduino Nano y con una batería de 3.7V. Me gustaría conseguir saber el porcentaje de batería que va quedando y no sé como hacerlo.

¿Me podríais ayudar?
Gracias, saludos.

surbyte

Antes deberías haber investigado un poco de tu parte no?
Yo te sugiero usar un componente como este  MAX4172, que es de bajo precio.



efect2000

#2
Apr 04, 2016, 12:20 pm Last Edit: Apr 04, 2016, 12:20 pm by efect2000
Hola, la pregunta, muy bien hecha tampoco la veo. Yo entiendo que quiere visualizar el % de carga de la bateria conforme se va descargando

surbyte

Y que respondí?
Con ese integrado mides la corriente consumida, conforme pasa el tiempo tienes los mAh correspondientes.
El esquema es ilustrativo. Si no miraste que el MAX4172 es un integrado 
Low-Cost, Precision, High-Side Current-Sense Amplifier
no es un integrado para cargar baterías, que el esquema lo muestre haciendolo es otra cosa. Es el que estaba disponible en MAXIM.

aaRonRJ

Buenas de nuevo, ¿no es posible conseguir el porcentaje de batería sin utilizar ningún componente externo?
Es decir, utilizando el pin analógico A0 y un divisor de corriente. He encontrado algunos ejemplos en google, pero no he conseguido hacerlo funcionar correctamente. Para el divisor de corriente estoy utilizando 2 resistencias de 1M ohmios y 470Kohmios.

¿Alguna ayuda?

Gracias.

surbyte

Quote
Es decir, utilizando el pin analógico A0 y un divisor de corriente.
Divisor de corriente? Divisor de tensión querrás decir.
Si puedes medir la tensión de la batería, pero cada batería tiene curvas de descargas que son propias de la quimica de esa batería y de su vejez. Como estimas eso? 

Puedes medir la tensión en vacío y digas esto es 100% y el límite será el valor de tensión minima que hace funcionar tu arduino.
Ahora.. dices estar usando un NANO. No he visto ningún NANO que use 3.3V (salvo modificación del PCB)  de modo que 3.7V no es tensión suficiente para alimentarlo. No será un MINI PRO?

Termino la idea: la curva de descarga no es lineal, de modo que supongamos que en vacío tienes 3.7V y en 2.8V deja de funcionar asi que ese será tu 0%. 
Pero entre medio no tienes una recta de descarga, sino una curva muy rara, con una zona de meseta de baja pendiente.
cuidado con eso. Por eso hay que  medir corriente.

tigero

Hola te comento mi experiencia.

Podes usar un divisor resistivo y, para que no consuma constantemente le pones un transistor. Entonces activás el transistor NPN (yo use un 337 y anda bien), esperas un poco que se estabilice, medis la tensión y la comparas con un umbral de minima carga y después  apagas el transistor. Algo muy básico para saber cuando hay que poner a cargar la batería.
Ahora si necesitas porcentaje fino, vas a necesitar buscar un micro que maneje la carga y verifique la descarga según la tecnología de la batería.

Espero que sirva!

Saludos.

MAPRISA

Hola aaRonR
Aquí te dejo un ejemplo, ya que un ejemplo vale más que mil palabras
Creo que esto es lo que buscas, si te sirve, luego has lo siguiente analízalo hasta intentar comprender el porque sucede.

Este es el esquema:




Esto es una breve explicación:

Disponemos de varias entradas/salidas analógicas dependiendo de la placa que vayamos a usar, 6 en el caso de la Arduino UNO y 16 en el caso de la  MEGA.

Realmente no es analógica, si no una digital en 1024 partes (por explicarlo de forma fácil )…

Cero Voltios es el punto 0, 5Voltios es el punto 1023 por lo que hay que tener en cuenta que la tensión de referencia es de 5V en la mayoría de casos, excepto en las versiones de 3,3 Voltios (Arduino Pro mini).

La mayoría de los sensores del mercado, ya sean LDR, Temperatura, etc usan este nivel de entre 0 y 1023 para marcar los valores mínimos y máximos del sensor.

Teniendo esto en cuenta, para el caso que nos ocupa, necesitamos medir una tensión de al menos 10 Voltios, por lo que no podremos conectar la batería directamente a la entrada, y tendremos que hacerlo a través de un divisor de tensión.

Para realizar un divisor de tensión, tendremos en cuenta que hay que usar unos valores altos para evitar un consumo excesivo, así que podremos hacer uno por ejemplo de 5 partes ( Maximo 25 Voltios ), es decir dividir la tensión e 5 partes para poder leerla, para seguidamente calcular la tensión real de la batería .

Si observais, el divisor no es exactamente de 5 partes, ya que por los valores reales de las resistencias es lo que podemos conseguir…

Con una sencilla regla de 3, podremos calcular el porcentaje real…

49000 Ohm --- 100 %

10000 Ohm --- x%

Por lo que el porcentaje real es de 20,408 %

Para calcular el multiplicador solo tenemos dividir el 100% entre el calculado, es decir 4,9000.

Para saber la parte de tensión que corresponde a cada parte de la entrada analógica dividiremos la tensión de referencia entre 1023..

5 V / 1023 = 0,004887585533

3.3V / 1023 = 0,003225806452

Por lo que finalmente para calcular la tensión de la batería realizaremos lo siguiente.

Leer la entrada analógica y multiplicarla por el valor de cada parte y por el multiplicador…


AQUÍ EL CÓDIGO PARA SU FUNCIONAMIENTO:
Para que nos avise cuando la tensión esté por debajo de los 3,3v por elemento de la batería , podremos conectar un led a la salida digital 5 de la placa, así que la función para leer la tensión quedaría de la siguiente forma…

Para una referencia de 5 Voltios

void leer_voltios()
{
float  voltios;
voltios= (analogRead(A0))*0,004887585533*4.9000;
if (voltios<=6.60)
{
digitalWrite(5, HIGH);
}
}

Para una referencia de 3.3 Voltios

void leer_voltios()
{
float  voltios;
voltios= (analogRead(A0))*0,003225806452*4.9000;
if (voltios<=6.60)
{
digitalWrite(5, HIGH);
}
}

Solo tendremos que llamar a la función leer_voltios() cuando queramos hacerlo.

Un saludo espero te sea útil



Go Up