Como usar sensor LDR com ESP32 para medir luminosidade
Share
Para usar um sensor LDR com ESP32, monte um divisor de tensão com o LDR e um resistor de 10 kΩ, ligue o ponto central a uma entrada ADC, como o GPIO 34, e leia o valor com analogRead(). Alimentado em 3,3 V, o circuito transforma a variação de luz em um valor digital que pode controlar lâmpadas, registrar luminosidade ou complementar uma estação meteorológica IoT.
Neste tutorial, você aprenderá a ligação correta, o código para ESP32, a calibração em porcentagem e os cuidados necessários para obter leituras estáveis. O exemplo usa um LDR avulso, mas os mesmos conceitos ajudam a entender módulos sensores de luminosidade.
O que é um sensor LDR?
O LDR, sigla de Light Dependent Resistor, é um resistor cuja resistência elétrica muda conforme a luz incidente. Em geral, sua resistência diminui quando a iluminação aumenta e cresce no escuro.
Como o ESP32 mede tensão, e não resistência diretamente, o LDR precisa formar um divisor de tensão com um resistor fixo. O ponto entre os dois componentes produz uma tensão variável que pode ser lida pelo conversor analógico-digital, chamado ADC.
Para que serve o LDR com ESP32?
- Acender iluminação automaticamente quando escurece.
- Medir variações de luz ao longo do dia.
- Monitorar luminosidade em hortas, estufas e ambientes internos.
- Ajustar o brilho de displays e painéis.
- Enviar dados de luz por Wi-Fi para um dashboard IoT.
- Complementar uma estação meteorológica com ESP32.
O LDR é excelente para detectar níveis relativos de claro e escuro. Para medir lux com maior precisão, use um sensor digital de luminosidade calibrado.
Componentes necessários
- 1 placa ESP32.
- 1 sensor LDR.
- 1 resistor de 10 kΩ.
- 1 protoboard.
- Jumpers.
- Cabo USB para programação e alimentação.
Você pode montar o circuito com uma protoboard MB-102, jumpers macho-macho e um sensor LDR de 5 mm.
Como ligar o sensor LDR no ESP32
Neste circuito, o LDR fica entre 3,3 V e o ponto de leitura. O resistor de 10 kΩ fica entre o ponto de leitura e o GND. Assim, o valor lido tende a aumentar quando há mais luz. Se você inverter os dois componentes, o comportamento também será invertido.
| Componente | Ligação | Função |
|---|---|---|
| Uma perna do LDR | 3V3 do ESP32 | Alimentação do divisor |
| Outra perna do LDR | GPIO 34 e resistor | Ponto de leitura analógica |
| Outra ponta do resistor de 10 kΩ | GND | Fecha o divisor de tensão |
Importante: use 3,3 V. As entradas do ESP32 não devem receber 5 V diretamente. O GPIO 34 é uma entrada analógica e não possui saída, o que é adequado para este exemplo.
Esquema textual do divisor de tensão
3V3 ---- LDR ----+---- GPIO 34
|
10 kΩ
|
GND
O LDR não tem polaridade, portanto suas pernas podem ser trocadas. O resistor fixo também não possui polaridade.
Código para ler o LDR com ESP32
Na Arduino IDE, selecione sua placa ESP32 e carregue o código abaixo. Ele lê o ADC, calcula uma média simples de dez amostras e mostra o resultado no Monitor Serial.
const int pinoLdr = 34;
int lerLuminosidade() {
long soma = 0;
for (int i = 0; i < 10; i++) {
soma += analogRead(pinoLdr);
delay(10);
}
return soma / 10;
}
void setup() {
Serial.begin(115200);
pinMode(pinoLdr, INPUT);
}
void loop() {
int leitura = lerLuminosidade();
Serial.print("Leitura do LDR: " );
Serial.println(leitura);
delay(1000);
}
Em muitas configurações do ESP32, analogRead() retorna valores de 0 a 4095. O valor real depende da placa, da configuração do ADC, do resistor, do LDR e da iluminação. Por isso, não trate 0 e 4095 como limites garantidos da sua montagem.
Como converter a leitura do LDR em porcentagem
Primeiro, observe o valor no ambiente mais escuro que será usado e anote como leituraEscuro. Depois, ilumine o sensor na condição máxima esperada e anote como leituraClaro. Esses dois pontos permitem criar uma escala relativa de 0% a 100%.
const int pinoLdr = 34;
const int leituraEscuro = 350;
const int leituraClaro = 3200;
void setup() {
Serial.begin(115200);
}
void loop() {
int leitura = analogRead(pinoLdr);
int percentual = map(leitura, leituraEscuro, leituraClaro, 0, 100);
percentual = constrain(percentual, 0, 100);
Serial.print("Luminosidade relativa: " );
Serial.print(percentual);
Serial.println("%");
delay(1000);
}
Os números 350 e 3200 são apenas exemplos. Substitua-os pelos valores medidos no seu circuito. Essa porcentagem representa uma escala relativa e não uma medição científica em lux.
Como acender um LED quando escurecer
Depois de calibrar o LDR, você pode definir um limite para automação. O exemplo considera que valores menores representam menos luz, de acordo com a ligação mostrada neste artigo.
const int pinoLdr = 34;
const int pinoLed = 2;
const int limiteEscuro = 1000;
void setup() {
Serial.begin(115200);
pinMode(pinoLed, OUTPUT);
}
void loop() {
int leitura = analogRead(pinoLdr);
bool estaEscuro = leitura < limiteEscuro;
digitalWrite(pinoLed, estaEscuro ? HIGH : LOW);
Serial.println(leitura);
delay(300);
}
Use o LED integrado apenas para teste. Para controlar lâmpadas, fitas ou cargas maiores, é necessário um circuito de potência adequado, como transistor, MOSFET ou relé compatível, além dos cuidados de segurança da carga.
Como calibrar o sensor LDR
- Monte o circuito e abra o Monitor Serial em 115200 baud.
- Cubra o LDR e anote a leitura após ela estabilizar.
- Ilumine o LDR na condição mais clara do projeto e anote a leitura.
- Repita as medições em diferentes horários e posições.
- Use a média dos valores para definir os limites.
- Adicione uma margem antes de acionar uma automação.
Para impedir que uma lâmpada fique ligando e desligando perto do limite, use dois pontos: um valor para ligar e outro para desligar. Essa diferença é chamada de histerese.
LDR mede luminosidade em lux?
Um LDR não fornece lux diretamente. É possível criar uma estimativa usando a curva do componente e uma calibração de referência, mas a relação entre resistência e luz não é linear e varia entre unidades. Para automação e comparação relativa, o LDR é simples e econômico. Para medições em lux, prefira um sensor digital projetado para essa unidade.
LDR avulso ou módulo sensor de luminosidade?
| Opção | Vantagem | Melhor uso |
|---|---|---|
| LDR + resistor | Ensina o divisor de tensão e permite ajustar o resistor | Aprendizado e leitura analógica |
| Módulo LDR | Montagem rápida e, em alguns modelos, saída digital ajustável | Protótipos e detecção de claro/escuro |
| Sensor digital de luz | Leitura mais consistente e possível saída em lux | Medição e instrumentação |
Como usar o LDR em uma estação meteorológica com ESP32
O ESP32 pode combinar a leitura do LDR com temperatura, umidade e pressão atmosférica. As medições podem ser exibidas localmente, gravadas ao longo do dia ou enviadas por Wi-Fi para um dashboard.
Para montar o projeto completo, leia também como montar uma estação meteorológica com ESP32 e o comparativo BME280 ou BMP280 com ESP32. Essa combinação cria um conjunto capaz de acompanhar temperatura, pressão, umidade e luminosidade.
Erros comuns ao usar LDR com ESP32
- Ligar o LDR sozinho ao GPIO: sem o resistor fixo, não há um divisor de tensão confiável.
- Aplicar 5 V na entrada: o ESP32 trabalha com lógica de 3,3 V.
- Usar um pino inadequado: confira quais GPIOs possuem ADC na sua placa.
- Não compartilhar o GND: todos os elementos do circuito precisam da mesma referência.
- Esperar uma leitura em lux: o valor bruto é relativo e precisa de calibração.
- Posicionar o sensor perto de LEDs da placa: a própria montagem pode alterar a leitura.
- Usar Wi-Fi com ADC2: em variantes clássicas do ESP32, prefira pinos ADC1 para evitar conflitos durante o uso do Wi-Fi.
Perguntas frequentes
- Qual pino usar para o sensor LDR no ESP32?
- Use um pino com entrada ADC. O GPIO 34 é uma escolha comum no ESP32 clássico porque é uma entrada analógica e pertence ao ADC1.
- Qual resistor usar com LDR e ESP32?
- Um resistor de 10 kΩ é um bom ponto de partida para o divisor de tensão. Outro valor pode oferecer melhor sensibilidade conforme o LDR e a faixa de luz.
- O LDR deve ser ligado em 3,3 V ou 5 V?
- Use 3,3 V no circuito conectado diretamente à entrada analógica do ESP32, evitando que o GPIO receba tensão acima do limite da placa.
- É possível usar o LDR com Wi-Fi no ESP32?
- Sim. Prefira um pino do ADC1, como o GPIO 34 em placas ESP32 clássicas, para evitar os conflitos que podem ocorrer entre Wi-Fi e ADC2.
Quer medir luminosidade junto com temperatura, pressão e umidade?