Parches soluciones asequibles
Soluciones

Medidor de la carga de pilas recargables con Arduino

Método aproximado para medir la carga almacenada por una o varias pilas recargables, y especialmente para agrupar las de carga similar. El medidor se basa en descargar las pilas hasta que su tensión alcanza un valor prefijado en el programa (int tension) y con una intensidad que también se puede modificar por programa.

Durante la descarga se alimenta un reloj electromecánico que al pararse indica el tiempo que ha durado el ciclo. La corriente por el tiempo nos da la capacidad de las pilas (al menos de la que ha quedado con menos tensión). La intensidad de descarga se puede modificar por el numero de pines activos y por el valor de las resistencias usadas. El ejemplo se ha preparado para dos pilas (en serie y atención a la polaridad) y se ha fijado la tensión de corte a los 2 V. Con resistencias de 47 ohmios, la descarga en cada una de ellas es de unos 30 mA, por lo que cambiando de línea el "/ *", en el programa, se puede adaptar a la capacidad de la pila. Conviene fijar una intensidad de descarga de 1/10 la capacidad de la pila ya que así el reloj nunca dará más de una vuelta y no habrá duda de la horas transcurridas.

Hay que tener en cuenta, al calcular las resistencias de carga, que las entradas digitales no se quedan a 0 V cuando están a LOW, si no a una tensión que depende de la intensidad que circule. Para intensidades de unos 30 mA yo he medido 1 V.

Para iniciar la prueba, se conectan los elementos y, si se tiene, se coloca el miliamperímetro en su lugar, se adapta el programa a nuestro caso, el reloj a las 12 y se hace correr el programa. Se ajusta la intensidad si es necesario modificando el nº de pins activos y se deja rodando el programa hasta que el led se apaga y el reloj se para. No es necesario vigilar el final ya que cuando se alcanza la tensión prefijada, la descarga cesa y las pilas no sufren daño por exeso de descarga. La medición es solo aproximada por que la intensidad de descarga varia con el tiempo, pero el error cometido creo que es menor del 5%.

Se puede modificar el circuito para que la descarga se controle con un transistor (o varios) o un relé, o que el reloj se controle con una salica PWM para fijar la tensión necesaria, añadir un aviso acústico, etc. En principio solo se puede usar con pilas de 4'5 V máximo, pero también se puede adaptar a otros valores con divisor de tensión para no superar los 5 V en las entradas de los pins.

Atención, si la placa ARDUINO se alimenta de un puerto USB del ordenador, este puede entrar en modo descanso y dejar el circuito parado (al alimentarlo de nuevo sigue contando). Conviene pues una alimentación externa, aunque le he añadido un comando de señal serie que creo que no deja "dormirse" al PC.

En cuanto al reloj yo he usado uno de los que se usan en manualidades, que cuesta unos 5 € y se alimenta con una pila AA. Lo he colocado en una caja de plástico con una esfera sacada de internet, le he quitado la pila y la he sustituido por una "FALSA PILA, descrita en otro apartado y lo he montado todo en un conjunto que podeis ver en estas fotos.

medidorcarga_esquema   medidor2 (9K)

Programa

int tiempo = 1000;

int tension = 2; // Tensión de parada, 1 V por pila

int niveltension ;

void setup() {

//Las salidas 0 y 1 no se pueden "cargar" con una resistencia o hay problemas con la transmisión y carga del programa

pinMode (2, OUTPUT);// reloj y led

pinMode (3, OUTPUT);

pinMode (4, OUTPUT);

pinMode (5, OUTPUT);

pinMode (6, OUTPUT);

pinMode (7, OUTPUT);

pinMode (8, OUTPUT);// Todos estos descargarán la pila

/* <===Esto es lo que se cambia de línea para modificar la intensidad de descarga**

pinMode (9, OUTPUT);// estos en reserva para aumentar la descarga si es necesario.

pinMode (10, OUTPUT);

pinMode (11, OUTPUT);

pinMode (12, OUTPUT);

pinMode (13, OUTPUT);*/

digitalWrite (2, HIGH); // Led y reloj

digitalWrite (3, LOW); // descargan pila los que se han activado más arriba

digitalWrite (4, LOW);

digitalWrite (5, LOW);

digitalWrite (6, LOW);

digitalWrite (7, LOW);

digitalWrite (8, LOW);

digitalWrite (9, LOW);

digitalWrite (10, LOW);

digitalWrite (11, LOW);

digitalWrite (12, LOW);

digitalWrite (13, LOW);

Serial.begin(9600);

}

void loop()

{

Serial.println("No te duermas"); //para mantener despierto el pc

delay (tiempo);

niveltension = analogRead (0);

niveltension /= 205;// Para tener el resultado en voltios

if (niveltension < tension)

{

pinMode (3, INPUT); // La descarga se va reduciendo poco a poco

delay (tiempo);

pinMode (4, INPUT);

delay (tiempo);

pinMode (5, INPUT);

delay (tiempo);

pinMode (6, INPUT);

delay (tiempo);

pinMode (7, INPUT);

delay (tiempo);

pinMode (8, INPUT);

pinMode (2, INPUT); // Se apaga el led y el reloj se para.

delay (tiempo);

pinMode (9, INPUT);

delay (tiempo);

pinMode (10, INPUT);

delay (tiempo);

pinMode (11, INPUT);

delay (tiempo);

pinMode (12, INPUT);

delay (tiempo);

pinMode (13, INPUT);

}

}



Para descargar fichero del programa pincha PROGRAMA

Hazlo tú mismo