Controle de luminosidade display LCD com interface I2C

Salve amigos

Enfrentei uma dificuldade em efetuar o controle de luminosidade do display LCD utilizando a interface I2C. Resolvi usando um transistor BC549 (ou qualquer NPN comum de baixa potência) e um resistor de 10K.
Retirei o jumper na interface I2C que “liga” o display e liguei os terminais “Coletor” e “Emissor” do transistor aos terminais do jumper na interface I2C. A “base” do transistor foi ligado através de um resistor de 10k à um pino PWM (no caso usei o pino 5). O Arduino usado é o UNO.

Coloquei passos de 25 (1/10) tendo então 10 níveis de luminosidade mas, pode-se escolher de 0 até 255. Obviamente que esta é uma rotina de teste e dentro do meu programa é bem mais complexo e uso as “pás” de um manipulador iâmbico para CW para “subir” ou “baixar” os níveis mas, serve como entendimento do funcionamento.

Espero que seja útil. Eu resolvi publicar por não ter encontrado nada relacionado a essa minha necessidade na internet. Há várias explicações sobre o controle porém, sem o uso da interface I2C.

A rotina abaixo especifica melhor o funcionamento do controle de luminosidade.

#include <LiquidCrystal_I2C.h>
#include <Wire.h>

int brilho = 25; // inicia com 25 para não iniciar apagado
int PinoLED = 5; // usei o pino 5 mas, pode-se usar qualquer pino PWM

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Inicializa o display no endereco 0x27

void setup() {

pinMode (PinoLED, OUTPUT); // seta o pino como saída
analogWrite (PinoLED, 25); // inicia o display com nível 25
lcd.begin(16, 2); // inicializa o display
lcd.clear(); // limpa o display
Wire.begin();
}

void loop() {

if (brilho >= 250) { // atingiu o nível máximo
lcd.clear();
lcd.print(“Nivel + alto”);
delay(3000);
brilho = 25;
}

lcd.clear();
lcd.setCursor(0, 0);
lcd.print (“Funcionou he he”);
lcd.setCursor(0, 1);
lcd.print("Nivel ");
lcd.print(brilho);
analogWrite(PinoLED, brilho); // le o valor de “brilho” e aplica o valor à base do transistor
delay(2000);
brilho = brilho + 25; // incrementa em 1/10 do valor total 250

}

1 Like