Sensor LDR ligado ao ESP32 em protoboard para medir luminosidade

Como usar sensor LDR com ESP32 para medir luminosidade

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

  1. Monte o circuito e abra o Monitor Serial em 115200 baud.
  2. Cubra o LDR e anote a leitura após ela estabilizar.
  3. Ilumine o LDR na condição mais clara do projeto e anote a leitura.
  4. Repita as medições em diferentes horários e posições.
  5. Use a média dos valores para definir os limites.
  6. 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?

Ver Kit Estação Meteorológica com ESP32

Voltar para o blog