Sei sulla pagina 1di 9
(https://www.prometec.net) TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/) ARDUINO
(https://www.prometec.net)
TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/)
ARDUINO (HTTPS://WWW.PROMETEC.NET/INDICE-TUTORIALES)
RASPBERRY PI (HTTPS://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
FORO (HTTPS://WWW.PROMETEC.NET/FOROS-PROMETEC/)
CONTACTO (HTTPS://WWW.PROMETEC.NET/CONTACT/)

El funcionamiento es muy sencillo. Arduino lee por la entrada analógica A0 el voltaje que tiene la batería, y lo compara con la referencia de 5V, que es a la que él trabaja, mostrando dicho voltaje por el display LCD.

Así mismo, hace un cálculo del porcentaje de carga de dicha batería, en base a que a plena carga (4.2V) nos dará el 100% y a 3.2V la carga será del 0%. Esto valores vienen porque estas baterías a plena carga arrojan un valor de 4.2V y durante su uso, el voltaje de las mismas no debe caer por debajo de 3.2V pues se pueden ir dañando y mermar sus capacidades. Se puede modi car el valor de carga mínima con tan solo modi carlo en el sketch.

Para un control a simple vista, se utilizan tres LEDs de colores verde, amarillo y rojo. El primer estará encendido hasta una carga del 40%. A partir de ahí se encenderá el amarillo hasta que la carga sea del 10% en el que se enciende el rojo, indicándonos que pronto habrá que recargar la la batería.

Igualmente, estos porcentajes se pueden modi car en el sketch y darles otros rangos.

El potenciómetro lo utilizamos como offset (Ajuste de voltaje). El proyecto está ideado para alimentarlo con una fuente externa de 5V, como puede ser un cargador de móvil y un cable modi cado para alimentar la protoboard con esos 5V. De esta manera, alimentamos a Arduino y al display LCD.

De esta manera, alimentamos a Arduino y al display LCD. Como los cargadores o fuentes no

Como los cargadores o fuentes no siempre entregan 5V exactos, y pueden oscilar entre 4.85V y 4.90V (también 5.3V), Arduino estará alimentado por ese voltaje, y su ADC (Conversor Analógico Digital) también, y hará la conversión en base a ese voltaje, no a 5V. Pero en el sketch hacemos el cálculo en base a 5V y debemos corregir esa diferencia.

Para eso usamos el potenciometro,y seleccionando entre un rango de valores predeterminado podemos ajustar esa diferencia, con la ayuda de un multímetro. Una vez ajustado, ya no es necesario mientras usemos la misma fuente de alimentación.

El condensador de 100uF le he colocado para estabilizar un poco la tensión de alimentación, y evitar demasiadas uctuaciones.

En esta foto se muestra la precisión comparado con un multímetro. Se puede observar que para la fuente de alimentación utilizada, el offset se estableció en 42.

(https://www.prometec.net) TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/) ARDUINO
(https://www.prometec.net)
TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/)
ARDUINO (HTTPS://WWW.PROMETEC.NET/INDICE-TUTORIALES)
RASPBERRY PI (HTTPS://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
FORO (HTTPS://WWW.PROMETEC.NET/FOROS-PROMETEC/)
CONTACTO (HTTPS://WWW.PROMETEC.NET/CONTACT/)

EL PROGRAMA DE CONTROL

Este es el sketch

* * *
*
*
*

*

*

*

*

*

*

*

*

Por Suso. 19/04/2016

*/

#include <LiquidCrystal_I2C.h> #include <Wire.h> /* Funcion de configuracion de pines del modulo LCD/I2C (Direccion,en,rw,rs,d4,d5,d6,d7,backlight,polaridad)

*/

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); byte pinV=A0; // Para leer el voltaje byte ledR=12; // LED rojo byte ledA=11; // LED amarillo byte ledV=10; // LED verde

float voltaje=0.0; int medida=0; int porcent=0; int pinOffset=A1; float offset=0.0; int valorPot = 0;

unsigned long tAntes =0; // para el refresco de pantalla unsigned long tAhora =0; unsigned long tEjec =10000;

void setup() { lcd.begin(16,2); // inicializamos el LCD. lcd.backlight(); // encendemos la retroiluminación. pinMode(ledR, OUTPUT); pinMode(ledA, OUTPUT); pinMode(ledV, OUTPUT);

Serial.begin(9600);

digitalWrite(ledR, LOW);

digitalWrite(ledA, LOW);

digitalWrite(ledV, HIGH);

}

void loop() { tAhora = millis();

// Comprobamos para refrescar el LCD

if( tAhora - tAntes >= tEjec)

{

// cada 10 segundos

tAntes = tAhora; // actualizamos variables

lcd.clear();

// Refrescamos

}

medida = analogRead(pinV); // Leemos voltaje de la batería valorPot = analogRead(pinOffset); //Leemos ajuste de offset int ajuste = map (valorPot, 0,1023,60,5); // Mapeamos a un rango más corto

/* Podemos jugar con los dos últimos valores de la función map. Cuanta más diferencia haya entre ellos, menos precisión tendremos con el potenciómetro. El valor más grande es para voltajes más lejanos de 5V. El más pequeño para las fuentes muy cercanas a 5V. Así, con una fuente de 4.90V el valor de offset será de 9 ó 10.

*/

offset = (ajuste/100.0);

lcd.setCursor(12,1);

lcd.print (offset); if (voltaje<=0)
lcd.print (offset);
if (voltaje<=0)

{

}

{

}

// Condicionales para encender los LEDs

if(porcent>=41)

{

digitalWrite(ledR, LOW);

digitalWrite(ledA, LOW);

digitalWrite(ledV, HIGH);

}

if(porcent<41 && porcent>10)

{

digitalWrite(ledR, LOW);

digitalWrite(ledA, HIGH);

digitalWrite(ledV, LOW);

}

if(porcent<=10)

{

digitalWrite(ledR, HIGH);

digitalWrite(ledA, LOW);

digitalWrite(ledV, LOW);

}

lcd.setCursor(0,0);

lcd.print("Voltaje: ");

lcd.print(voltaje);

lcd.print("V");

lcd.setCursor(0,1);

lcd.print("Carga: ");

lcd.print(porcent);

lcd.print("%

");

//Descomentar para mostrar por monitor serial.

//Serial.print(medida); Serial.print("

");

//Serial.print(voltaje);Serial.print(" "); //Serial.print(porcent); Serial.println("%");

delay(1000);

}

Aquí una foto del medidor funcionando, con una batería de móvil en desuso:

(https://www.prometec.net) TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/) ARDUINO
(https://www.prometec.net)
TIENDA (HTTPS://WWW.PROMETEC.NET/TIENDA/)
ARDUINO (HTTPS://WWW.PROMETEC.NET/INDICE-TUTORIALES)
RASPBERRY PI (HTTPS://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)
FORO (HTTPS://WWW.PROMETEC.NET/FOROS-PROMETEC/)
CONTACTO (HTTPS://WWW.PROMETEC.NET/CONTACT/)

Podríamos añadir un buzzer que nos avisara también cuando el nivel de voltaje llegase a un límite crítico.

Espero le guste.

Saludos.

01/05/2016

(96) COMMENTS

(96) COMMENTS Reply (Https://Www.Prometec.Net/Medidor-

Diego Amigo, tienes la librería para el funcionamiento del display? , gracias.

25 Mar 2019

(Https://Www.Prometec.Net/Medidor- Carga-Baterias-Lipo/?
(Https://Www.Prometec.Net/Medidor-
Carga-Baterias-Lipo/?

29 Mar 2019

(http://prometec.org/displays/the-i2c-b us/) RASPBERRY PI (HTTPS://WWW.PROMETEC.NET/INDICE-RASPBERRY-PI/)

Peter

Enhorabuena por los tutoriales son de gran ayuda.

09 Ene 2019

No llego a entender que no sea necesario limitar la intensidad de entrada a los pines analógicos de Arduino, dado que solo admiten 40mA y la batería entrega más.

Gracias de antemano

admiten 40mA y la batería entrega más. Gracias de antemano Reply (Https://Www.Prometec.Net/Medidor-

La intensidad que aporta la batería depende de la que le pida el Arduino, hasta el máximo que pueda dar. Lo que no podemos es meterle más de 5V para no achicharrarlo.

21 Ene 2019

GIVE A REPLY

Message Name (required) Email (required) URL
Message
Name (required)
Email (required)
URL

Post comment