Añade un control de las baterías a tus proyectos

En la mayoría de proyectos con Arduino, terminamos usando baterías recargables, ya que proporcionan mayor autonomía y a la larga un ahorro económico importante, si el proyecto es para uso continuo.

Si usamos baterias normales del tipo Ni-Mh no tendremos problemas con la descarga, cuando se agoten las cargamos de nuevo y ya está, pero si usamos baterías del tipo Li-Po, debemos tener muy en cuenta la descarga de la misma, ya que si la tensión de cada elemento baja de los 3 voltios, no podremos cargarla de nuevo, y la batería quedará inutilizada .

 

NE411936001A

 

En el mercado existen varios tipos de avisadores de descarga para este tipo de baterías , los más populares son los avisadores visuales, es decir, un led que se enciende indicando que debemos cargar la batería, y es lo que vamos a hacer nosotros, un avisador luminoso que nos indicará que la batería esta a un nivel que necesita recarga antes de que esté por debajo del recomendable.

Antes de empezar con el tema en cuestión, voy a explicar el funcionamiento de las entradas/salidas  analógicas de nuestra placa Arduino.

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 .

El esquema sería el siguiente:

esquema divisor

 

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…

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.

 

y el esquema de conexión sería el siguiente…

esquema divisor 2

 

Siempre podríamos conectar un LCD y hacernos un Voltimetro.

Anuncios

22 Respuestas a “Añade un control de las baterías a tus proyectos

  1. Gracias por compartir esta información y como sería en el caso de una batería de 6 voltios? cuales serían los valores de las dos resistencias, y si en quisiera tener 5 leds que se vayan apagando conforme se llega al voltaje mínimo de carga? saludos.

    • Que tipo de batería es?
      A que tensión de la batería quieres que te avise?
      Y para añadir más led, tendrás que usar varias salidas digitales encendiéndolas con un comparador en el código …
      En la función leer_voltios,
      If ( voltios > 6){
      DigitalWrite ( 5,HIGH);
      DigitalWrite ( 6, HIGH);
      DigitalWrite ( 7,HIGH);
      DigitalWrite ( 8, HIGH);}
      If ( voltios > 5.5 && voltios < 6){
      DigitalWrite ( 5,LOW);
      DigitalWrite ( 6, HIGH);
      DigitalWrite ( 7,HIGH);
      DigitalWrite ( 8, HIGH);}

      y así con los valores que quieras usar para ir apagando los led…

  2. Hola buenas, probe ese programa con un arduino UNO y funciona perfectamente, pero luego lo probe con un arduino Mega y no funciona, a que se debe?

    • No hace nada, o marca mal… Si no hace nada, puede ser por la asignación de los pines , y si marca mal por la tensión de referencia…
      Revisa que has conectado en el A0 , y si marca mal puedes ajustarlo de forma manual usando en vez de una resistencia de 10k, dos en serie, una de 4k7 y una ajustable de 10k , así podrías hacer un ajuste más fino…

      • La asignación de pines esta bien, lo tengo conectado a A0.
        Lo que hace es, que al encender, se iluminen por menos de un segundo los LED’s (tengo varios para que me indice entre que tensión esta) y colocando la resistencia y el potenciometro para mayor ajuste, no consigo nada.

      • El codigo completo es este:

        void leer_voltios()
        {
        float voltios;
        voltios= (analogRead(A0))*0.004887585533*4.9000;
        if (11<voltios)
        {
        digitalWrite(3, HIGH);
        digitalWrite(5, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, LOW);
        }
        if ((10<voltios)&&(voltios<=11))
        {
        digitalWrite(3, LOW);
        digitalWrite(5, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, LOW);
        }
        if ((9<voltios)&&(voltios<=10))
        {
        digitalWrite(3,LOW);
        digitalWrite(5, LOW);
        digitalWrite(7, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, LOW);
        }
        if ((8<voltios)&&(voltios<=9))
        {
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        digitalWrite(7, LOW);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, LOW);
        }
        if ((7<voltios)&&(voltios<=8))
        {
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        digitalWrite(7, LOW);
        digitalWrite(9, LOW);
        digitalWrite(11, HIGH);
        digitalWrite(13, LOW);
        }
        if ((6<voltios)&&(voltios<=7))
        {
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        digitalWrite(7, LOW);
        digitalWrite(9, LOW);
        digitalWrite(11, LOW);
        digitalWrite(13, LOW);
        }
        if (voltios<5)
        {
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        digitalWrite(7, LOW);
        digitalWrite(9, LOW);
        digitalWrite(11, LOW);
        digitalWrite(13, HIGH);}
        }
        void setup() {

        pinMode(5, OUTPUT);
        pinMode(7, OUTPUT);
        pinMode(9, OUTPUT);
        pinMode(11, OUTPUT);
        pinMode(3, OUTPUT);
        pinMode(13, OUTPUT);
        }

        void loop() {
        leer_voltios();

        }

        He vuelto a comprobar, y en UNO funciona pero no en MEGA
        Muchas gracias por cierto

  3. Buenas tardes,
    Tengo una duda al respecto de las resistencias usadas. Si uso una batería de 12v 5A debo hacer un divisor de corriente y luego otro de tensión para poder pasar a 5V 50mA por ejemplo. Pero las resistencias que use son mejor en Kohms o en ohms? Lo comento por la descarga de la batería. Alguien sabe algo?
    Saludos cordiales.

  4. Yo tengo un proyecto para alimentar Arduino con una celda solar y dispongo de una bateria Li-Po con un voltaje de 3,7 V y una supuesta intensidad de 6000 mAh (lo dudo). Te paso este ejemplo: https://www.hackster.io/igorF2/solar-charged-battery-powered-arduino-uno-645d89

    En mi caso no haría falta divisor de tensión porque la tensión de la pila es menor de 5 voltios pero… ¿Cuál es la tensión mínima recomendable de una bateria Li-Po de 3,7 V para que se pueda recargar y evitar que quede utilizada?

  5. Hola lisergio,
    En la línea
    “voltios= (analogRead(A0))*0,004887585533*4.9000;”
    no entiendo que significa el 4.9000. Es 49.000 pero se ha movido el punto? Es que en el 0,0048.. veo una coma y no un punto. Supongo que será cosa del corrector y no hay que poner punto y dejarlo como 49000. Es así?
    Gracias por el tutorial!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s