🧩 Projeto: Barras de Progresso e Animações no LCD 16x2

🎯 Objetivo:

Aprender a utilizar os caracteres personalizados do LCD para criar efeitos visuais, barras de progresso e animações simples, elevando a experiência do usuário além do texto estático.


🔧 Materiais necessários:

  • Arduino Uno

  • Display LCD 16x2 com módulo I2C

  • Potenciômetro de 10k (ou sensor analógico)

  • Protoboard e cabos jumper


💡 O Conceito:

O LCD 16x2 permite criar até 8 caracteres personalizados. Com isso, podemos montar blocos que simulam barras de carregamento, níveis de bateria, ou efeitos de movimentação. Ideal para representar valores de sensores ou o andamento de processos.


🧠 O que vamos implementar:

  • Barras de progresso horizontais

  • Feedback visual ao girar o potenciômetro

  • Animação contínua de carregamento


📟 Exemplo de Barras Personalizadas

Criamos blocos com diferentes níveis de preenchimento (como ▏▎▍▌▊█), armazenando-os nos 8 slots disponíveis da CGRAM do LCD.


este exemplo foi gerado e rodado no simulador virtual , embora pareca muito semelhante a outro modelo da postagem anterior o codigo tem outras caractristicas 


✅ Código para Arduino:


#include <Wire.h> #include <Adafruit_LiquidCrystal.h> Adafruit_LiquidCrystal lcd_1(0); // LCD I2C no endereço 0x27 // Caracteres personalizados: blocos com diferentes níveis byte barra0[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 }; byte barra1[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000 }; byte barra2[8] = { B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000 }; byte barra3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100 }; byte barra4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110 }; byte barra5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; int valorAnalogico = 0; void setup() { lcd_1.begin(16, 2); // Criando os blocos personalizados lcd_1.createChar(0, barra0); lcd_1.createChar(1, barra1); lcd_1.createChar(2, barra2); lcd_1.createChar(3, barra3); lcd_1.createChar(4, barra4); lcd_1.createChar(5, barra5); lcd_1.clear(); lcd_1.setCursor(0, 0); lcd_1.print("Nivel:"); } void loop() { valorAnalogico = analogRead(A0); // Leitura de um potenciômetro int nivel = map(valorAnalogico, 0, 1023, 0, 80); // Escala para 16 colunas x 5 blocos lcd_1.setCursor(0, 1); for (int i = 0; i < 16; i++) { int bloco = nivel - (i * 5); if (bloco > 4) bloco = 5; if (bloco < 0) bloco = 0; lcd_1.write(bloco); } delay(200); }

🧪 Teste:

Gire o potenciômetro e observe a barra preenchendo em tempo real. É possível adaptar esse mesmo efeito para representar o nível da bateria, força do sinal, volume de som, ou porcentagem de processo.




🧠 Expansão possível:

  • Usar diferentes sensores (temperatura, umidade, distância) para gerar feedback visual.

  • Criar animações com deslocamento horizontal ou vertical.

  • Fazer uma barra de progresso para carregamento de dados.


🔍 Spoiler do próximo conteúdo:

No próximo projeto, vamos unir sensores reais ao display. Você verá como o LCD 16x2 pode se tornar uma central de informações ao vivo, exibindo dados de temperatura, luminosidade e muito mais. Uma fusão entre leitura e visualização em tempo real! 🌡️🌞📟 Fique por aqui — vai valer a pena!

Comentários

Postagens mais visitadas deste blog

contador 9999 com pic 16f628

CNC fotos cordenadas x y z dicas

codigo assembler braço mecanico para 5 motores