segunda-feira, 17 de dezembro de 2012

Review Arduino LCD Keypad Shield

Introdução:


  Esse Shield para Arduino é muito útil  ele combina um teclado simples de 6 teclas, com um display muito bonito com iluminação. O display é azul com letras brancas, tem ótimo angulo de visualização, e possui led de iluminação alem de contro de contraste através de um potenciômetro.







A instalação é muito simples, basta acoplar o shield ao seu arduino, existe um biblioteca bem difundida para trabalhar com o display e keypad.




Esse shield se torna útil para debugar seus programas, existem situações onde não se tem um computador por perto com saída serial para debugar seus programas, então se torna necessário mostrar os dados de outra forma. Uma delas é imprimir os valores no display de 16x2 e ter seus dados atualizados em tempo real.




O preço é muito bom pela utilidade e por ser muito fácil de usar, pode ser usando em todos projetos elevando o nível de suas aplicações.



Pode ser utilizado também para jogos bem simples, já que possui os botões e um display de atualização rápida  só temos que lembrar que o espaço é reduzido



Ele pode ser ligado em todas versões do arduino, assim como outros microcontroladores.

Código do Arduino: 


#include <LiquidCrystal.h>
#include <LCDKeypad.h>

LCDKeypad lcd;

void setup()
{
  int i,k;
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("     DX");
  lcd.setCursor(0,1);
  lcd.print("   DEALEXTREME");
  delay(3000);
  for (k=0;k<3;k++)
    {
      lcd.scrollDisplayLeft();
      delay(200);
    }
  for (i=0;i<3;i++)
  {
    for (k=0;k<6;k++)
    {
      lcd.scrollDisplayRight();
      delay(200);
    }
    for (k=0;k<6;k++)
    {
      lcd.scrollDisplayLeft();
      delay(200);
    }
  }
  for (k=0;k<16;k++)
  {
    lcd.scrollDisplayLeft();
    delay(200);
  }
  lcd.clear();
}

void loop()
{
  lcd.clear();
  lcd.print("SKU: 118059");
  delay(1000);
}

Vídeo:





Review ENC28J60 Ethernet Shield V1.1

Introdução:

Nessa publicação irei mostrar como ligar o seu Arduino em Rede, mas antes vou abordar uma breve e simples introdução de como é uma Rede.

Uma rede pode ser divida em 5 camadas básicas (modelo OSI/ISO são 7 camadas) como mostrada na figura abaixo:


A camada de aplicação suporta todas as aplicações da rede, como por exemplo, os protocolos FTP, SMTP, HTTP e etc. O conteúdo dessa camada é desenvolvido pelo projetista do software.
A camada de transporte pela transferência dos dados hospedeio-hospedeiro, normalmente usa os protocolos TCP ou UDP. TCP garante que todos os dados cheguem corretamente, já o UDP não da essa garantia. Essa camada normalmente já esta implementada em alguma biblioteca.
A camada de rede é a responsável pelo roteamento do dos datagramas da origem ao destino. O protocolo utilizado é o protocolo IP
A camada de enlace é a responsável pela transferência de dados entre elementos vizinhos da rede. Utiliza-se o protocolo Ethernet.
A camada física é simplesmente o hardware, no nosso caso o Ethernet Shield.



Trabalhar em rede não é uma tarefa muito fácil como muitos pensam, e essa Shield facilita muito o trabalho para uma conexão de um Arduino na rede, pois não é necessário o computador para fazer o papel de servidor. Me lembro que a primeira vez que fui conectar meu Arduino na rede para acionar um relé via browser, tive que escrever um programa complicadíssimo em C/Linux.



Nosso projeto consistira em fazer uma leitura da temperatura ambiente, essa leitura será processada e enviada para a rede (através da Shield) onde por um browser executado em um computador ou tablet ligados à rede poderá ser visualizada.



O segredo da Shield que estamos trabalhando é o Circuito Integrado ENC28J60 da Microchip que é o controlador Ethernet que nos permitirá fazer o acesso nossa rede. A figura abaixo esclarece um pouco seus níveis de abstração.


O propósito desse artigo não é abordar o circuito integrado e sim sua funcionalidade, então para mais informações sobre o controlador Ethernet ENC28J60 acesse seu DataSheet.

Primeiramente iremos fazer as conexões do sensor de temperatura LM35 nos terminais da Shield, que por consequência estarão ligados aos do Arduino. Abaixo figura que representa as ligações no Arduino, mas lembre-se essas mesmas ligações devem ser feitas na SHIELD:


Como o LM35 é um sensor analógico, ele deve ser ligado em uma das 6 portas analógicas, seu VCC ligado em 5V e seu terra ligado no GND.

Dica: Não inverta o VCC com o GND, isso irá esquentar demais o sensor podendo causar a inutilização do equipamento.

Pronto primeira parte do projeto está OK, o sensor ja esta ligado na Shield, agora vem a parte que nos interessa. Como fazer essa captura e coloca-la na rede para podermos acessar via browser ou qualquer outro cliente HTTP?



Apos ligar o sensor, você deverá instalar a biblioteca que controla o ENC28J60 pois não é a mesma que vem como padrão no Arduino, você deverá fazer o download desse biblioteca, após feito o download a biblioteca devera ser descompactada na pasta libraries. OBS. É extremamente necessário o download dessa biblioteca ou o projeto não irá funcionar.

Após a conclusão da instalação da biblioteca, vamos ao que realmente interessa nesse momento, que é o código necessário para podermos executar nosso Ethernet Shield na rede.


#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};       
static uint8_t ip[4] = {192, 168, 0,15};
static uint16_t port = 80; 

int analog;
float temperatura;

void setup()
{
  e.setup(mac, ip, port);
}

void loop()
{
  if (e.serviceRequest())
  {
    e.print("<html><head><title>WebServer Simples</title></head><body>");
    e.print("<H1>Temperatura</H1><br/>");
    e.print("Temperatura em Celsius: ");
    analog = analogRead(0);
    temperatura = (analog * 0.00488); 
    temperatura = temperatura * 100; 
    e.print(temperatura);
    e.respond();
  }
  delay(100);
}

Review Arduino Microphone Sound Detection Sensor

Introdução:

Esse modulo tem diversas aplicações e é muito útil.


Pode ser utilizado de varias maneiras, possui saída analógica do sinal sonoro, fazendo a leitura do microfone de eletreto você tem a resposta do sinal.
Você pode ajustar o limiar com um potenciômetro  e com isso pode usar uma outra saída OD que identifica se teve um, sinal sonoro maior que o limiar ou não




Características:


  • Alta sensibilidade.
  • O módulo tem duas saídas: AO, saída analógica, em tempo real.
  • A saída do sinal de tensão de microfone / OD, quando a intensidade do som atinge um limiar.
  • Ajuste do potenciômetro para sensibilidade.
  • Aplicação de detecção de som do microfone.


Exemplo de código:

Esse exemplo é muito legal e diferente, ele não mostra os valores numéricos da leitura analógica, mas traça um gráfico bem simples na saída serial, fica bem parecido com um VU de som. Achei essa forma mais legal de mostrar os dados na tela do computador:

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  int SensorVal = analogRead(A0);

  SensorVal = map(SensorVal, 0, 1023, 0, 100);

  for(int i = 0; i < SensorVal; i++) 
  {
    Serial.print("|");
  }
  Serial.println();
  delay(50);
}


Esse modulo pode detectar som para um alarme:



Pode ser usado para piscar alguns leds...
Dentre varias outras utilidades...




terça-feira, 4 de dezembro de 2012

CPLD FPGA USB Blaster

Introdução:

O USB-Blaster é a interface de um porta USB de um computador host para um FPGA Altera montados em uma placa de circuito impresso. O cabo envia os dados de configuração do PC para um cabo de 10 pinos padrão conectado à FPGA. Você pode usar o USB-Blaster para iterativamente baixar dados de configuração para um sistema durante prototipagem ou para programar os dados para o sistema durante a produção.



Especificações:

ALTERA USB ByteBlaster
USB interface
FPGA/CPLD download
SignalTap II embeded logic analyzer
NIOS II debug



Características:

Compativel com altera usb blaster
Suporta todas as series de dispositivos altera.

CPLD: MAX3000, MAX7000, MAX9000, MAXII...
FPGA: Stratix, StratixII, StratixIII, StratixIV, Cyclone, CycloneII, CycloneIII, CycloneIV, ACES1K, APEX20k, FLEX10K..
Active serial configuration device: EPCS1, EPCS4, EPCS16, EPCS64...
Enhanced configuration device: EPC1, EPC4...
Suporta AS, PS and JTAG mode
Suporta SignalTap II embeded logic analyzer
Suporta NIOS II debug* USB interface
Suporta Quartus II 4.0 ou versões maiores
Suporta os Sistemas Operacionais: Windows XP, windows Vista, Windows 7 and linux.

Internamente:


Pinagem:







Instalando Drivers:

Você deve instalar o Altera USB-Blaster driver antes que você pode usá-la para dispositivos de programa com Quartus.

A primeira vez que o USB-Blaster ou USB-Blaster II é conectado, o Windows na caixa de diálogo Novo Hardware pede para instalar o driver. (Nota: Não use o Assistente para adicionar hardware no painel de controle.)

A Altera On-Board USB-Blaster II aparece como Altera USB-Blaster (desconfigurado), quando ligado a primeira vez no seu sistema. Depois ele foi configurado pelo software Quartus II, ele aparecerá como Altera USB-Blaster II (JTAG) e depois USB-Blaster Altera II (interface SystemConsole). Pode ser necessário para instalar controladores para cada uma destas interfaces, da mesma forma como descrito abaixo.


Você deve ter sistema de administração (Administrador) privilégios para instalar o USB-Blaster driver do cabo de download.


Instalação do driver

1. Conecte o cabo de transferência USB-Blaster em PC. A caixa de diálogo Novo hardware aparecerá.
2. Selecione Localizar e instalar software de driver (recomendado).
3. Selecione Não pesquisar online.
4. Quando você for solicitado a inserir o disco que veio com o USB-Blaster, selecione Eu não tenho o disco. Mostrar outras opções.
5. Selecione Procurar o meu computador para software de driver (avançado) quando você vê os Windows não conseguiu encontrar o software driver para o seu dispositivo.
6. Clique em Procurar e navegue até o diretório \ \ drivers.> está no diretório usb-bla ster.Para cabos USB-Blaster II, o driver está no diretório usb-blaster-ii
7. Clique em OK.
8. Selecione a opção Incluir subpastas e clique em Avançar.
9. Se você for solicitado o Windows não pode verificar o editor deste software de driver, selecione Instalar este software de driver mesmo assim na caixa de diálogo Janela de Segurança.
10. A instalação começa.
11. Quando o software para este dispositivo foi instalado com sucesso aparece, clique em Fechar.
12. Para concluir a instalação, configurar o hardware de programação no software Quartus II






24W RGB Light Strip

Fita RGB:


Essa fita de LED RGB é muito especial, tem um comprimento de 5 metros, que é o máximo para essas fitas que possuem os led's em serie, tem potencia de 24W o que proporciona uma iluminação muito forte e ativa. As luzes são bem definidas, com o controle das cores é possível fazer varias brincadeiras e iluminar diversos ambientes.



A fita possui fica auto-colante 3M, assim fica fácil deixar fixo em qualquer tipo de superfície. O pacote vem muito bem embalado, e nenhum dos leds veio queimado.
Se desejar pode cortar a fita em diversas partes, já possui marcação de onde cortar e os pinos para fazer a solda de novos fios, muito útil.



Eu recomendo a compra dessa fita porque da pra fazer diversas coisas com ela, eu pretendo usar para iluminar meu quarto de forma inteligente, um sensor faz a leitura das cores no meu monitor, essas cores são passadas para o Arduino, assim ele manda o comando para fita replicar as cores do monitor, criando um ambiente diferenciado.
As luzes podem ser usadas em comercio e afins, chama muita atenção pelo brilho.



Especificações:

Cor: Branca
Material: PU
Tipo de Emissor: 3528 SMD LED
Total de Emissores:  270
Tensão de entrada: 12V
Potencia: 24W
Fluxo luminoso: 900 ~ 1200lm
Tipo de conector do cabo de fita: 4P ( VCC, RED_GND,GREEN_GND, BLUE_GND)



Programa Arduino para Controle:

Esse programa tem vários efeitos cadastrados e um botão de interrupção, quando o botão é pressionado o efeito muda, todos efeitos usam PWM.

int ledPin_red = 9;    
int ledPin_green = 10;
int ledPin_blue = 11;

int botao = 0;
int buzz  = 7;
volatile int select = 0;
unsigned long button_time = 0;  
unsigned long last_button_time = 0; 
int tempo=30;

long numero_aleatorio;


void setup()  
  Serial.begin(9600);
  randomSeed(analogRead(0));
  pinMode(buzz,OUTPUT);
  attachInterrupt(botao, troca, RISING);

void troca()
{
  button_time = millis();
  if (button_time - last_button_time > 300)
    {
      digitalWrite(buzz,HIGH);
      apaga_leds();
        if(select==0)
        {
          select=1;
        }
        else if(select==1)
          {
            select=2;
          }
        else if(select==2)
          {
            select=3;
          }
        else if(select==3)
          {
            select=4;
          }
        else if(select==4)
          {
            select=5;
          }
        else if(select==5)
          {
            select=6;
          }
        else if(select==6)
          {
            select=7;
          }
        else if(select==7)
          {
            select=8;
          }
        else if(select==8)
          {
            select=9;
          }
        else if(select==9)
          {
            select=10;
          }
        else if(select==10)
          {
            select=11;
          }
       else if(select==11)
          {
            select=12;
          }
       else if(select==12)
          {
            select=13;
          }
       else if(select==13)
          {
            select=14;
          }
        else 
           select=0; 
           
    last_button_time = button_time;
    digitalWrite(buzz,LOW);
  }
}

void loop()  
{
  //fadeLED(ledPin_red,100); 
  fade_red();
  fade_green();
  fade_blue();
  fade_all();
  fade_red_green();
  fade_red_blue();
  fade_green_blue();
  fade_rgb(); 
  fade_verm_voleta();
  fade_verde_amarelo();
  fade_blue_teal();
  pisca_aleatorio();
  pisca_aleatorio_vermelho();
  pisca_aleatorio_verde();
  pisca_aleatorio_azul();
}

void fade_red()
{
  if(select==0)
    {
     Serial.println("Estou no select 0");
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_red, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_red, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_green()
{
  if(select==1)
    {
     Serial.println("Estou no select 1");
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_green, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_green, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_blue()
{
  if (select==2)
    {
     Serial.println("Estou no select 2");
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_blue, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_blue, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_all()
{
  if (select==3)
    {
     Serial.println("Estou no select 3");
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_green, fadeValue);
        analogWrite(ledPin_blue, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_green, fadeValue);
        analogWrite(ledPin_blue, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_red_green()
{
  if(select==4)
    {
       Serial.println("Estou no select 4");
       for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_green, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_green, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_red_blue()
{
  if(select==5)
    {
       Serial.println("Estou no select 5");
       for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_blue, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_red, fadeValue);
        analogWrite(ledPin_blue, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fade_green_blue()
{
  if(select==6)
    {
     Serial.println("Estou no select 6");
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(ledPin_green, fadeValue);
        analogWrite(ledPin_blue, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(ledPin_green, fadeValue);
        analogWrite(ledPin_blue, fadeValue);           
        delay(tempo);                            
      } 
    }
}

void fadeLED(int pin, int tempo)
{
     for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
      { 
        analogWrite(pin, fadeValue);            
        delay(tempo);                            
      } 
    
      for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) 
      { 
        analogWrite(pin, fadeValue);     
        delay(tempo);                            
      } 
}

void fade_rgb()
{
  if(select==7)
    {
      Serial.println("Estou no select 7");
      int r, g, b;
     
      //vermelho para violeta
      for (r = 0; r < 255; r++) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      } 
      //violeta para vermelho
      for (b = 255; b > 0; b--) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      } 
      
      //verde para amarelo
      for (g = 0; g < 255; g++) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      } 
      //amarelo para verde
      for (r = 255; r > 0; r--) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      } 
      
      // fade from green to teal
      for (b = 0; b < 255; b++) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      } 
      // fade from teal to blue
      for (g = 255; g > 0; g--) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      }
    }
}

void fade_verm_voleta()
{
    if(select==8)
    {
      Serial.println("Estou no select 8");
      int r,b;
      for (r = 0; r < 255; r++) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      } 
      for (b = 0; b < 255; b++) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      }
      
      for (r = 255; r > 0; r--) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      }     
      for (b = 255; b > 0; b--) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      }
    }
}

void fade_verde_amarelo()
{
    if(select==9)
    {
      Serial.println("Estou no select 9");
      int g,r;
      for (g = 0; g < 255; g++) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      } 
      for (r = 255; r > 0; r--) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      } 
      
      for (g = 255; g > 0; g--) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      } 
      for (r = 0; r < 255; r++) 
      { 
        analogWrite(ledPin_red, r);
        delay(tempo);
      } 
    }
}

void fade_blue_teal()
{
    if(select==10)
    {
      Serial.println("Estou no select 10");
      int b,g;
      for (b = 0; b < 255; b++) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      } 
      for (g = 255; g > 0; g--) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      }
      
      for (b = 255; b > 0; b--) 
      { 
        analogWrite(ledPin_blue, b);
        delay(tempo);
      } 
      for (g = 0; g < 255; g++) 
      { 
        analogWrite(ledPin_green, g);
        delay(tempo);
      }
    }
}

void pisca_aleatorio()
{
  if(select==11)
    {
      Serial.println("Estou no select 11");
      numero_aleatorio = random(256);
      analogWrite(ledPin_red, numero_aleatorio);
      delay(500);
      numero_aleatorio = random(256);
      analogWrite(ledPin_green, numero_aleatorio);
      delay(500);
      numero_aleatorio = random(256);
      analogWrite(ledPin_blue, numero_aleatorio);
    }  
}

void pisca_aleatorio_vermelho()
{
  if(select==12)
    {
      analogWrite(ledPin_green, 0);
      analogWrite(ledPin_blue , 0);
      Serial.println("Estou no select 12");
      numero_aleatorio = random(256);
      analogWrite(ledPin_red, numero_aleatorio);
      delay(500);
    }
}

void pisca_aleatorio_verde()
{
  if(select==13)
    {
      analogWrite(ledPin_red, 0);
      analogWrite(ledPin_blue , 0);
      Serial.println("Estou no select 13");
      numero_aleatorio = random(256);
      analogWrite(ledPin_green, numero_aleatorio);
      delay(500);
    }
}

void pisca_aleatorio_azul()
{
  if(select==14)
    {
      analogWrite(ledPin_green, 0);
      analogWrite(ledPin_red , 0);
      Serial.println("Estou no select 14");
      numero_aleatorio = random(256);
      analogWrite(ledPin_blue, numero_aleatorio);
      delay(500);
    }
}

void apaga_leds()
{
  analogWrite(ledPin_red ,  0);
  analogWrite(ledPin_green, 0);
  analogWrite(ledPin_blue , 0);
}

Vermelho:
  


Verde:


Azul:


Todas cores juntas:


Vídeo:


Seven Segments Display + Key + Double Color LED Module

Introdução:


Neste post vou explicar como controlar um modulo TM1638 8X Seven Segments Display + 8X Key + 8X Double Color LED a partir de um Arduino UNO.

O módulo é baseado em uma TM1638. Ele tem oito botões e 8 leds RGB. A comunicação é feita com um protocolo em série. Assim, você só tem que usar três pinos o Arduino.



O objetivo do projeto é apresentar um texto circular através do módulo. Além disso, é fácil de implementar usando a biblioteca se você apertar qualquer botão, o LED relacionado será iluminado.

Pinos:

MethodDescription
clearDisplayClears the display. (TM1638/TM1640)
clearDisplayDigitClear a single 7-segment display. (TM1638/TM1640)
getButtonsReturns the pressed buttons as a bit set (left to right). (TM1638)
setDisplaySet the 7-segment displays to the 8 values (left to right). (TM1638/TM1640)
setDisplayDigitSet a single display to a digit. (TM1638/TM1640)
setDisplayToBinNumberSet the display to a binary number. (TM1638)
setDisplayToDecNumberSet the display to a unsigned decimal number, with or without leading zeros. (TM1638)
setDisplayToSignedDecNumberSet the display to a signed decimal number, with or without leading zeros. (TM1638)
setDisplayToErrorSet the display to an error message. (TM1638/TM1640)
setDisplayToHexNumberSet the display to a unsigned hexadecimal number, with or without leading zeros. (TM1638)
setDisplayToString(char*)Set the display to the string. (TM1638/TM1640)
setDisplayToString(String)Set the display to the string. (TM1638/TM1640)
setLEDControls a LED. (TM1638)
setLEDsSet all the LEDs. (TM1638)
setupDisplaySet the display (all 7-segments) and LEDs on or off and the specifies the intensity. (TM1638/TM1640)


O modulo pode ser intercalado, ligando vários para ter um efeito diferente:


Os módulos devem ser ligados em serie:

Ele não é muito grosso apesar de ter 8 displays de led, 8 leds com duas cores e 8 botões, esse modulo se torna muito útil para fazer debug de seus projetos, pois em uma só peça você tem acesso a diferentes opções de mostrar seus dados:


Todos vem com parafusos para fixação, assim podem ser utilizados como letreiros e tudo mais.


Esse vídeo demostra o funcionamento bem simples do modulo:




Para fazer tudo isso funcionar estamos usando a biblioteca:

TM1638/TM1640 biblioteca

  • Uma biblioteca para interagir com um arduino uma TM1638 TM1640
  • Suporte para o TM1638 e TM1640;
  • Métodos auxiliares para a exibição de números em hexadecimal decimal, binário
  • Suporte para múltiplos TM1638 acorrentado;
  • Leitura de botoes simultâneas;
  • Suporte para escurecer a tela e LEDs;
  • Suporte para a escrita de texto;
  • Suporte para o módulo em posição invertida;
  • Exemplos para a utilização da biblioteca com TM1638 múltipla e com uma TM1640.


Essa biblioteca pode ser baixada aqui, e possui vários exemples de teste.