ESP32 - Sensor de Movimento
Este tutorial ensina como usar o ESP32 com o sensor de movimento HC-SR501. Em detalhes, vamos aprender:
- Como um sensor de movimento HC-SR501 funciona
- Como conectar um sensor de movimento HC-SR501 ao ESP32
- Como ler o valor de um sensor de movimento HC-SR501 para detectar pessoas
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de Movimento HC-SR501

O sensor PIR HC-SR501 é um sensor que consegue detectar o movimento de pessoas (ou animais). Ele é muito usado para detectar a presença de pessoas em várias aplicações (ligar/desligar lâmpadas automaticamente, ativar/desativar escadas rolantes, detectar intrusos, abrir/fechar portas...)
Pinagem do Sensor de Movimento HC-SR501
O sensor de movimento HC-SR501 tem 3 pinos:
- Pino VCC: conecte este pino ao VCC (5V)
- Pino GND: conecte este pino ao GND (0V)
- Pino OUTPUT: conecte este pino a um pino de entrada do ESP32. Este pino fornece o sinal correspondente à detecção de movimento:
- LOW se nenhum movimento for detectado
- HIGH se um movimento for detectado.
- O objeto está emitindo raios infravermelhos.
- O objeto está se movendo ou balançando
- Se um objeto está emitindo raios infravermelhos mas NÃO está se movendo (por exemplo, uma pessoa parada sem se mexer), ele NÃO é detectado pelo sensor.
- Se um objeto está se movendo mas NÃO está emitindo raios infravermelhos (por exemplo, um robô ou um veículo), ele NÃO é detectado pelo sensor.
- Se o movimento for detectado, há pessoas presentes
- Se o movimento NÃO for detectado, NÃO há pessoas presentes
Há também dois potenciômetros e um jumper no sensor de movimento HC-SR501. Esses potenciômetros e o jumper são usados para ajustar a configuração do sensor. As instruções detalhadas estão descritas em Usos Avançados.

Como o Sensor de Movimento HC-SR501 Funciona
O princípio de funcionamento do sensor HC-SR501 se baseia na variação da radiação infravermelha do objeto em movimento. Para ser detectado pelo sensor HC-SR501, o objeto precisa atender a dois requisitos:
Então:
Animais e pessoas emitem raios infravermelhos naturalmente. Por isso, animais e pessoas podem ser detectados pelo sensor HC-SR501 se estiverem se movendo.
O vídeo acima mostra o princípio de funcionamento do sensor de movimento. Na prática, o sensor de movimento pode funcionar de forma diferente de acordo com a configuração do sensor (descrita na seção Usos Avançados)
Detectando a Presença de Pessoas
O sensor em si NÃO detecta diretamente a presença de pessoas, ele apenas detecta o movimento. A presença de pessoas é então deduzida a partir da detecção de movimento:
Há um problema com essa regra na prática: as pessoas estão presentes no alcance do sensor, mas NÃO estão se movendo. Então o movimento NÃO é detectado. O ESP32 (ou MCU) conclui que NÃO há pessoas presentes.
No entanto, o sensor é muito usado para detectar pessoas em várias aplicações porque esse problema NÃO é grave e o preço do sensor é baixo.
ESP32 e Sensor de Movimento HC-SR501
Quando um pino do ESP32 é configurado como entrada digital, ele consegue ler o estado (LOW ou HIGH) de qualquer coisa conectada a ele.
Conectando o pino do ESP32 ao pino OUTPUT do sensor HC-SR501, podemos usar o código ESP32 para ler o valor do pino OUTPUT e, então, deduzir o movimento.
Diagrama de Ligação entre o Sensor de Movimento HC-SR501 e o ESP32
- Como conectar o ESP32 e o sensor de movimento usando uma protoboard (alimentado pelo cabo USB)

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
- Como conectar o ESP32 e o sensor de movimento usando uma protoboard (alimentado pelo pino Vin)

This image is created using Fritzing. Click to enlarge image
- Como conectar o ESP32 e o sensor de movimento usando uma placa breakout com bornes de parafuso (alimentado pelo cabo USB)

- Como conectar o ESP32 e o sensor de movimento usando uma placa breakout com bornes de parafuso (alimentado pelo pino Vin)

Configuração Inicial
| Ajuste de Alcance de Detecção | Gire totalmente no sentido horário. |
| Ajuste de Tempo de Atraso | Gire totalmente no sentido anti-horário. |
| Seletor de Disparo Repetido | Coloque o jumper como na imagem abaixo. |

Como Programar o Sensor de Movimento
- Configure um pino do ESP32 no modo de entrada digital usando a função pinMode()
- Leia o estado do pino OUTPUT do sensor usando a função digitalRead().
- Detecte o início do movimento (o estado do pino muda de LOW para HIGH)
- Detecte o fim do movimento (o estado do pino muda de HIGH para LOW)
Código ESP32
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para o ESP32 no Arduino IDE.
- Copie o código acima e cole no Arduino IDE.
- Compile e faça upload do código para a placa ESP32 clicando no botão Upload no Arduino IDE
- Abra o Serial Monitor no Arduino IDE

- Mova sua mão na frente do alcance do sensor
- Veja a saída no Serial Monitor