#include <LiquidCrystal_I2C.h> // Biblioteca para o LCD
#include <Wire.h> // Biblioteca que permite enviar e receber dados por meio de uma interface I2C
#define LDR_PIN 32 // Pino conectado ao sensor de luz (LDR)
// Características do LDR
const float GAMMA = 0.7; // Valor gama para a curva de resposta do LDR
const float RL10 = 50; // Resistência de referência (presumivelmente em ohms)
#define SDA 14 // Define o pino SDA (Serial Data)
#define SCL 13 // Define o pino SCL (Serial Clock)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Criação do objeto para o display LCD
void setup() {
Serial.begin(115200); // Inicializa a comunicação serial (para depuração)
Wire.begin(SDA, SCL); // Inicializa a comunicação I2C com os pinos SDA e SCL
pinMode(LDR_PIN, INPUT); // Configura o pino LDR_PIN como entrada
lcd.init(); // Inicializa o display LCD
lcd.backlight(); // Liga a retroiluminação do display
}
void loop() {
int analogValue = analogRead(LDR_PIN); // Lê o valor analógico do pino LDR_PIN
float voltage = analogValue / 4096. * 5; // Converte o valor para tensão (assumindo resolução de 12 bits)
float resistance = 2000 * voltage / (1 - voltage / 5); // Calcula a resistência do LDR
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA)); // Calcula o valor em lux
Serial.printf("O valor analogico: %d\t | O valor de iluminancia é: %.2f lux\t\n ",analogValue,lux);
lcd.setCursor(2, 0); // Define a posição do cursor no display (coluna 2, linha 0)
lcd.print("Sala: "); // Exibe a mensagem "Sala: "
if (lux > 50) {
lcd.print("Clara!"); // Se o ambiente estiver claro, exibe "Clara!" no display
} else {
lcd.print("Escura"); // Caso contrário, exibe "Escura" no display
}
lcd.setCursor(0, 1); // Define a posição do cursor na segunda linha do display
lcd.print("Lux: "); // Exibe a mensagem "Lux: "
lcd.print(lux); // Exibe o valor de lux medido
lcd.print(" "); // Limpa o restante da linha
delay(100);// Pequeno atraso antes de repetir o loop
}