ESP8266 - Sensor de Movimento
Você já se perguntou “Como ele consegue fazer isso?” ao encontrar lugares com portas que abrem e fecham sozinhas, lâmpadas que acendem e apagam ou escadas rolantes que ligam sem nenhuma intervenção humana? Se sim, este tutorial não só vai responder à sua pergunta, como também vai mostrar como fazer isso acontecer usando o ESP8266 e um sensor de movimento. Vamos começar!
Este tutorial ensina como usar o ESP8266 com um sensor de movimento. Em detalhes, vamos aprender:
- Como funciona o sensor de movimento HC-SR501
- Como conectar o sensor de movimento HC-SR501 ao ESP8266
- Como programar o ESP8266 para ler o estado do sensor de movimento HC-SR501
- Como usar o ESP8266 e o HC-SR501 para detectar a presença de pessoas e agir de acordo.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de Movimento HC-SR501

O sensor PIR HC-SR501 é um módulo que consegue detectar o movimento de pessoas (ou animais). Ele é muito usado em diversas aplicações para detectar a presença de pessoas, como ligar/desligar automaticamente uma lâmpada, abrir/fechar uma porta, ativar/desativar uma escada rolante ou detectar um intruso.
Pinagem do Sensor de Movimento
O sensor de movimento HC-SR501 tem três pinos:
- Pino GND: deve ser ligado ao GND (0V)
- Pino VCC: deve ser ligado ao VCC (5V)
- Pino OUTPUT: é um pino de saída. Ele fica em LOW quando nenhum movimento é detectado e em HIGH quando um movimento é detectado. Esse pino precisa ser conectado a um pino de entrada do ESP8266.
O HC-SR501 tem um jumper e dois potenciômetros que são usados para ajustar as configurações do sensor.

Como Funciona
O sensor HC-SR501 consegue detectar movimento com base nas variações da radiação infravermelha emitida por um objeto em movimento. Para que o sensor HC-SR501 identifique o objeto, dois critérios precisam ser atendidos:
- O objeto deve estar em movimento ou vibrando
- O objeto deve emitir radiação infravermelha
Consequentemente:
- Se um objeto está em movimento, mas não emite raios infravermelhos (por exemplo, um robô ou um carrinho de brinquedo), ele não será detectado pelo sensor.
- Se um objeto emite raios infravermelhos, mas não está em movimento (por exemplo, uma pessoa parada), ele não será detectado pelo sensor.
Pessoas e animais são fontes de radiação infravermelha. Assim, o sensor consegue detectar seus movimentos.
O estado do pino OUTPUT do sensor:
- Quando nenhuma pessoa (ou animal) está presente na faixa de detecção, ele fica em LOW.
- Quando uma pessoa (ou animal) entra na faixa de detecção, o pino muda de LOW para HIGH, indicando que um movimento foi detectado.
- Quando a pessoa (ou animal) sai da faixa de detecção, o pino muda de HIGH para LOW, mostrando que o movimento parou.
O vídeo acima mostra como o sensor de movimento funciona na teoria. Na prática, o sensor de movimento funciona de forma um pouco diferente, dependendo das configurações do sensor (que são descritas na seção Usos Avançados).
Detectando a Presença de Pessoas
O sensor não detecta diretamente a presença de pessoas. Ele detecta apenas movimento. Usamos o ESP8266 para inferir se há pessoas presentes ou não com base no movimento detectado pelo sensor, seguindo esta regra:
- Se o movimento é detectado, isso implica que há pessoas presentes
- Se o movimento não é detectado, isso implica que não há pessoas presentes
Essa regra não é perfeita e não funciona em um cenário em que as pessoas estão dentro da faixa do sensor, mas não se movem: o movimento não é detectado e o ESP8266 conclui que a pessoa não está presente. No entanto, isso ainda é aceitável, porque as pessoas geralmente fazem pequenos movimentos.
Por exemplo, na sua sala de reuniões, o sensor de movimento é usado para ligar e desligar a luz. Quando as pessoas entram na sala, ela é iluminada automaticamente. No entanto, se todos ficarem parados durante a reunião, o sensor não detectará nenhum movimento, indicando que ninguém está presente, e a luz será desligada. Para ligar a luz novamente, alguém precisa se mover.
No entanto, esse problema NÃO é sério e o sensor é barato. Por isso, ele é amplamente usado para detectar pessoas em muitas aplicações.
ESP8266 - Sensor de Movimento HC-SR501
Conecte um pino de entrada digital do Arduino ao pino OUTPUT do sensor HC-SR501. Usando o código do ESP8266, verifique o valor do pino OUTPUT para detectar movimento.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
Configuração Inicial
| Ajuste do Tempo de Atraso | Gire-o totalmente no sentido anti-horário. |
| Ajuste do Alcance de Detecção | Gire-o totalmente no sentido horário. |
| Seletor de Disparo Repetido | Coloque o jumper como mostrado na imagem. |

Como Programar o Sensor de Movimento
- Configure uma entrada digital em um pino do Arduino usando a função pinMode().
- Leia o estado do pino OUTPUT do sensor com a função digitalRead().
- Identifique quando o pino muda de LOW para HIGH, indicando o início do movimento.
- Identifique quando o pino muda do estado HIGH para LOW, indicando que o movimento parou.
Código ESP8266
Passos Rápidos
Para começar com o ESP8266 no Arduino IDE, siga estes passos:
- Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra o Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Copie o código e abra-o com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para enviar o código ao ESP8266.
- Abra o Serial Monitor.
- Mova a mão na frente da faixa de detecção do sensor.
- Confira a saída no Serial Monitor.
Vídeo
Usos Avançados
Como dito anteriormente, podemos alterar a configuração do sensor usando um jumper e dois potenciômetros.
Ajuste do Alcance de Detecção
Este potenciômetro é usado para mudar a distância em que algo pode ser detectado (cerca de 3 a 7 metros):
- Se você girá-lo totalmente para a direita, ele só detecta objetos dentro de 3 metros.
- Se você girá-lo totalmente para a esquerda, ele detecta objetos a até 7 metros de distância.

Ajuste do Tempo de Atraso
Este potenciômetro é usado para modificar o tempo de atraso:
- Quando girado totalmente no sentido horário, o tempo de atraso é de aproximadamente 5 minutos.
- Quando girado totalmente no sentido anti-horário, o tempo de atraso é de aproximadamente 3 segundos.
A seção a seguir explica o conceito de tempo de atraso em conjunto com o Disparo Repetido.

Seletor de Disparo Repetido
Existe um jumper que é usado para escolher os modos de disparo: disparo único ou disparo repetido.

Vamos chamar a configuração do tempo de atraso (definida pelo Ajuste do Tempo de Atraso) de time_delay. Se você continuar se movendo na faixa do sensor por um longo período (chamado de motion_time) (várias vezes maior que time_delay):
- Modo de disparo único: o estado do pino OUTPUT alternará entre LOW e HIGH várias vezes. A duração em HIGH será igual a time_delay, enquanto a duração em LOW será fixa em 3 segundos.

- Modo de disparo repetido: o estado do pino OUTPUT permanecerá em HIGH durante (motion_time mais time_delay).

Teste
- Modo de Disparo Único:
- Coloque o jumper para selecionar o modo de disparo único
- Mova a mão na frente do sensor por aproximadamente 10 segundos
- Tire a mão da faixa de detecção do sensor
- Espere 3 segundos e você verá a saída no Serial Monitor da seguinte forma:
- Coloque o jumper para selecionar o modo de disparo repetido
- Acene com a mão na frente do sensor por aproximadamente 10 segundos
- Afaste a mão da faixa de detecção do sensor
- Espere 3 segundos e você verá a saída no Serial Monitor da seguinte forma:
- No sensor de movimento: o mínimo é de 3 segundos e o máximo é de 5 minutos, o que é feito pelo Ajuste do Tempo de Atraso.
- No Código do ESP8266: qualquer valor pode ser definido, o que é feito por meio de programação.
Modo de disparo repetido:
Podemos observar que, no modo de disparo único, o sensor dispara duas ou três vezes. Já no modo de disparo repetido, ele dispara apenas uma vez.
※ Nota:
Durante o tempo em LOW (3 segundos), que é fixo e não ajustável, o sensor não consegue detectar nenhum movimento. Isso não causa problemas na prática.
Recomenda-se usar o modo de disparo repetido.
Em muitas aplicações do mundo real, ligamos ou ativamos máquinas/dispositivos quando uma pessoa está presente, e não os desligamos nem desativamos imediatamente quando a pessoa deixa de estar presente. Em vez disso, esperamos um tempo limite antes de desligá-los ou desativá-los.
Como Usar o Tempo de Atraso
Se nenhuma pessoa for detectada, o sistema de automação esperará um período de tempo antes de iniciar a ação.
O tempo de atraso pode ser ajustado no sensor de movimento e no código do ESP8266:
Se não especificarmos um tempo limite no código do ESP8266, . o valor do tempo limite será o mesmo que o tempo de atraso na configuração do sensor.
Se especificarmos um tempo limite no código do ESP8266, o tempo de atraso total será a combinação do atraso definido no sensor com o atraso especificado no código do ESP8266.
Definindo o tempo de atraso no código do ESP8266
Se o modo de disparo repetido estiver ativado, o atraso será de 30 segundos mais time_delay, que pode ser ajustado nas configurações do sensor usando o Ajuste do Tempo de Atraso.
Desafie-se
Use o sensor de movimento para realizar um dos seguintes projetos:
- Ative as luzes quando você entrar no seu quarto e desative-as 30 segundos depois que você sair. Dica: Dê uma olhada em ESP8266 - Relé.
- Dispare um alarme quando alguém se aproximar dos seus objetos de valor. Dica: Confira ESP8266 - Buzzer Piezoelétrico.