Arduino
TM1638
Probador nivel de batería
xsetaseta@gmail.com
xsetaseta@gmail.com
En mi anterior artículo había realizado un voltímetro con el CHIP TM1638.
Aprovechando el medidor de tensión realizo un comprobador de baterías.
En este montaje mido el voltaje de la batería a comprobar, con una resistencia de carga 470 ohmios.
Los 8 LEDS del módulo son utilizados como señalador de nivel de batería.
Para cambiar de escala se utilizan los botones S1 al S4.
Las escalas son:
S1 - escala 1.2V - Niveles 1.20V a 1.00V
S2 - escala 1.5V - Niveles 1.50V a 1.10V
S3 - escala 3.0V - Niveles 3.00V a 2.40V
S4 - escala 3.7V - Niveles 3.70V a 3.00V
Esquema de conexión.
Montaje del circuito.
/* xsetaseta@gmail.com Juan Galaz 7/SEP/2017 Nivel de carga de bateria */ #include <TM1638.h> //data(I/O) pin 8, clock(CLK) pin 9 , strobe(STB) pin 7 TM1638 module(8, 9, 7); #define ENTRADA1 A0 char cadena[50]; unsigned int vv1,test3v3; // modo=12 1.2V // modo=15 1.5V // modo=30 3.0V // modo=37 3.7V char modo=12; void setup() { //Serial.begin(9600); pinMode(ENTRADA1, INPUT); pinMode(A7, INPUT); //intensidad al minimo module.setupDisplay(1,0); module.setDisplayToString("test bat",0,0); delay(500); //toma la referencia de 3.3V test3v3=analogRead10(A7); modo=15; } void loop() { byte keys; long voltios1; int z1; vv1=analogRead10(ENTRADA1); voltios1=vv1*33; voltios1*=10; voltios1/=test3v3; z1=voltios1; switch(modo) { case 12: sprintf(cadena,"12u %03du",z1); module.setLEDs(vumeter(z1,120,100)); break; case 15: sprintf(cadena,"15u %03du",z1); module.setLEDs(vumeter(z1,150,110)); break; case 30: sprintf(cadena,"30u %03du",z1); module.setLEDs(vumeter(z1,300,240)); break; case 37: sprintf(cadena,"37u %03du",z1); module.setLEDs(vumeter(z1,370,300)); break; } module.setDisplayToString(cadena,0,0); module.setDisplayDigit(cadena[0]-48,0,1); module.setDisplayDigit(cadena[4]-48,4,1); // Serial.println(cadena); // sprintf(cadena,"vv1=%05d test=%05d ",vv1,test3v3); // Serial.println(cadena); keys = module.getButtons(); switch(keys) { case 1: modo=12; break; case 2: modo=15; break; case 4: modo=30; break; case 8: modo=37; break; } // while( 0 != module.getButtons()); delay(300); } // vumeter unsigned char vumeter(int vol,int ini, int fin) { unsigned int z,z1,z2,led,vu; z=ini-fin; z/=8; z1=1; z2=0; vu=0; for(led=0;led<8;led++) { if(vol>fin) vu=vu+z1; fin+=z; z1+=z1; } return(vu); } //lectura de 10 medidas y hace la media int analogRead10(int entrada) { int z,v; for(z=0,v=0;z<10;z++)v+=analogRead(entrada); v/=10; return(v); } |
Hasta pronto.
JUAN GALAZ
Bibliografía:
https://github.com/rjbatista/tm1638-library
tm16vol.html
No hay comentarios:
Publicar un comentario