Carlos Cardoso 5 anos e meio atrás
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.
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!
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.
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:
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:
No nosso caso usaremos o Arduino Uno R3, então Serial Data se conecta ao pino A4, e Serial Clock ao pino A5.
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:
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() { }
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.
Componentes utilizados:
Bibliotecas utilizadas:
Leia também: