Aprendendo Arduino — Parte 4 — LCDs e Marfagatos

marfagato1

Uma das partes chatas de brincar com eletrônica, reconheço, é a imensa quantidade de fios, e hoje em dia tudo usa fio. Futuro Wireless my ass! E quanto melhor a solução, mais fio tem. Veja por exemplo o display da imagem acima. É um LCD de 16 colunas e duas linhas, excelente para qualquer projetinho, custa míseros R$ 12,00 nas melhores casas do ramo mas… usa fio a rodo.

O 8-Bit Guy fez um vídeo muito legal demonstrando o funcionamento de um display desses, com botões acionando cada um dos terminais, enviando dados em binário, etc. Lindo de ver, um imenso saaaaaco de fazer.


The 8-Bit Guy — How a Character LCD works Part 1

São 16 cabos, entre conexões de força, dados, iluminação. Deveria existir um jeito mais fácil de integrar esse bicho a um projeto.

SEUS PROBLEMAS ACABARAM!

i2c

Esse é um módulo I²C, custa 12 reau também e evita a marfagatização de seu circuito. Mas aí você me pergunta: Cardoso, que diabos é I²C? Eu explico: é a forma pedante e correta de escrever I2C, Inter-Integrated Circuit Protocol, um mecanismo de comunicação serial de curta distância, projetado para integrar componentes sem necessidade de parear portas de dados, clocks complicados, triggers, etc. Pense nele como uma USB em miniatura.

Teoricamente um circuito pode ter até 1.008 dispositivos escravos, e contrariando a diretiva bíblica, no I²C um escravo pode ter mais de um mestre. Ou seja: dois circuitos independentes podem acessar o mesmo sensor.

O protocolo foi desenvolvido em 1982 pela Phillips, originalmente tinha velocidade de até 100 kbit/s, mais que suficiente para coisas simples como mísseis balísticos e tape decks.

O Arduino é compatível com I2C, entre outros protocolos, e seu uso é muito simples.

Instalando o módulo

O primeiro passo é soldar o módulo ao display. Você pode usar uma ponte de conectores ou soldar diretamente. Para evitar mal-contato, e dado o baixo custo dos componentes, recomendo soldar diretamente.

i2c2

Alinhe o pino 1 do módulo no conector 1 do display. Não tem como errar, veja a imagem.

Verifique se não há excesso de solda colocando pinos em curto, e vamos conectar.

O módulo tem quatro pinos:

pinos

  • Ground;
  • VCC;
  • Serial Data (SDA);
  • Serial Clock (SCL).

Na versão mais atual do protocolo é possível atingir velocidades de 5 megabit/s, mas somente na configuração de um único mestre, e é unidirecional, somente leitura. De qualquer jeito se você tentar isso com seu Arduino ele encenará a piada da formiguinha e do elefante.

Com um cabo de protoboard fêmea/macho ligue o Ground a um dos pinos GND do Arduíno.

O VCC deve ser conectado ao pino 5 V.

Aqui temos uma pequena complicação. Cada modelo de Arduino utiliza pinos diferentes para a conexão serial. Veja se o seu está na lista:

  • UNO: SDA (A4) SCL (A5)
  • MEGA: SDA (20) SCL (21)
  • Leonardo: SDA (20) SCL (21)

No nosso caso usaremos o Arduino Uno R3, então Serial Data se conecta ao pino A4, e Serial Clock ao pino A5.

lcduno

Feito isso seu display deverá acender, mostrando quadrados pretos ou outra coisa sem-sentido. Use uma chave phillips miniatura para regular o trimpot azul e ajustar o brilho até a imagem ficar nítida e legível.

Achando o endereço

Cada dispositivo I2C tem um endereço, e a forma mais rápida é rodar um sketch que pesquisa sua rede atrás de dispositivos compatíveis. É bem simples. Abra a IDE do Arduino, crie um sketch vazio e copie por cima o código-fonte disponível esta página. Execute-o e abra o monitor serial. Se tudo estiver corretamente conectado, você verá algo assim:

arduinomonitor

Anote esse número, é a identificação do seu display.

Na IDE do Arduino vá no menu Sketch. Selecione Incluir Bibliotecas / Gerenciar Bibliotecas.

Coloque “LiquidCrystal I2C” no campo de buscas, selecione (é a criada por Frank de Brabander) e instale.

Hello, World

Enviar texto para o display usando o protocolo I2C é extremamente simples. Com a biblioteca devidamente instalada, crie um novo sketch com o seguinte código-fonte:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2); 

/*  Primeiro parâmetro: endereço do display

 *  Segundo parâmetro: número de colunas do display

 *  Terceiro parâmetro: número de linhas do display

 */

void setup() {

lcd.init(); // iniciando o display

lcd.backlight(); //acendendo a iluminação

lcd.setCursor(0,0); //posiciona o início da escrita na coluna 0, linha 0.

lcd.print("Hello, World");

}

void loop() {

}

vlcsnap-error466

Vamos experimentar com valores dinâmicos. Crie o seguinte sketch:

#include <Wire.h> 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2); 

/*  Primeiro parâmetro: endereço do display

 *  Segundo parâmetro: número de colunas do display

 *  Terceiro parâmetro: número de linhas do display

 */

Unsigned int valor;

void setup() {

lcd.init(); // iniciando o display

lcd.backlight(); //acendendo a iluminação

lcd.setCursor(0,0);

lcd.print("CONTADOR:");

}

void loop() {

for (valor = 0; valor < 32768; valor +=1) {  

lcd.setCursor(9,0);

lcd.print(valor);

}

}

Só por diversão depois de executar corretamente o sketch, remova a linha lcd.setCursor(9,0) e veja o display ficar um tanto… confuso.


Carlos Cardoso — Aprendendo Arduino – parte 4

Componentes utilizados:

Bibliotecas utilizadas:


Leia também:

Relacionados: , ,

Autor: Carlos Cardoso

Entusiasta de tecnologia, tiete de Sagan e Clarke, micreiro, hobbysta de eletrônica pré-pic, analista de sistemas e contínuo high-tech. Cardoso escreve sobre informática desde antes da Internet, tendo publicado mais de 10 livros cobrindo de PDAs e Flash até Linux. Divide seu tempo entre escrever para o MeioBIt e promover seus últimos best-sellers O Buraco da Beatriz, Calcinhas no Espaço e Do Tempo Em Que A Pipa do Vovô Subia.

Compartilhar
  • Michael Loeps™

    Fiz um projetinho de controle remoto universal e a pior parte realmente é a caralhada de fio do display, preciso dessa belezinha urgente. https://uploads.disquscdn.com/images/034ecd1950f76e7cf5d9d36fc96e1dafc9b97d23f694b35b860ea9d4ff14de92.jpg

    • Reinaldo Matos

      Curiosidade…

      Qual a função daquele potenciômetro? Aumentar e diminuir o volume da TV?

      • Manoel Jorge Ribeiro Neto

        Acredito que seja para controlar a tensão de entrada para o visor LCD, deixando a tela mais clara ou escura, por isso a necessidade de regulá-lo até o conteúdo mostrado na tela ficar bem visível.

      • Xultz

        Pela posição do fio, é o controle de contraste. Esse display precisa de um sinal de tensão que determina o contraste, é um ajuste bem miserável porque o contraste varia com a temperatura ambiente… E essa nem é a pior parte, antigamente, quando comecei a usar estes displays, a tensão de contraste tinha que ser negativa, então o circuito sempre tinha que dar um jeito de produzir uma tensão de pelo menos -3V. A fiozarada é meio que inevitável, esse é um pré-protótipo de um produto que estou desenvolvendo, estou acionando o display com uma Raspberry Pi 3, mas tem 5 fios a mais nessa ligação porque na mesma placa que está soldado este display, também tem 5 tact switches. No caso, estou acionando o display com 4 bits de dados, e a linha de R/W está setada como W em hardware. Mesmo assim, só pro display são 9 fios.

        https://uploads.disquscdn.com/images/2e8c0940a1f90d306d6bebf35e57b1999c9cd8458d2456c73294bb85000857c7.jpg

      • Michael Loeps™

        Alternar as funções do controle, o disparo é feito pelo botão ao lado.

        • Oberaldo Gilmentoo

          Lê o potenciômetro no DAC, e conforme a leitura vai mudando vai exibindo as diferentes funções no display… boa idéia e mais simples do que um encoder rotativo…

  • Cocainum

    Além do I2C, dependendo da aplicação, é possível encontrar esses módulos que trabalham com outras interfaces e protocolos. Quando montei meu HTPC, usei um desses displays com interface RS-232C para ligar no conector interno serial da placa mãe e mostrar diversas informações (data, hora e temperaturas da CPU, GPU e Motherboard). Eu fiz um pequeno programa que inicia com o Windows e fica com o ícone na área de notificação. Ele lê as informações do SpeedFan e manda para a porta serial interna da placa. Na época, comprei 2 módulos. Um ainda está na máquina. Infelizmente não posso mostrá-lo funcionando pois a placa mãe morreu (snif, mas quero ver se ainda ressuscito ela trocando uns capacitores). O outro módulo é esse aqui (nunca foi usado, está até com o plástico protetor):

    https://uploads.disquscdn.com/images/92eebf446e92e96baa519fde79df788e775990107c285e99edb0f1ca5029e832.jpg https://uploads.disquscdn.com/images/d51a4e1043bf2face6b4aa2d045bb5cafddb637574c92d1c92a4197d0fa006f9.jpg

    • Cocainum

      Consegui colocar o display em outra máquina:

      https://www.youtube.com/watch?v=qS7TjWhPBaU

    • Legal, muito prático ser direto rs232.

      • Julio Cesar Goldner Vendramini

        Ele vem com um PIC. Com gigantes 2kb para programa e 192 bytes de ram. Já programei utilizando esse microcontrolador.
        Da pra fazer essa placa ai com um arduino. É só fazer ele ler da porta serial. No caso, pode usar uma porta usb msm. Pq já possui conversor usb serial.

  • E a música deste vídeo teve o patrocínio dos Elevadores Atlas.

    Elevadores Atlas: ajudando você a subir na vida!

  • Islan Oliveira

    Desculpe se tiver algum significado oculto, mas por que a parte 5 veio antes da parte 4?

Aproveite nossos cupons de desconto:

Cupom de desconto Locaweb, Cupom de desconto HP, Cupom de desconto Descomplica, Cupom de desconto Nuuvem, Cupom de desconto CVC, Cupom de desconto Asus, Cupom de desconto World Tennis