Circuito Sensor de Luz
Build a light sensor circuit using a photoresistor (LDR) that automatically turns on an LED when it gets dark. Includes schematic, component list, and Arduino version.
Um circuito sensor de luz usa um fotoresistor (LDR) para detectar luz ambiente e automaticamente ligar um LED quando escurece. Este é o mesmo princípio por trás de luzes noturnas automáticas, postes de luz e lâmpadas solares de jardim. Você pode construir a versão básica com apenas alguns componentes e sem programação, ou adicionar um Arduino para controle preciso e limiares ajustáveis.
O que você precisa
Versão básica (sem Arduino)
| Componente | Valor | Finalidade |
|---|---|---|
| Fotoresistor (LDR) | Padrão (GL5528 ou similar) | Detecção de luz |
| Resistor fixo | 10 kΩ | Parceiro do divisor de tensão |
| Transistor NPN | 2N2222 ou BC547 | Comuta o LED |
| LED (5mm) | Qualquer cor | Indicador de saída |
| Resistor do LED | 220Ω–330Ω | Limitação de corrente para LED |
| Fonte de alimentação | Bateria ou adaptador 5V–9V | Fonte de energia |
| Protoboard + fios | Padrão | Prototipagem |
Versão Arduino (adiciona precisão)
Mesmos componentes acima, mas o transistor é opcional — o Arduino pode acionar o LED diretamente de um pino digital e ler o LDR em um pino analógico.
Como funciona o fotoresistor
Um fotoresistor (resistor dependente da luz, LDR) é feito de um material semicondutor cuja resistência muda com a exposição à luz:
| Condição | Resistência do LDR | Comportamento |
|---|---|---|
| Sol forte | ~1 kΩ ou menos | Resistência muito baixa |
| Iluminação interna | ~5–20 kΩ | Resistência média |
| Luz fraca / crepúsculo | ~50–200 kΩ | Resistência alta |
| Escuridão | ~1 MΩ+ | Resistência muito alta |
O LDR não é polarizado — funciona em qualquer direção, assim como um resistor normal.
O princípio do divisor de tensão
O LDR e um resistor fixo formam um divisor de tensão. A tensão no ponto médio muda com o nível de luz:
V_meio = V_alimentação × R_fixo / (R_LDR + R_fixo)- Luz forte: R_LDR é baixo (~1 kΩ). V_meio ≈ 5V × 10k / (1k + 10k) ≈ 4,5V (alto).
- Escuridão: R_LDR é alto (~1 MΩ). V_meio ≈ 5V × 10k / (1M + 10k) ≈ 0,05V (baixo).
Para fazer o LED ligar no escuro, invertemos as posições — colocamos o LDR em cima (conectado ao positivo) e o resistor fixo embaixo (conectado à terra). Agora V_meio é alto quando está escuro e baixo quando há luz:
V_meio = V_alimentação × R_LDR / (R_LDR + R_fixo)- Escuridão: R_LDR é alto → V_meio é alto → transistor liga → LED acende.
- Luz forte: R_LDR é baixo → V_meio é baixo → transistor desliga → LED apaga.
Construindo o circuito básico (sem Arduino)
- Configure a alimentação: conecte sua fonte de 5V aos trilhos de alimentação da protoboard (positivo e terra).
- Divisor de tensão: Conecte o LDR entre o trilho positivo e uma linha (chame de linha A). Conecte o resistor de 10 kΩ entre a linha A e o trilho terra. A linha A agora é o ponto médio — sua tensão varia com a luz.
- Transistor: Coloque o 2N2222 na protoboard. Conecte a base à linha A através de um resistor de 10 kΩ (para limitar a corrente da base). Conecte o emissor à terra.
- LED: Conecte o resistor de 220Ω do trilho positivo ao ânodo do LED (perna longa). Conecte o cátodo do LED ao coletor do transistor.
- Cubra o LDR com sua mão — o LED deve acender. Descubra-o — o LED deve apagar.
Ajustando a sensibilidade
Se o LED liga/desliga no nível de luz errado, mude o resistor fixo de 10 kΩ:
- Valor maior (47 kΩ): LED liga em condições mais escuras (menos sensível).
- Valor menor (4,7 kΩ): LED liga mais cedo, em condições mais claras (mais sensível).
Para ajuste fino, substitua o resistor fixo por um potenciômetro de 100 kΩ. Gire o potenciômetro para definir o nível exato de luz onde o LED dispara.
Versão Arduino
Usar um Arduino adiciona precisão — você pode ler níveis exatos de luz, definir limiares no código e adicionar recursos como histerese (para evitar oscilação no limiar).
Fiação
- Conecte o LDR entre 5V e o pino analógico A0.
- Conecte um resistor de 10 kΩ entre A0 e GND (completando o divisor de tensão).
- Conecte um LED com resistor de 220Ω do pino digital 8 para GND.
Código
const int LDR_PIN = A0;
const int LED_PIN = 8;
const int DARK_THRESHOLD = 700; // Ajuste este valor (0-1023)
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int lightLevel = analogRead(LDR_PIN);
Serial.print("Nível de luz: ");
Serial.println(lightLevel);
if (lightLevel > DARK_THRESHOLD) {
digitalWrite(LED_PIN, HIGH); // Escuro - liga LED
} else {
digitalWrite(LED_PIN, LOW); // Claro - desliga LED
}
delay(200);
}Como calibrar
- Carregue o código e abra o Monitor Serial (Tools → Serial Monitor).
- Observe o valor do nível de luz em condições claras (pode ser ~200–400).
- Cubra o LDR e anote o valor escuro (pode ser ~800–950).
- Configure
DARK_THRESHOLDpara um valor entre os dois (ex: 700). - Recarregue e teste — o LED deve acender quando você cobrir o LDR.
Adicionando histerese (evitando oscilação)
Sem histerese, o LED oscila quando o nível de luz está exatamente no limiar. Corrija isso usando dois limiares — um para ligar e outro mais baixo para desligar:
const int THRESHOLD_ON = 700; // Liga quando acima disto
const int THRESHOLD_OFF = 500; // Desliga quando abaixo disto
bool ledState = false;
void loop() {
int lightLevel = analogRead(LDR_PIN);
if (lightLevel > THRESHOLD_ON) {
ledState = true;
} else if (lightLevel < THRESHOLD_OFF) {
ledState = false;
}
// Entre limiares: mantém estado atual (histerese)
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
delay(100);
}Aplicações do mundo real
| Aplicação | Como usa detecção de luz |
|---|---|
| Luzes noturnas automáticas | LED ou lâmpada liga quando o ambiente escurece |
| Postes de luz | Ligam ao anoitecer, desligam ao amanhecer |
| Luzes solares de jardim | Carregam durante o dia, acendem à noite |
| Brilho da tela | Telefones ajustam brilho do display à luz ambiente |
| Sistemas de segurança | Detectam quando um feixe de luz é interrompido |
| Fotômetros | Medem intensidade luminosa para fotografia |
Solução de problemas
| Problema | Causa | Solução |
|---|---|---|
| LED sempre ligado | Resistor fixo muito baixo, ou LDR não recebendo luz | Aumente o resistor fixo ou verifique posicionamento do LDR |
| LED sempre desligado | Resistor fixo muito alto, ou LDR saturado | Diminua o valor do resistor fixo |
| LED oscila no limiar | Sem histerese | Adicione limiares duplos (Arduino) ou filtro RC |
| Resposta muito lenta | Normal — LDRs levam 10-100ms para mudar | Use fototransistor para resposta mais rápida |
| Arduino lê sempre 0 ou 1023 | Erro de fiação — divisor não conectado | Verifique se LDR e resistor formam divisor entre 5V e GND |
Resumo
Um circuito sensor de luz usa um LDR (fotoresistor) cuja resistência muda com o nível de luz. Emparelhado com um resistor fixo em um divisor de tensão, produz uma tensão variável que pode acionar uma chave transistor (versão básica) ou ser lida por uma entrada analógica Arduino (versão programável). O circuito liga um LED na escuridão e desliga na luz. Ajuste a sensibilidade mudando o valor do resistor fixo; adicione histerese para evitar oscilação no limiar de comutação.