You are on page 1of 16

MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.

net/medidor-carga-baterias-lipo/

1 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

2 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

3 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

4 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

/* Sensor de voltaje para bateras Li-Po de una celda (1S).


* Se toma el voltaje de la batera a travs de la entrada A0.
* Se muestra el voltaje y el porcentaje de carga por un display LCD I2C 1602
* Adems, tenemos tres LEDs que se van encendiendo dependiendo de la carga.
* verde = hasta 40%
* amarillo = hasta
* 4.2 = 100% (mximo voltaje, mxima carga)
* 3.2 = 0% (mnimo voltaje de seguridad)
*
* IMPORTANTE: La tensin que entra por USB o por el pin de 5V (Nano),
* afecta a la precisin, ya que sta puede ser difente de 5.0V en algunos mV.
* El ADC utiliza el voltaje de alimentacin como voltaje de referencia.
* Utilizamos un potencimetro para regular el voltaje de offset, y regular
* la precisin, con la ayuda de un multmetro.
*
*
* 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 retroiluminacin.
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
}

5 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

medida = analogRead(pinV); // Leemos voltaje de la batera


valorPot = analogRead(pinOffset); //Leemos ajuste de offset
int ajuste = map (valorPot, 0,1023,60,5); // Mapeamos a un rango ms corto

/* Podemos jugar con los dos ltimos valores de la funcin map. Cuanta ms diferencia
haya entre ellos, menos precisin tendremos con el potencimetro.
El valor ms grande es para voltajes ms lejanos de 5V. El ms pequeo 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);
voltaje= ((((medida*5.0)/1023.0))- offset); // Convertimos a valor con decimales
if (voltaje<=0)
{ // Si es menor o igual a cero
voltaje=0.0; // Le damos valor 0, para evitar negativos
}

porcent=((voltaje*100)-320); // Frmula para mostrar el porcentaje de carga


if(porcent<=0)
{ // Evitamos valores negativos
porcent=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);
}

6 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

7 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

8 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

9 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

10 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

11 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

12 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

13 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

14 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

15 de 16 29/11/2017 11:14
MEDIDOR DE CARGA BATERIAS Li-Po | Tienda y Tutoriales Arduino https://www.prometec.net/medidor-carga-baterias-lipo/

16 de 16 29/11/2017 11:14

You might also like