Ir para o conteúdo
Eletrônica União

Luz automática ao anoitecer (fotocélula com LDR, Arduino e relé)

Automação · Iniciante · Tempo: 1 hora e 30 minutos

Um LDR (resistor que varia com a luz) e duas faixas de luminosidade com atraso fazem uma fotocélula mais estável que as comuns.

Como funciona

O LDR e um resistor de 10 kΩ formam um divisor de tensão: com mais luz a leitura do pino A0 sobe; no escuro, desce.

Para não piscar no crepúsculo, há histerese (liga abaixo de LIMIAR_LIGA, só desliga acima de LIMIAR_DESLIGA) e atraso: a condição precisa durar 60 s. O farol de um carro à noite ou uma nuvem durante o dia não mudam nada.

Para calibrar, abra o Monitor Serial ao entardecer e anote o valor no momento em que você acharia bom acender.

Posicione o LDR voltado para o céu e longe da lâmpada que ele controla — senão a própria luz o apaga.

Segurança: Este projeto liga aparelhos na rede elétrica (127/220 V), que pode causar choque grave e incêndio. Faça as ligações da rede com o disjuntor DESLIGADO, use bornes e caixa fechada isolada, fios de bitola adequada e nunca toque na placa energizada. Se não tiver experiência com instalação elétrica, peça ajuda a um eletricista.

Esquema de ligações

12345678910LDRABArduino5VA0GNDD7Resistor 10kABRedeFaseNeutroLâmpadaABMódulo reléNAVCCGNDINCOM

Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.

#DeParaObservação
1LDR: AArduino: 5V
2LDR: BArduino: A0divisor de tensão
3Resistor 10k: AArduino: A0
4Resistor 10k: BArduino: GND
5Módulo relé: VCCArduino: 5V
6Módulo relé: GNDArduino: GND
7Módulo relé: INArduino: D7
8Rede: FaseMódulo relé: COMdisjuntor desligado!
9Módulo relé: NALâmpada: A
10Lâmpada: BRede: Neutro

Código-fonte Arduino (C/C++)

// Fotocélula com histerese e atraso: liga no escuro, desliga no claro
const int LDR = A0;
const int RELE = 7;
const bool RELE_ATIVO_BAIXO = true;
const int LIMIAR_LIGA = 300;          // abaixo disto é noite (calibre pelo Monitor Serial)
const int LIMIAR_DESLIGA = 450;       // acima disto é dia
const unsigned long ATRASO = 60000;   // a condição precisa durar 60 s

bool ligada = false;
unsigned long desde = 0;

void aplicar(bool ligar) {
  ligada = ligar;
  digitalWrite(RELE, (ligar ^ RELE_ATIVO_BAIXO) ? HIGH : LOW);
  Serial.println(ligar ? "Luz LIGADA" : "Luz desligada");
}

void setup() {
  Serial.begin(9600);
  pinMode(RELE, OUTPUT);
  aplicar(false);
}

void loop() {
  int luz = analogRead(LDR);
  Serial.print("Luz: "); Serial.println(luz);

  bool querMudar = (!ligada && luz < LIMIAR_LIGA) || (ligada && luz > LIMIAR_DESLIGA);
  if (!querMudar) desde = millis();                    // condição interrompida: zera o atraso
  else if (millis() - desde > ATRASO) aplicar(!ligada);
  delay(500);
}

Referências

Circuito baseado na documentação oficial dos fabricantes e bibliotecas:

Montagem

  1. LDR entre 5V e A0; resistor de 10 kΩ entre A0 e GND.
  2. Módulo relé: VCC 5V, GND, IN no pino 7.
  3. Carregue o código e observe as leituras no Monitor Serial (9600 baud); cubra o LDR com a mão para simular a noite (o atraso de 60 s vale também no teste).
  4. Ajuste os limiares, desligue o disjuntor e ligue a lâmpada no COM/NA do relé.
  5. Proteja o LDR da chuva com uma tampa transparente.

Ferramentas

Computador com Arduino IDE
Cabo USB
Chave de fenda