Skip to Content

Como Construir uma Luz Noturna Ativada por Movimento

Como Construir uma Luz Noturna Ativada por Movimento

Neste tutorial, vamos aprender a construir uma luz noturna ativada por movimento, alimentada por bateria, usando um ESP32 lite e um sensor PIR (Infravermelho Passivo). Este projeto é perfeito para adicionar um toque de automação à sua casa ou espaço de trabalho, proporcionando uma solução de iluminação conveniente e energeticamente eficiente.

Ao usar um sensor PIR, a nossa luz noturna só se acenderá quando detectar movimento nas proximidades, garantindo que permaneça desligada quando não for necessária. Esta funcionalidade não só poupa a bateria, como também adiciona uma camada de segurança ao alertar para qualquer movimento na área. Além disso, iremos explorar o modo deep-sleep do ESP32 para poupar ainda mais energia.

Para garantir que a luz noturna só está ativa durante a noite, também adicionaremos um fotoresistor ou LDR para detetar as condições de iluminação ambiente.

Neste tutorial, vamos construir duas luzes noturnas; uma muito simples e outra um pouco mais avançada. Esta última será integrada numa caveira, tornando-a um ótimo presente ou objeto de demonstração.

Para construir este projeto, precisaremos de alguns componentes essenciais, que discutiremos na próxima secção. Não se preocupe se for novo no Arduino ou eletrónica – este tutorial é amigável para iniciantes e iremos guiá-lo em cada passo do processo.

Então, vamos começar!

Peças Necessárias

Abaixo encontrará os componentes necessários para construir o projeto. Para este projeto, estou a usar uma placa ESP32 mais antiga, que já foi descontinuada, mas ainda pode ser adquirida a um preço muito baixo. É a que está listada abaixo. Existe um modelo sucessor com especificações melhoradas, que pode encontrar here.

Finalmente, todas as baterias LiPo 903052 que encontrei têm o conector errado. Será necessário cortar o conector e substituí-lo por um conector JST PH 2 pinos de 2.0mm. Mas gosto do formato destas baterias, pois têm quase as mesmas dimensões da placa ESP32.

ESP32 lite Lolin32

ESP32 lite

USB data cable

Cabo USB de Dados

Dupont wire set

Conjunto de Fios Dupont

Half_breadboard56a

Breadboard

Kit de Resistores & LED

Sensor de Movimento

Conjunto de Fotoresistores

Bateria 1200mAh

Caveira

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Sensores de Luz e PIR

Para construir uma luz noturna ativada por movimento, primeiro precisamos entender os dois componentes principais: o sensor de luz e o sensor de movimento PIR (Infravermelho Passivo).

Sensor de Luz

Um sensor de luz, também conhecido como fotoresistor ou LDR (Resistor Dependente de Luz), deteta o nível de luz ambiente ao redor. Funciona alterando a sua resistência com base na intensidade da luz que incide sobre ele. Quando exposto a luz forte, a resistência diminui, e quando está escuro, a resistência aumenta.

LDR photoresistior
LDR/Fotoresistor

Para a nossa luz noturna, o sensor de luz determinará se a luz deve ligar ou desligar com base nas condições de luz ambiente. Quando o nível de luz ambiente cair abaixo de um certo limiar, indicando escuridão, o sensor de luz permitirá a saída do sensor PIR e possibilitará ativar a luz noturna.

Sensor PIR

O sensor PIR é um sensor de deteção de movimento que deteta alterações na radiação infravermelha emitida por objetos no seu campo de visão. Consiste num sensor piroelétrico que gera uma voltagem quando exposto à radiação infravermelha. O sensor PIR é comumente usado em sistemas de segurança, iluminação automática e outras aplicações que requerem deteção de movimento.

Encontrará três módulos comuns de deteção de movimento PIR. O grande HC-SR501, o médio HC-SR505 e o pequeno AM312 que estamos a usar aqui. Todos funcionariam, mas como queremos integrar a luz noturna numa caveira, optamos pelo menor. O AM312 também parece ter o menor consumo de energia (8uA), embora eu não tenha medido isso pessoalmente.

PIR motion sensor AM312
Sensor de movimento PIR AM312

Para mais detalhes sobre o sensor HC-SR501 ou sensores de movimento em geral, veja o nosso tutorial HC-SR501 PIR Motion Sensor Arduino Tutorial (3 Examples).

Quando o sensor PIR deteta movimento dentro do seu alcance, envia um sinal para o microcontrolador, indicando que foi detetado movimento. No nosso projeto de luz noturna, o sensor PIR será usado para ativar a luz quando o movimento for detetado e desligá-la após um período definido.

Na próxima secção, discutiremos o circuito base que vamos usar para detetar movimento à noite.

Esquemas do Circuito Base

A solução mais simples para detetar movimento à noite seria ligar o sensor de movimento (PIR) a um pino de entrada do ESP32 e o sensor de luz (LDR) a outro pino. Se detetarmos um sinal HIGH do sensor PIR, poderíamos verificar o nível de luz lendo o sensor LDR e depois ligar ou desligar a luz.

Isto funcionaria bem, mas tem a desvantagem de termos que acordar o ESP32 do deep-sleep sempre que o movimento é detetado (independentemente da luz ambiente). Estaríamos a desperdiçar bateria, pois não faz sentido reagir ao movimento se estiver escuro, já que queremos uma luz noturna.

Uma solução é enviar o sinal alto do sensor de movimento para o ESP32 apenas se estiver escuro. Podemos conseguir isto usando o circuito seguinte.

Base circuit for motion activated night light sensor
Circuito base para sensor de luz noturna ativado por movimento

O sensor PIR envia o seu sinal do pino DATA para o pino 4 do ESP32. Mas adicionamos o LDR como resistor pull-down que vai puxar o sinal do sensor de movimento para LOW quando estiver claro. Como a resistência do LDR é muito alta quando está escuro, o sinal do PIR passa. Mas quando está claro, a resistência do LDR é baixa e a saída DATA é essencialmente desviada para o terra (GND), e o pino 4 do ESP32 lê um sinal LOW.

Se precisar de mais detalhes sobre como detetar luz usando um LDR, veja o nosso tutorial How to detect light using an Arduino.

Na secção seguinte, vou mostrar como usar este circuito para construir uma luz noturna simples.

Construindo uma Luz Noturna Simples

Nesta secção, construímos uma luz noturna simples que liga um LED se for detetado movimento no escuro.

Circuito para uma Luz Noturna Simples

Abaixo encontrará o circuito para esta luz noturna. Consiste no sensor de movimento AM312 (PIR), o fotoresistor (LDR) para medir a luz ambiente, e um LED com um resistor limitador de corrente.

Ligamos a alimentação do sensor de movimento e a sua saída ao pino 4 do ESP32. Depois ligamos o LDR à saída do PIR e ao terra. Por fim, adicionamos o LED, que é controlado via pino 16 do ESP32.

Circuit for a simple night light
Circuito para uma luz noturna simples

Pode encontrar a tabela detalhada de ligações aqui.

De Pino Cor do fio Para Pino
ESP32 3.3V Vermelho Breadboard Trilho positivo
ESP32 GND Azul Breadboard Trilho negativo
PIR GND Azul Breadboard Trilho negativo
PIR VIN Vermelho Breadboard Trilho positivo
PIR Out/Sinal Amarelo Breadboard LDR
Breadboard LDR Amarelo ESP32 4
ESP32 16 Laranja Resistor Qualquer
Resistor Qualquer LED Ânodo (pino longo)
LED Cátodo (pino curto) Azul Breadboard Trilho negativo

Agora, para o código.

Código para uma Luz Noturna Simples

A boa notícia é que precisa de escrever muito pouco código para controlar a luz noturna. Veja abaixo.

Primeiro, definimos duas constantes para os pinos aos quais o sensor de movimento (PIR_PIN) e o LED (LED_PIN) estão ligados. Na função setup() definimos o PIR_PIN como modo de entrada, porque vamos ler dele. E o LED_PIN, definimos como modo de saída, pois vamos escrever nele.

#define PIR_PIN GPIO_NUM_4
#define LED_PIN GPIO_NUM_16

void setup() {
  pinMode(PIR_PIN, INPUT);  
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  esp_sleep_enable_ext0_wakeup(PIR_PIN, 1);   
  digitalWrite(LED_PIN1, HIGH);
  delay(5000);
  esp_deep_sleep_start();  
}

Na função loop() queremos colocar o ESP32 em modo deep-sleep, acordá-lo quando for detetado movimento e depois ligar o LED por um curto período. Para isso, especificamos primeiro qual pino ativa o wakeup via esp_sleep_enable_ext0_wakeup(PIR_PIN, 1). Se o PIR_PIN ficar alto (=1), acordamos o ESP32.

Note que nem todos os pinos podem ser usados como fonte de wakeup. Apenas os seguintes pinos suportam wakeup: 0, 2, 4, 12-15, 25-27, 32-39.

Cada vez que acordamos, ligamos o LED via digitalWrite, deixamos ativo por 5 segundos (5000ms) usando delay, e depois voltamos ao deep sleep chamando esp_deep_sleep_start().

Como pode ver, o código é muito simples. Usar deep-sleep poupa imensa bateria e permite que a luz noturna funcione por muito mais tempo.

Agora, tem uma luz noturna muito simples. Na próxima secção, aumentamos o seu brilho e adicionamos um efeito de escurecimento para torná-la mais interessante.

Construindo uma Luz Noturna Mais Brilhante com Escurecimento

Nesta secção, adicionamos um segundo LED para tornar a luz noturna mais brilhante, e também reduzimos lentamente o brilho ao longo do tempo. Isto dá um aviso à pessoa de que a luz está prestes a desligar-se.

Circuito para uma Luz Noturna Mais Brilhante com Escurecimento

O circuito é essencialmente o mesmo de antes. Apenas adicionamos um segundo LED controlado pelo pino 17 do ESP32. Optamos por adicionar o segundo LED a outra saída para evitar sobrecarregar o pino. O ESP32 fornece felizmente uma corrente de 20mA nos seus pinos de saída, o que é suficiente para um único LED. Mas ligar vários LEDs a um pino resultaria numa corrente demasiado alta! Por isso, usamos outro pino ou um transistor para controlar vários LEDs. Como temos muitos pinos disponíveis, optamos pela solução mais simples e usamos apenas um pino adicional.

Circuit for a brighter, dimming night light
Circuito para uma luz noturna mais brilhante com escurecimento

Abaixo encontrará a tabela completa de ligações

De Pino Cor do fio Para Pino
ESP32 3.3V Vermelho Breadboard Trilho positivo
ESP32 GND Azul Breadboard Trilho negativo
PIR GND Azul Breadboard Trilho negativo
PIR VIN Vermelho Breadboard Trilho positivo
PIR Out/Sinal Amarelo Breadboard LDR
Breadboard LDR Amarelo ESP32 4
ESP32 16 Laranja Resistor Qualquer
Resistor Qualquer LED1 Ânodo (pino longo)
LED1 Cátodo (pino curto) Azul Breadboard Trilho negativo
ESP32 17 Verde Resistor Qualquer
Resistor Qualquer LED2 Ânodo (pino longo)
LED2 Cátodo (pino curto) Azul Breadboard Trilho negativo

O código para esta luz noturna é uma ligeira extensão do código anterior. Vamos discutir na próxima secção.

Código para uma Luz Noturna Mais Brilhante com Escurecimento

Primeiro, adicionamos outra constante para o segundo LED (LED_PIN2). Depois adicionamos uma nova função fade() para escurecer os LEDs ao longo do tempo. Para o efeito de escurecimento, reduzimos o brightness do máximo de 255 para um valor baixo de 50 num ciclo. Em cada passo controlamos o brilho dos LEDs via analogWrite e depois esperamos 100ms usando delay(). Assim, para 255-50 = 205 passos e com o atraso de 100ms, levará 20,5 segundos até os LEDs ficarem apagados.

Para outros efeitos de iluminação possíveis, veja o nosso tutorial sobre como Control Halloween Lights using ESP32 on Battery, onde adicionamos um efeito de cintilação.

#define PIR_PIN GPIO_NUM_4
#define LED_PIN1 GPIO_NUM_16
#define LED_PIN2 GPIO_NUM_17

void fade() {
  for(int brightness=255; brightness>50; brightness--) {
    analogWrite(LED_PIN1, brightness);
    analogWrite(LED_PIN2, brightness);
    delay(100); 
  }  
}

void setup() {
  pinMode(PIR_PIN, INPUT);  
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
}

void loop() {
  esp_sleep_enable_ext0_wakeup(PIR_PIN, 1);   
  fade();
  esp_deep_sleep_start();  
}

Nada de novo acontece na função setup(). Apenas precisamos definir o modo do pino para o LED adicional. De forma semelhante, a função loop() permanece praticamente inalterada. Depois de especificar a fonte de wakeup, chamamos fade() para escurecer os LEDs e depois iniciamos o deep sleep.

Extensões

Existem todos os tipos de extensões que pode adicionar a esta implementação básica. Por exemplo, poderíamos adicionar um efeito de cintilação no final do período de escurecimento, como algumas luzes noturnas comerciais fazem. Poderíamos usar LEDs RGB para um efeito de cor. Ou poderíamos usar o sensor de movimento como sistema de alarme. Se for detetado movimento, ativamos o WiFi do ESP32 e enviamos um email. Um buzzer de alarme também seria fácil de incorporar.

Possibilidades infinitas. Por exemplo, na próxima secção, mostro como integrar esta luz noturna numa caveira com ótimo aspeto.

Carregar Código via Arduino IDE

Se usar a mesma placa ESP32 que listei nas peças necessárias, selecione a WEMOS LOLIN32 Lite placa e a porta COM correta. Depois pressione o botão de upload (->)

Select WEMOS LOLIN32 Lite board for upload
Selecione a placa WEMOS LOLIN32 Lite para upload

Uma Caveira como Luz Noturna

Agora temos o circuito para construir uma luz noturna ativada por movimento e colocar tudo numa caixa com bateria funcionaria muito bem. Mas eu queria algo um pouco mais excitante. Por isso, comprei esta mini-caveira anatomicamente correta listada nas peças necessárias. Tem uma tampa removível e pode facilmente acomodar todo o hardware.

Abaixo pode ver uma foto da caveira aberta e do circuito incluindo a bateria. Só tive de alargar um pouco as órbitas oculares e o nariz para encaixar os LEDs e o sensor de movimento.

Skull as a motion activated night light
Caveira como luz noturna ativada por movimento

Note que também repintei a caveira e adicionei alguns efeitos de envelhecimento. O produto final ficou ótimo! Pode ver o sensor de movimento no nariz (os LEDs ainda não estão nesta foto).

The Skull with integrated circuitry
A caveira com a circuitaria integrada

Finalmente, estendi um pouco o código da função fade(). Separei a definição do brilho para os dois LEDs e adicionei um ciclo que faz os olhos piscar três vezes no final do período de escurecimento. Outro aviso de que a luz vai desligar-se muito em breve.

void set_leds(int brightness, int wait_ms) {
    analogWrite(LED_PIN1, brightness);
    analogWrite(LED_PIN2, brightness);
    delay(wait_ms); 
}

void fade() {
  for(int brightness=255; brightness>50; brightness--) {
    set_leds(brightness, 100);
  }  
  for(int i=0; i<3; i++) {
    set_leds(0, 500); 
    set_leds(50, 500);     
  }
}

Espero que tenha gostado deste projeto e se divirta a construir a sua própria luz noturna.

Conclusão

Neste tutorial, aprendemos a construir uma luz noturna ativada por movimento usando Arduino, sensores PIR e LDR. Combinando o poder destes componentes, podemos criar uma solução de iluminação conveniente e energeticamente eficiente para as nossas casas.

Começámos por entender os princípios de funcionamento dos sensores de luz (LDR) e PIR. O sensor de luz ajuda-nos a detetar o nível de luz ambiente, enquanto o sensor PIR deteta movimento na sua área. Combinando estes dois sensores, podemos criar um sistema que só ativa a luz noturna quando está escuro e é detetado movimento.

Depois, passámos pelo processo passo a passo de construir uma luz noturna simples. Ligámos os sensores e o módulo relé ao Arduino, e programámo-lo para controlar a luz com base nas leituras dos sensores. Esta luz noturna simples é perfeita para iluminar pequenas áreas como corredores ou casas de banho.

Para quem quer uma luz noturna mais versátil, explorámos também a construção de uma luz noturna mais brilhante com escurecimento. O efeito de escurecimento permite ajustar o nível de iluminação conforme a preferência.

Finalmente, integrámos a luz noturna numa caveira com ótimo aspeto.

Em conclusão, construir uma luz noturna ativada por movimento é um projeto divertido e prático que pode melhorar a segurança e conveniência da sua casa.

Perguntas Frequentes

Aqui estão algumas perguntas comuns sobre a construção de uma luz noturna ativada por movimento:

P: Como funciona uma luz noturna ativada por movimento?

R: Uma luz noturna ativada por movimento usa uma combinação de um sensor de luz (LDR) e um sensor infravermelho passivo (PIR) para detetar movimento na área circundante. Quando é detetado movimento e o sensor de luz deteta baixos níveis de luz, a luz é ligada.

P: Quais são as vantagens de usar uma luz noturna ativada por movimento?

R: A principal vantagem de usar uma luz noturna ativada por movimento é a eficiência energética. Ela só liga quando é detetado movimento, poupando energia comparado com uma luz noturna tradicional que fica ligada a noite toda. Além disso, oferece conveniência ao iluminar automaticamente a área quando alguém entra.

P: Posso ajustar a sensibilidade do sensor de movimento?

R: Muitos sensores de movimento vêm com configurações de sensibilidade ajustáveis. Normalmente, pode encontrar um potenciômetro ou jumper no módulo do sensor que permite ajustar a sensibilidade. No entanto, o AM312 não oferece esta opção. Opte pelo HC-SR501 maior se precisar disso.

P: Qual é o alcance do sensor de movimento?

R: O alcance da deteção de movimento depende do módulo específico que está a usar. Geralmente, a maioria dos sensores PIR tem um alcance de cerca de 5 a 7 metros. O AM312 usado aqui tem um alcance mais curto, de apenas 3-5 metros.

P: Posso usar vários sensores de movimento para melhor cobertura?

R: Sim, se quiser cobrir uma área maior, pode usar vários sensores de movimento estrategicamente colocados no espaço. Isto permite melhor cobertura e garante que a luz noturna liga sempre que for detetado movimento em qualquer direção.

P: Posso personalizar o brilho da luz noturna?

R: Sim, pode personalizar o brilho da luz noturna ajustando o código para controlar o nível de brilho.

P: Posso usar este projeto com um Arduino ou outra placa ESP32?

R: Absolutamente! Este projeto é compatível com Arduino, ESP32 e placas microcontroladoras similares. No entanto, se quiser alimentar a luz noturna por bateria, procure uma placa com baixo consumo de energia.

P: Preciso mesmo de um microcontrolador?

R: Não, se usar o sensor de movimento mais avançado HC-SR501, ele será suficiente para uma luz noturna simples. O HC-SR501 suporta um LDR para detetar níveis de luz e tem tempos de ativação ajustáveis. Adicione uma bateria e terá uma luz noturna funcional. No entanto, o HC-SR501 não tem efeito de escurecimento e não pode ser usado como sistema de alarme sem eletrónica adicional.

Se tiver mais perguntas ou precisar de ajuda adicional, sinta-se à vontade para perguntar na secção de comentários abaixo.

Links