Componentes · 6 min de leitura

O que é o sensor de luz LDR? Medindo luz com Arduino e uma luz noturna automática

Como funciona um LDR (fotorresistor)? Ligação com divisor de tensão, escolha do resistor certo, leitura da luz com analogRead, luz noturna com histerese, módulos LDR, uso no ESP32 e no Pico e erros comuns.

Um LDR (Light Dependent Resistor, resistor dependente de luz) é, como o nome diz, um resistor cuja resistência muda com a luz; ele também é chamado de fotorresistor ou fotocélula. No escuro, a resistência dele é muito alta e, conforme a luz aumenta, a resistência cai. Postes que acendem ao anoitecer, luzes noturnas automáticas e brinquedos ativados por luz funcionam com essa peça simples. Ele é barato, não tem polaridade e é ligado no Arduino com um resistor, o que faz dele um começo ideal para o seu primeiro projeto com luz.

Sensor de luz LDR (fotorresistor)
LDR: o desenho em zigue-zague na superfície é uma camada de sulfeto de cádmio sensível à luz; os dois terminais não têm polaridade.

Como funciona um LDR?

O desenho em zigue-zague na superfície do LDR é um semicondutor sensível à luz, o sulfeto de cádmio (CdS). Quando a luz incide sobre ele, os fótons liberam elétrons no material, ele conduz melhor e a resistência cai. A mudança não é linear e é relativamente lenta (dezenas de milissegundos). Por isso o LDR é ideal para decisões como "está escuro ou claro?" e para níveis aproximados de luz, e não para medir a luz com precisão em lux.

CondiçãoResistência aproximada do LDR (GL5528)
Escuridão total1 MΩ ou mais
Brilho de luz noturna (~1 lux)50–100 kΩ
Cômodo com pouca luz (~10 lux)10–20 kΩ
Cômodo bem iluminado (~100 lux)3–5 kΩ
Embaixo de uma luminária de mesa (~1000 lux)Cerca de 1 kΩ
Luz do diaAlgumas centenas de Ω

Os valores variam conforme o modelo. O mais comum nos kits é o GL5528; irmãos como o GL5516, o GL5537 e o GL5539 têm resistências diferentes sob a mesma luz. Você descobre facilmente os valores do seu LDR medindo-o com um multímetro no escuro e no claro.

Ligação no Arduino: um divisor de tensão

O Arduino mede tensão, e não resistência. Por isso o LDR é ligado junto com um resistor fixo para formar um divisor de tensão: 5V → LDR → A0 → 10 kΩ → GND. Conforme a luz aumenta, a resistência do LDR cai e a tensão no A0 sobe. A tensão no A0 é dada por V = 5 × Rfixo / (RLDR + Rfixo), e analogRead() a transforma em um número de 0 a 1023. Para testar valores diferentes de resistor, use a calculadora de divisor de tensão.

LuzResistência do LDRTensão no A0analogRead
Escuridão total1 MΩ0,05 V~10
Cômodo com pouca luz15 kΩ2,0 V~410
Cômodo bem iluminado4 kΩ3,6 V~730
Embaixo de uma luminária de mesa1 kΩ4,5 V~930
O resistor fixo dá o resultado mais sensível quando fica perto da resistência do LDR no nível de luz que interessa a você. Para decisões com pouca luz, como uma luz noturna, 10–47 kΩ funciona melhor; para diferenciar luzes fortes, algo em torno de 1 kΩ. O de 10 kΩ que vem nos kits é um bom ponto de partida para a maioria dos projetos.

Lendo o nível de luz com o Arduino

C++ (Arduino IDE)
1const int LDR_PIN = A0;
2
3void setup() {
4  Serial.begin(9600);
5}
6
7void loop() {
8  int raw = analogRead(LDR_PIN);            // 0 (karanlık) – 1023 (aydınlık) / dark – bright
9  int percent = map(raw, 0, 1023, 0, 100);  // yüzde / percent
10  Serial.print("Ham / raw: ");
11  Serial.print(raw);
12  Serial.print("  Işık / light: %");
13  Serial.println(percent);
14  delay(500);
15}

Com o Plotter Serial do Arduino IDE você acompanha o valor como um gráfico ao vivo. Quando você cobre o LDR com a mão, o gráfico cai, e quando aponta uma lanterna para ele, o gráfico sobe. Esse é o jeito mais fácil de achar o limite certo para o seu projeto, com o sensor no lugar onde ele vai ficar de verdade.

Luz noturna automática: limite e histerese

A luz noturna mais simples diz "se o valor estiver abaixo de 300, acenda o LED". Mas quando a luz fica oscilando bem perto do limite, a lâmpada fica acendendo e apagando sem parar, e é ainda pior se a própria luz da lâmpada atingir o LDR. A solução é a histerese: usar dois limites diferentes. O código abaixo acende a lâmpada quando a luz cai abaixo de 300, mas só apaga quando ela sobe acima de 400; a diferença entre os dois acaba totalmente com a piscada.

C++ (Arduino IDE)
1const int LDR_PIN = A0;
2const int LED_PIN = 9;
3const int ON_LEVEL = 300;    // bunun altında yak / turn on below this
4const int OFF_LEVEL = 400;   // bunun üstünde söndür / turn off above this
5
6bool lampOn = false;
7
8void setup() {
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  int light = analogRead(LDR_PIN);
14  if (!lampOn && light < ON_LEVEL) lampOn = true;
15  if (lampOn && light > OFF_LEVEL) lampOn = false;
16  digitalWrite(LED_PIN, lampOn ? HIGH : LOW);
17  delay(200);
18}
Posicione a lâmpada de forma que ela não ilumine o LDR; se a luz dela voltar para o sensor, a lâmpada se apaga sozinha. Tirar a média de 10 leituras também suaviza os saltos repentinos causados por uma sombra passando ou por uma lâmpada fluorescente piscando.

Um LED que fica mais forte no escuro

Em vez de ligar e desligar, você pode fazer o LED ganhar brilho aos poucos conforme a luz diminui. A função map() transforma a luz medida em um valor de PWM inversamente proporcional: o LED brilha mais conforme o cômodo escurece e enfraquece conforme ele clareia. Lembre-se de ligar o LED em um pino PWM marcado com ~ (por exemplo, o 9).

C++ (Arduino IDE)
1void loop() {
2  int light = analogRead(A0);
3  int brightness = map(light, 100, 900, 255, 0);  // karanlık → parlak / dark → bright
4  analogWrite(9, constrain(brightness, 0, 255));
5  delay(50);
6}

Módulos LDR: saídas digital e analógica

Os módulos LDR prontos trazem em uma só placa o LDR, o resistor do divisor, um trimpot azul para o limite e um comparador LM393. O pino AO dá a saída analógica do divisor, enquanto o pino DO dá só HIGH ou LOW, de acordo com o limite ajustado no trimpot. Na maioria dos módulos, o DO vai para LOW quando está mais claro que o limite e para HIGH quando está mais escuro; confirme o comportamento do seu módulo com um teste rápido.

PinoFunção
VCCAlimentação (3,3–5 V)
GNDTerra
DOSaída digital: limite ajustado no trimpot
AOSaída analógica: o ponto central do divisor de tensão

LDRs com o ESP32 e o Raspberry Pi Pico

O ESP32 e o Pico funcionam com 3,3 V, então alimente o divisor de tensão pelo pino 3V3. O ADC do ESP32 é de 12 bits e devolve valores de 0 a 4095. Os pinos do ADC2 não funcionam enquanto o Wi-Fi está ligado, então ligue o LDR em um dos pinos do ADC1 (GPIO 32–39). No Pico, as entradas analógicas são GP26, GP27 e GP28; o read_u16() do MicroPython devolve valores de 0 a 65535:

MicroPython
1from machine import ADC, Pin
2import time
3
4ldr = ADC(26)                  # GP26 (ADC0); bölücü 3V3'ten / divider fed from 3V3
5led = Pin(15, Pin.OUT)
6
7while True:
8    light = ldr.read_u16()     # 0 (karanlık) – 65535 (aydınlık) / dark – bright
9    led.value(light < 20000)   # karanlıkta yak / on when dark
10    print(light)
11    time.sleep(0.5)
Nunca alimente o divisor de tensão com 5V em um ESP32 ou Pico. Com luz forte, o pino analógico receberia mais de 3,3 V e poderia ser danificado para sempre.

LDR ou sensor de luz digital?

CaracterísticaLDRBH1750 (digital)
SaídaAnalógica (variação de resistência)Digital (I2C), direto em lux
PrecisãoAproximada; afetada pela temperatura e pelo modeloPrecisa e calibrada
Velocidade de respostaLenta (dezenas de milissegundos)Rápida
PreçoMuito baratoUm pouco mais caro
Ideal paraDecisões de escuro/claro, luzes noturnasMedição de luz, iluminação de plantas, brilho de telas

Ideias de projetos com LDR

  • Luz noturna automática: uma lâmpada que acende no escuro e não fica piscando, graças à histerese.
  • Luz de corredor inteligente: combine o LDR com um Sensor de movimento PIR para que ela só acenda quando estiver escuro e alguém passar.
  • Painel que segue o sol: gire um servo conforme a diferença entre dois LDRs para apontar um painel para a direção mais clara.
  • Sistema de segurança a laser: aponte um feixe de laser para um LDR; quando o feixe for interrompido, dispare o alarme.
  • Luz ambiente colorida: leve um LED RGB para cores quentes conforme escurece.
  • Despertador do amanhecer: toque um buzzer com a primeira luz da manhã.

Erros comuns e como resolvê-los

  • O valor é sempre 0 ou sempre 1023: falta o resistor fixo, ou o LDR está ligado direto entre o 5V e o A0; monte o divisor de tensão.
  • Os valores funcionam ao contrário: o LDR e o resistor fixo trocaram de lugar; se o valor sobe no escuro, troque os dois de posição ou inverta a comparação no código.
  • A lâmpada fica piscando: a luz da lâmpada está atingindo o LDR, ou está sendo usado um único limite; acrescente histerese.
  • Atraso quando escurece: o LDR volta do claro para o escuro mais devagar do que do escuro para o claro; um atraso de alguns segundos é normal.
  • Tentar medir lux: o LDR não é um sensor calibrado; use um BH1750 para ter valores reais em lux.
  • As leituras falham quando o Wi-Fi liga no ESP32: o LDR está em um pino do ADC2; passe para um dos pinos do ADC1, entre o GPIO 32 e o 39.

O LDR é o jeito mais fácil de aprender leitura analógica e a ideia do divisor de tensão, e o que você aprende aqui ajuda com muitos sensores analógicos, como os de umidade, gás e temperatura. Se você tem curiosidade sobre como funcionam os resistores do divisor, veja O que é resistor?; no app BlueGrays você encontra projetos de luz noturna com LDR, nível de luz e segurança a laser passo a passo.

Perguntas frequentes

Que resistor devo usar com um LDR?

A escolha mais comum é 10 kΩ, que funciona bem para a maioria dos projetos em ambientes internos. Para mais sensibilidade com pouca luz, escolha 47 kΩ, e para condições muito claras, 1 kΩ. Como regra, escolha um resistor fixo próximo da resistência do LDR no nível de luz que interessa a você.

O LDR tem terminal positivo e negativo?

Não. O LDR não tem polaridade, assim como um resistor comum; você pode encaixá-lo em qualquer sentido. O que importa é montar um divisor de tensão correto com o resistor fixo.

Um LDR consegue medir lux?

Dá para estimar, mas o valor não vai ser preciso; a resposta do LDR não é linear e varia de um modelo para outro e até com a temperatura. Se você precisa de valores reais em lux, use um sensor de luz digital como o BH1750 ou o TSL2561.

Qual é a diferença entre os pinos DO e AO de um módulo LDR?

O AO dá uma tensão analógica que muda com a intensidade da luz e é lida com analogRead(). O DO dá só HIGH ou LOW, de acordo com o limite ajustado no trimpot do módulo, e é lido com digitalRead(); ele é prático para tarefas de liga-desliga.

Por que meu LDR reage devagar no escuro?

Depois que a luz é retirada, o material CdS leva alguns segundos para chegar à resistência de escuro, enquanto ir para o claro é muito mais rápido. Essa é uma característica natural dos LDRs. Para tarefas que pedem resposta rápida, usa-se um fotodiodo ou um fototransistor.

Por que o valor do meu LDR no ESP32 fica sempre em 4095 ou não muda nada?

Se o divisor está alimentado com 5V, a tensão passa do limite do ADC e o valor trava em 4095; alimente o divisor pelo 3V3. Se ele não muda nada, o LDR pode estar em um pino do ADC2; o ADC2 não funciona enquanto o Wi-Fi está ligado, então use um pino do ADC1 entre o GPIO 32 e o 39.

Ver todos os projetos
Medição da intensidade da luz com LDR
#11Iniciante

Medição da intensidade da luz com LDR

Quer ver a luminosidade do seu quarto em números? O LDR, um pequeno componente sensível à luz, mede a luz ambiente, e o Arduino exibe o valor na tela do computador a cada meio segundo. Cubra o sensor

4.6(81)
139
Luz noturna com LDR
#12Iniciante

Luz noturna com LDR

Uma pequena luz noturna que acende sozinha quando escurece e apaga ao amanhecer. Um sensor de luz mede a luminosidade do quarto, e o Arduino acende o LED quando está escuro o suficiente e apaga quando

4.8(102)
205
Sistema de alerta com laser
#22Intermediário
Premium

Sistema de alerta com laser

Você monta uma barreira de luz invisível, como nos filmes. Um laser ilumina um sensor de luz do outro lado; assim que alguém passa e interrompe o feixe, o LED acende e o buzzer soa. Quando o feixe vol

4.8(64)
83
Sistema de segurança com laser
#23Avançado
Premium

Sistema de segurança com laser

Como nas cenas de roubo com lasers dos filmes: um feixe de laser atinge um sensor de luz e, assim que alguém passa e interrompe o feixe, o LED vermelho acende e o buzzer começa a soar. O alarme não pa

4.8(60)
77
Luz noturna com LDR e ESP32
#112Iniciante
Premium

Luz noturna com LDR e ESP32

Uma luz noturna em que o LED acende automaticamente no escuro e apaga na claridade. Usamos o pino D0 (saída digital) do módulo sensor LDR. O pequeno potenciômetro no módulo ajusta o limiar de escuridão, e o próprio módulo gera a saída HIGH/LOW. O ESP32 apenas lê esse sinal com digitalRead(), deixando o código bem simples.

4.6(17)
30
Leitura da intensidade da luz com módulo LDR e ESP32
#113Iniciante

Leitura da intensidade da luz com módulo LDR e ESP32

Acompanhe em tempo real no Monitor Serial o valor bruto do ADC do módulo LDR e a porcentagem relativa de luz calculada a partir de referências de escuridão e claridade. Essa porcentagem não é uma medida em lux. O projeto ensina a lógica de calibração do módulo. É ideal fazê-lo antes do projeto 10, pois ajuda a determinar o valor do limiar.

4.6(36)
55
Iluminação inteligente com ESP32 (PIR + LDR + relé + OLED)
#141Avançado
Premium

Iluminação inteligente com ESP32 (PIR + LDR + relé + OLED)

Transforme a iluminação do corredor, banheiro ou despensa em iluminação inteligente com ESP32! Com um sensor de movimento PIR, um sensor de luz LDR e um módulo relé, montamos o cenário clássico de "acender a luz ao detectar movimento no escuro" — se o ambiente já estiver claro, o movimento NÃO aciona a luz, economizando energia durante o dia. A luz fica acesa por 30 segundos; se o movimento continuar, o temporizador reinicia e a luz permanece acesa por mais tempo.

4.3(6)
11
Iluminação automática com ESP32 e sensor de movimento PIR
#121Intermediário
Premium

Iluminação automática com ESP32 e sensor de movimento PIR

Neste projeto, usaremos o sensor de movimento PIR HC-SR501 para detectar quando alguém entra no cômodo e acender o LED automaticamente. Acompanharemos o tempo em que o LED fica aceso com millis(). Cada leitura HIGH do sensor atualizará o instante do último movimento, e o LED apagará pelo menos 10 segundos após a última leitura HIGH. O código atual também espera 50 ms em cada ciclo com delay(50), portanto o laço da aplicação não é totalmente livre de bloqueios.

4.4(24)
38