Mostrando entradas con la etiqueta tm1638. Mostrar todas las entradas
Mostrando entradas con la etiqueta tm1638. Mostrar todas las entradas

sábado, 3 de octubre de 2020

ARDUINO - LTC5904 - Generador de frecuencia 1KHz a 68MHz - Display

ARDUINO
LTC5904 - LTC5903
Generador de frecuencia
1KHz a 68MHz
Display


En el anterior artículo habíamos realizado el generador de frecuencia con el CHIP LTC6904.
En este montaje vamos a poder controlar el chip mediante botones y visualizar la frecuencia con un display de 8 dígitos.
He creado dos modelos utilizando dos tipos de módulos.
Con el TM1638, que dispone de un monton de botones y led, además de un display de 8 dígitos.
El segundo montaje lo he realizado con el MAX7219 , otro módulo de 8 dígitos.



En este montaje utilizamos los 8 botones, que utilizaremos para cambiar los diferentes dígitos.
Mientras estamos modificando la frecuencia, parpadeará un LED.
Después de 2 segundos de no tocar ningún botón se generara la frecuencia marcada en el display.
PROGRAMA




En este montaje utilizamos el módulo de 8 display MAX7219.
Con un botón seleccionaremos el display, y con el otro botón cambiaremos el dígito.
Mientras estamos modifican los dígitos, parpadeará el punto decimal sobre el segmento seleccionado.
Después de 2 segundos de no tocar ningún botón se generara la frecuencia marcada en el display.
PROGRAMA


Llegados a este punto debemos estudiar la exactitud del MAX7219.
Lo primero es explicar su funcionamiento.
Un oscilador programable (ADC) de 1024 pasos, nos genera frecuencia entre 34.05MHz y 68.03MHz.
Por lo cual el oscilador va en pasos de 33184 Hz.
Un segundo divisor programable (OCT) en múltiplos de 2, (1,2,4,8.....16384,32768) (Valor de OCT 15,14,13,12.....1,0) nos proporciona la frecuencia de salida.
Ejemplo:
    ADC=443   ->48.750512 MHz
    OCT=4   (/2048)   ->23803 Hz

La teoría está muy bien, pero dependemos de la precisión de oscilador (VCO), y no es del todo precisa, ya nos pasaba con el DS1077 .
Haciendo medidas hemos descubierto que la frecuencia real del oscilador va desde 67.993.000 Hz a los 33.991.000 Hz.
Esta dentro de los márgenes que indica el CHIP, pero hay que tenerlo muy en cuenta.


Tabla con las diferentes frecuencia generada con los diferentes valores de DAC y OCT.
Podemos ver la frecuencia marcada y la frecuencia real generada.


Es un montaje sencillo y fácil para tener vuestro propio generador de frecuencia.



Bibliografía:

Generador de frecuencia con el CHIP LTC6904.
https://digibird1.wordpress.com/arduino-controlled-frequency-generator-1khz-68-mhz/
http://www.kerrywong.com/2012/04/11/interfacing-ltc6904-with-arduino/
https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/

https://github.com/rjbatista/tm1638-library
https://www.arduinolibraries.info/libraries/led-control

Saludos.
Juan Galaz




martes, 2 de julio de 2019

Arduino-TM1638-Medidor de inductancia V3

Página principal

Arduino
TM1638
Medidor de inductancia
V3


Este artículo  es una continuación del medidor de indu.html.
En este artículo utilizo un contador de frecuencias mucho más exacto, y el oscilador funciona con todos los modelos de CHIP 4049.

La frecuencia de oscilación se calcula con la siguiente formula.

En este modelo oscilador,  existen 2 condensador de 150nF en serie.
La fórmula de dos condensadores en serie es la siguiente:  C=(C*C)/(C+C)= 75 nF
Para medir la frecuencia de un circuito LC , montamos un oscilador mediante una puerta inversora CMOS  4049.
Ahora funciona con todos los modelos, MC14049, TC4049, CD4049, CD4049UBF.
En el anterior montaje solo funcionaba con algunos modelos.

Esquema del circuito oscilante.


Diagrama del montaje.


Circuito montado.

La medida de la inductancia se manda por el terminal serie y se representa en el módulo TM1638.
Como medidor de frecuencia utilizamos una librería FreqCounter, probada en un montaje anterior, con unos resultados  buenos.

Espero que os de ideas para vuestros montajes.

PROGRAMA


Saludos.
Juan Galaz



Bibliografía:

http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
http://interface.khm.de/index.php/lab/interfaces-advanced/theremin-as-a-capacitive-sensing-device/

lunes, 1 de julio de 2019

Arduino - TM1638 - Frequency counter - Frecuencímetro

Página principal

Arduino
TM1638

Frequency counter
Frecuencímetro


En este artículo enseñaré como construir un medidor de frecuencia.
Buscando en internet medidores de frecuencia para utilizar en mi medidor de inductancia, encontré  está página:
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
Había creado una librería para un  contador de frecuencia.
Este proyecto era una derivación de otro proyecto:
http://interface.khm.de/index.php/lab/interfaces-advanced/theremin-as-a-capacitive-sensing-device/
En esta página había creado un frecuencímetro para medir la interferencia en un oscilador cuando se acercaba una persona(Sensores de proximidad).

Como tenía el módulo TM1638, aproveché para montarlo todo, y probar la exactitud del frecuencímetro.



Esquema del circuito.


Circuito montado probando cristal de 32668 (Cuarzo normal en relojes).


Prueba cristal de 2 MHz.

He de comentar que el último dígito es siempre cero debido a que es consecuencia de una multiplicación por 10.
He utilizado para comparar un antiguo montaje que hice con un PIC freser.html ,el cual me ha funcionado bastante bien.

Cuarzo
455 KHz
2MHz
4MHz
32768Hz
16f648 441 KHz
1,999 MHz
3,986 MHz
32768Hz
Arduino
440,9 KHz
1,999 MHz
3,998 MHz
32770Hz

Como se puede observar de los datos obtenidos, puedo asegurar que hasta 4MHz el frecuencímetro se comporta muy bien, bastante mejor de lo esperado.


PROGRAMA


Saludos.
Juan Galaz


Bibliografía:

http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
http://interface.khm.de/index.php/lab/interfaces-advanced/theremin-as-a-capacitive-sensing-device/

martes, 19 de septiembre de 2017

Óhmetro , medidor de resistencias con arduino

Página principal


Arduino
TM1638
Medidor de Resistencias


xsetaseta@gmail.com


En este montaje vamos a realizar un medidor de resistencias.
Como cualquier aparato de medida la precisión debe ser alta, y  este no es el caso, el error puede ser de hasta un 5%.
La idea es colocar una resistencia de referencia con valor conocido, y colocarla en serie con la resistencia a medir. Se conecta un voltaje entre las dos resistencia puestas en serie,  y se mide el valor de tensión en la unión de las dos resistencias. Hacemos proporción entre la tensión suministrada y la tensión medida y sacamos el valor de la resistencia a medir.

En un primer momento se realizó con cambio de escalas, pero al final se decidió hacer un autorrango, bastante mas cómodo.


Esquema de conexión.



Montaje del circuito



PROGRAMA

Nota: Procurar programar el arduino antes de montar el circuito. Debido a que se conectan entre si varias entradas y salidas del arduino, puede que si se utilizó antes el arduino, tambien puede que se connecten dos salidas entre si y podemos averiar alguna patilla.

Saludos.
JUAN GALAZ

jueves, 14 de septiembre de 2017

Reproducir MP3 con arduino y DFPLayer Mini

Página principal


Arduino
TM1638
MP3
DFPLayer Mini


xsetaseta@gmail.com


Siguiendo con la serie de montajes con el TM1638, ahora realizamos un reproductor de MP3.
Después de la serie de montajes con el TM1638 he de reconocer que hace muy fácil cualquier tipo de montaje, tiene de todo, leds, displays, y botones,  recomiendo encarecidamente su uso.
Para el montaje utilizamos el módulo llamado DFPLayer Mini, cuesta menos de 3€.
Para ver mas detalles recomiendo mi montaje MP3 - DFPLayer Mini - Arduino.
Los botones se utilizan:
    S1 y S2 seleccionan el directorio.
    S3 y S4 seleccionan el archivo mp3.
    S5  - para PLAY y PAUSA
    S6  - STOP
    S7  - Bajar volumen.
    S8  - Subir volumen.


Esquema de conexión.


Montaje del circuito




PROGRAMA

VIDEO


Saludos.
JUAN GALAZ


Bibliografía:
armpg.html
remson.html
https://github.com/DFRobot/DFRobotDFPlayerMini .
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
https://www.luisllamas.es/arduino-mp3-dfplayer-mini/
http://stonez56.blogspot.com.es/2015/03/arduino-dfplayer-mini-mp3-module.html


martes, 12 de septiembre de 2017

Voltímetro y Amperímetro - Arduino - TM1638

Página principal


Arduino
TM1638
Voltímetro y Amperímetro
xsetaseta@gmail.com


En este artículo realizo un voltímetro y un medidor de intensidad.
Para medir la intensidad del circuito se inserta una resistencia de pequeño valor en serie con el circuito a medir.
Para no interferir en la tensión del circuito a medir, se debería utilizar una resistencia de valor mas bajo posible.
Como la caída de tensión en la resistencia es demasiado baja con una resistencia de por ejemplo 3 ohmios para poder ser medida por el arduino sin emplear otro componente adicional, empleamos una de 18 ohmios.
Con una resistencia de 18 ohmios y con una intensidad de 30 mA, producimos una caída de tensión de 0.5V en la tensión que ofrecemos al circuito a medir.
Por ejemplo : si tenemos de alimentación de 5V con un consumo de 30mA, entregaríamos solo 4.5V.
Como vemos debemos sopesar la resistencia a colocar en serie con circuito a mediar, y ajustarla a que la caída de tensión no sea grande.
Si quisiéramos medir en una escala de hasta 5mA ,deberíamos utilizar una resistencia de 100 ohmios para que la caída de tensión fuera como máximo de 0.5V .
Las 3 resistencias de 1K son a modo de protección del arduino, por si metemos un arduino mal programado.
Los 3 condensadores se utilizan para filtrar la alimentación, con unos 100uF 5V servirían.


Esquema teórico.


Esquema eléctrico.


Esquema de conexión.



Montaje del circuito y con una carga de 1K.


/*
xsetaseta@gmail.com
Juan Galaz
8/SEP/2017
*/


#include <TM1638.h>

//data(I/O) pin 8, clock(CLK) pin 9 , strobe(STB) pin 7
TM1638 module(8, 9, 7);

#define ENTRADA1 A0
#define ENTRADA2 A1

char cadena[50];
unsigned int vv1,vv2,test3v3;

#define RESISTENCIA 18

void setup()
 {
  //Serial.begin(9600);
  pinMode(ENTRADA1, INPUT);
  pinMode(ENTRADA2, INPUT);
  pinMode(A7, INPUT);
  //intensidad al minimo
  module.setupDisplay(1,0);
  module.setDisplayToString("vol    ",0,0);
  delay(500);
  //toma la referencia de 3.3V
  test3v3=analogRead10(A7);
 }

void loop()
{
 byte keys;
 long voltios1,voltios2;
 unsigned int z1,z2;
 
  vv1=analogRead10(ENTRADA1);
  delay(150);

  vv2=analogRead10(ENTRADA2);
  delay(150);

  voltios1=vv1*33; voltios1*=10; voltios1/=test3v3;
  voltios2=vv2*33;  voltios2*=1000; voltios2/=test3v3;
 
  z1=voltios1;    //Voltios
  z2=voltios2/RESISTENCIA; //intensidad

  sprintf(cadena,"%03du%03di",z1,z2);
   
  module.setDisplayToString(cadena,0,0);
  module.setDisplayDigit(cadena[0]-48,0,1);
  module.setDisplayDigit(cadena[5]-48,5,1);
/*
  Serial.println(cadena); 
  sprintf(cadena,"vv1=%05d  vv2=%05d  test=%05d  mA*10=%d ",vv1,vv2,test3v3,voltios2/RESISTENCIA);
  Serial.println(cadena);
*/
}

//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);
}

Nota: Debemos tener encuenta que no es un circuito muy preciso, que depende de muchos factores, no hay que hacerse muchas ilusiones al respecto.

Hasta pronto.
JUAN GALAZ

Bibliografía:
https://github.com/rjbatista/tm1638-library

jueves, 7 de septiembre de 2017

Probador nivel de batería con arduino y TM1638

Página principal


Arduino
TM1638
Probador nivel de batería
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

miércoles, 6 de septiembre de 2017

Doble voltímetro 0-15V con Arduino y TM1638

Página principal


Arduino
TM1638
Doble voltímetro 0-15V
xsetaseta@gmail.com


Siguiendo con esta serie de artículos que emplean el TM1638, en este haremos un doble voltímetro.
Hay que mencionar que el voltaje del USB debería ser siempre de 5V, pero en la práctica se encuentra entre 4.5V y 5V . Como el conversor A/D toma la referencia sobre la tensión del USB , la medida real puede variar. Para solucionar este problema se hace una medida de referencia sobre los 3.3V del pin del arduino. Con la referencia tomada, se hace un cálculo con la medida tomada de la entrada de A0 y A1 y la referencia, corrigiéndose el valor.
En todas las medidas de voltaje, se hace una media de 10 medidas consecutivas, de esta forma se hace mas exacto la medida.
Como el arduino solo puede medir hasta 5V, para medir hasta 15V colocamos un divisor por 3 mediante 3 resistencias de 10K.
He utilizado el botón S1 para cambiar entre 1 y 2 decimales, algunas veces se necesitan 2 decimales.
En las pruebas prácticas se ha comprobado que las medidas son bastante exactas.


Esquema de conexión.


Montaje del circuito.


Visión con 2 decimales.

/*
xsetaseta@gmail.com
Juan Galaz
6/SEP/2017

*/


#include <TM1638.h>

//data(I/O) pin 8, clock(CLK) pin 9 , strobe(STB) pin 7
TM1638 module(8, 9, 7);


#define MULTIPLO 3
#define ENTRADA1 A0
#define ENTRADA2 A1

char cadena[50];
unsigned int vv1,vv2,test3v3;
char modo=1;

void setup()
 {
  //Serial.begin(9600);
  pinMode(ENTRADA1, INPUT);
  pinMode(ENTRADA1, INPUT);
  pinMode(A7, INPUT);
  //intensidad al minimo
  module.setupDisplay(1,0);
  module.setDisplayToString("VOL    ",0,0);
  delay(500);
  //toma la referencia de 3.3V
  test3v3=analogRead10(A7);
 }


void loop()
{
  byte keys;
  long voltios1,voltios2;
  int z1,z2;
 
  vv1=analogRead10(ENTRADA1);
  delay(150);

  vv2=analogRead10(ENTRADA2);
  delay(150);
 
  voltios1=vv1*33; voltios1*=MULTIPLO; voltios1*=modo; voltios1/=test3v3;
  voltios2=vv2*33; voltios2*=MULTIPLO; voltios2*=modo; voltios2/=test3v3;
  z1=voltios1;    z2=voltios2;
 
  if(modo==1)
       { sprintf(cadena,"%03du%03du",z1,z2);  }
      else
       { sprintf(cadena,"%04d%04d",z1,z2);    }
 
  module.setDisplayToString(cadena,0,0);
  module.setDisplayDigit(cadena[1]-48,1,1);
  module.setDisplayDigit(cadena[5]-48,5,1);
//  Serial.println(cadena); 
//  sprintf(cadena,"vv1=%05d  vv2=%05d  test=%05d ",vv1,vv2,test3v3);
//  Serial.println(cadena);
 
  keys = module.getButtons();
  if(keys==1)
    {
     if(modo==10)
       {
        modo=1;
        module.setLEDs(0);
       }
      else
       {
        modo=10;
        module.setLEDs(1);
       }
     while( 0 != module.getButtons());
    } 
}

//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

martes, 5 de septiembre de 2017

Temporizador 1 a 9999 segundos con Arduino y TM1638

Página principal


Arduino
TM1638
Temporizador 1 a 9999 segundos
xsetaseta@gmail.com

Siguiendo con el módulo que empleaba el CHIP TM1638, ahora hago un temporizador de 1 a 9999 segundos.
Es un contador que va desde el numero de segundos prefijado en los cuatro primeros  displays hasta cero.
El numero de segundos es fijado con los 4 primeros pulsadores.
Cuando queramos que se inicie la cuenta atrás pulsaremos el botón S8.
Si queremos detener la cuenta atrás deberemos pulsar el botón S5.
Cuando el contador llegue a cero, parpadeará el display y se activará el pin D13 del arduino.
También he colocado un altavoz piezoeléctrico en el pin D12 del arduino a modo de aviso, esto es accesorio. Si queremos colocar otro tipo de altavoz deberéis colocar una resistencia en serie.

Esquema de conexión.


Montaje del circuito.

/*
xsetaseta@gmail.com
Juan Galaz
5/SEP/2017

*/

#include <TM1638.h>
// define a module on data pin 8, clock pin 9 and strobe pin 7
TM1638 module(8, 9, 7);


byte display[8];
char cadena[20];
int alarma,contador,time1;

#define MILED 13
#define PIN_SOUND 12
#define RETRASO 597

char fcontador;

void setup()
{
 pinMode(MILED, OUTPUT);
 pinMode(PIN_SOUND, OUTPUT);
 digitalWrite(MILED, LOW);
 module.setupDisplay(1,0);
 module.setDisplayToString("TIMER  ",0,0);
 delay(500);
 
 module.setDisplayToString("0060----",0,0);
 display[2]=6;
 alarma=60;
}

void loop()
{
 byte keys;
 int z;
 
 keys = module.getButtons();
 
 switch(keys)
 {
  case 1:
     if(fcontador==0)
       {display[0]++; if(display[0]>9) display[0]=0;}
  break;
  case 2:
     if(fcontador==0)
       {display[1]++; if(display[1]>9) display[1]=0;}
  break;
  case 4:
     if(fcontador==0)
       {display[2]++; if(display[2]>9) display[2]=0;}
  break;
  case 8:
     if(fcontador==0)
       {display[3]++; if(display[3]>9) display[3]=0;}
  break;
  
  case 16:
    fcontador=0;
    contador=alarma;
    digitalWrite(MILED, LOW);
    module.setLEDs(16);
  break;
  
  case 128:
    fcontador=1;
    contador=alarma;
    time1=RETRASO;
    digitalWrite(MILED, LOW);
    module.setLEDs(128);
  break;
   
 }
 if(fcontador==0 && keys>0)
   {
    alarma=display[0]*1000+display[1]*100+display[2]*10+display[3];
    sprintf(cadena,"%04d%04d",alarma,contador);
    module.setDisplayToString(cadena,0,0);
    delay(300);
   }
   
   time1--;
   if(fcontador==1 && time1<=0)
     {
       module.setLEDs(0);
       time1=RETRASO;
       contador--;
       sprintf(cadena,"%04d%04d",alarma,contador);
       module.setDisplayToString(cadena,0,0);
       
       if(contador<1)
         {
           fcontador=0;
           for(z=0;z<10;z++)
             {
               sprintf(cadena,"%04d0000",alarma);
               module.setDisplayToString(cadena,0,0);
               delay(200);
               sprintf(cadena,"%04d    ",alarma);
               module.setDisplayToString(cadena,0,0);
               delay(200);                
             }
            sprintf(cadena,"%04d----",alarma);
            module.setDisplayToString(cadena,0,0);
            digitalWrite(MILED,HIGH);             
            for(z=0;z<300;z++)
              {
                digitalWrite(PIN_SOUND, HIGH);
                delay(1);
                digitalWrite(PIN_SOUND, LOW);
                delay(1);
              }          
         }
     }
   
 delay(1);
}



VIDEO DE FUNCIONAMIENTO





Hasta pronto.
JUAN GALAZ

Bibliografía:
https://github.com/rjbatista/tm1638-library


lunes, 4 de septiembre de 2017

Arduino - TM1638 -Visor de temperatura y humedad

Página principal


Arduino
TM1638
Modulo  LED&KEY
Temperatura y humedad

xsetaseta@gmail.com


Hace tiempo compré un módulo que empleaba el CHIP TM1638 , y no lo había utilizado hasta ahora. Estoy preparando una serie de montajes que utilizarán el mencionado módulo, y el primero en realizar es un visualizador de temperatura y humedad.
El módulo llevaba 8 led , 8 display, y 8 botones.
Este módulo se controla a través de 3 líneas;  strobe(STB) , clock(CLK), data(I/O).
Aparte de las líneas de control necesita los cables de alimentación +5V y GND.
Hay que tener en cuenta que con lo máxima luminosidad puede llegar a consumir 150 mA . Se puede regular el consumo mediante el comando oportuno al TM1638.
El montaje es muy sencillo, se puede realizar en menos de 30 minutos.
Para el sensor de temperatura y humedad emplearemos  el AM2302, que se comunica con el arduino mediante 1 sola línea.
Para la comunicación entre el arduino y el AM2302 se emplea la librería Wire . Se une el pin de datos  del AM2302 con el pin del arduino D3 . También debemos colocar una resistencia de 10k entre el pin de datos del AM2302 y la alimentación.
Para controlar el TM1638 empleamos la librería https://github.com/rjbatista/tm1638-library
La comunicación entre el CHIP TM1638 y el arduino se hace mediante la siguiente conexión:
STB-> D7
CLK-> D8
DIO-> D9

Esquema de conexión.


Montaje del circuito.


Medida después de meter el circuito al congelador.

/*
xsetaseta@gmail.com
Juan Galaz
4/SEP/2017
*/

#include <TM1638.h>

//data(I/O) pin 8, clock(CLK) pin 9 , strobe(STB) pin 7
TM1638 module(8, 9, 7);

#include <Wire.h>
#include <VirtualWire.h>
#include "DHT.h"

#define DHTPIN 3     // what pin we're connected to
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

float h,t;
int hi,ti;

char cadena[20];

void setup()
{
 Serial.begin(9600);
  dht.begin();
//activa intensidad con nivel 2
 module.setupDisplay(1,0);
 module.setDisplayToString("SENSOR  ",0,0);
 delay(500);
}

void loop()
{
 h = dht.readHumidity();
 t = dht.readTemperature();

if (isnan(t) || isnan(h))
   {
   Serial.println("Failed to read from DHT");
   }
 else
   {      
     hi=h;
     ti=t*10;
     
     Serial.print("Humedad="); Serial.print(hi);
     Serial.print("     Temperatura="); Serial.println(ti);
    
     sprintf(cadena,"H%2d %3d*",hi,ti);
     if(ti>-100)
       {module.setDisplayToString(cadena,4,0);}
       else
       {module.setDisplayToString(cadena,2,0);}
     Serial.println(cadena);      
   }
   
delay(1000);
}

Hasta pronto.
JUAN GALAZ

Bibliografía:
https://github.com/rjbatista/tm1638-library
https://blog.3d-logic.com/2015/01/10/using-a-tm1638-based-board-with-arduino/
http://www.reuk.co.uk/wordpress/using-the-buttons-on-a-tm1638-module-with-arduino/
http://tronixstuff.com/2012/03/11/arduino-and-tm1638-led-display-modules/
http://www.reuk.co.uk/wordpress/arduino-code-for-displaying-numbers-on-tm1638-module-display/