Arduino Nano - Sensor de Movimento
Você já se perguntou: “Como isso funciona?” ao passar por lugares com portas, luzes e escadas rolantes automáticas? Se sim, este tutorial não só vai responder à sua pergunta, como também vai mostrar como fazer isso acontecer usando o Arduino Nano e o sensor de movimento. Vamos começar!
Este tutorial ensina você a usar o Arduino Nano com o sensor de movimento. Em detalhes, vamos aprender:
- Como o sensor de movimento HC-SR501 funciona
- Como conectar o sensor de movimento HC-SR501 ao Arduino Nano
- Como programar o Arduino Nano para ler o estado do sensor de movimento HC-SR501
- Como usar o Arduino Nano e o sensor de movimento 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 é capaz de detectar o movimento de pessoas (ou animais). Ele é muito usado em diversas aplicações, como ligar ou desligar uma lâmpada automaticamente, abrir e fechar uma porta, ativar ou desativar uma escada rolante e detectar um intruso.
Pinagem do Sensor de Movimento
O sensor de movimento HC-SR501 tem 3 pinos:
- Pino GND: deve ser conectado ao GND (0V)
- Pino VCC: deve ser conectado ao VCC (5V)
- Pino OUTPUT: é um pino de saída e 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 Arduino.
O HC-SR501 tem um jumper e dois potenciômetros que servem para ajustar as configurações do sensor.

Como Funciona
O sensor HC-SR501 consegue detectar movimento com base nas mudanças da radiação infravermelha de um objeto em movimento. Para que o sensor HC-SR501 detecte o objeto, dois critérios precisam ser atendidos:
- O objeto deve estar em movimento ou balançando
- O objeto deve estar emitindo radiação infravermelha
Consequentemente:
- Se um objeto estiver se movendo, mas não emitir raios infravermelhos (por exemplo, um robô ou um carrinho de brinquedo), ele não será detectado pelo sensor.
- Se um objeto estiver emitindo raios infravermelhos, mas não estiver se movendo (por exemplo, uma pessoa parada), ele não será detectado pelo sensor.
Pessoas e animais são fontes de radiação infravermelha. Por isso, o sensor consegue detectar os movimentos deles.
Estado do pino OUTPUT:
- Quando nenhuma pessoa (ou animal) está dentro da área de detecção do sensor, o pino OUTPUT do sensor fica em LOW.
- Se uma pessoa (ou animal) entrar na área de detecção do sensor, o pino OUTPUT passa de LOW para HIGH, indicando que um movimento foi detectado.
- Quando a pessoa (ou animal) sai da área de detecção do sensor, o pino OUTPUT passa de HIGH para LOW, indicando que o movimento terminou.
O vídeo acima demonstra o funcionamento básico de um sensor de movimento. Na realidade, o sensor de movimento pode funcionar de forma diferente dependendo da configuração (que é descrita na seção Usos Avançados).
Detectar a Presença de Pessoas
O sensor em si não reconhece a presença de pessoas. Ele só detecta o movimento. Usamos um Arduino Nano para deduzir a presença de pessoas com base no movimento detectado pelo sensor, seguindo esta regra:
- Se um movimento for detectado, então há pessoas presentes.
- Se nenhum movimento for detectado, então não há pessoas presentes.
Essa regra funciona de forma imperfeita em uma situação prática: quando as pessoas estão dentro da área do sensor, mas não se movem, o movimento não será detectado. Consequentemente, o Arduino Nano concluirá que não há pessoas presentes.
Por exemplo, o sensor de movimento da sua sala de reunião está configurado para acender as luzes quando há pessoas presentes. Quando a reunião está em andamento e ninguém se move, o movimento não é detectado e, por isso, a presença humana não é reconhecida, o que faz as luzes serem desligadas. Para acendê-las de novo, alguém precisa se mover.
No entanto, esse problema NÃO é sério e o sensor é barato. Por isso, ele é muito usado para detectar pessoas em várias aplicações.
Arduino Nano - Sensor de Movimento HC-SR501
Conecte um pino de entrada digital do Arduino ao pino OUTPUT do sensor HC-SR501. Com o código do Arduino Nano, podemos verificar o valor do pino OUTPUT para detectar movimento.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Configuração Inicial
| Ajuste do Tempo de Atraso | Gire totalmente no sentido anti-horário. |
| Ajuste do Alcance de Detecção | Gire totalmente no sentido horário. |
| Seletor de Disparo Repetido | Coloque o jumper como mostrado na imagem. |

Como Programar o Sensor de Movimento
- Configure um pino do Arduino como entrada digital usando a função pinMode().
- Verifique o estado do pino OUTPUT do sensor com a função digitalRead().
- Identifique quando o movimento começa (o estado do pino muda de LOW para HIGH).
- Identifique quando o estado do pino mudou de HIGH para LOW, indicando que o movimento parou.
Código Arduino Nano
Passos Rápidos
- Copie o código acima e abra-o no Arduino IDE.
- Clique no botão Upload no Arduino IDE para compilar e fazer o upload do código para o Arduino Nano.
- Abra o Serial Monitor.
- Mova a mão dentro da área do sensor.
- Veja a saída no Serial Monitor.
Vídeo
Usos Avançados
Como dito antes, podemos alterar a configuração do sensor usando um jumper e dois potenciômetros.
Ajuste do Alcance de Detecção
Este potenciômetro muda a distância em que algo pode ser detectado (cerca de 3 a 7 metros).
- Girá-lo totalmente para a direita faz o sensor detectar coisas a até 3 metros de distância.
- Girá-lo totalmente para a esquerda faz o sensor detectar coisas a até 7 metros de distância.

Podemos usar o potenciômetro para definir um valor entre 3 m e 7 m.
Ajuste do Tempo de Atraso
Este potenciômetro é usado para modificar o tempo de atraso:
- Quando ele é girado totalmente no sentido horário, o tempo de atraso é de cerca de 5 minutos.
- Quando ele é 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
Há um jumper que serve para escolher entre os modos de disparo: disparo único ou disparo repetido.

Vamos chamar de time_delay a configuração do tempo de atraso, definida pelo Ajuste do Tempo de Atraso. Se você se mover dentro da área do sensor por um longo período (conhecido como motion_time) que seja várias vezes maior que time_delay:
- No 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 é fixa em 3 segundos.

- Modo de disparo repetido: o estado do pino OUTPUT permanecerá em HIGH por um período de (motion_time + time_delay).

Teste
- Modo de disparo único:
- Coloque o jumper para selecionar o modo de disparo único
- Acene com a mão na frente do sensor por cerca de 10 segundos.
- Afaste a mão da área do sensor
- Espere 3 segundos e você deve observar a saída no Serial Monitor da seguinte forma:
- Coloque o jumper para escolher o modo de disparo repetido
- Acene com a mão na frente do sensor por cerca de 10 segundos
- Afaste a mão do alcance do sensor
- Espere 3 segundos e a saída será exibida no Serial Monitor assim:
- Ligamos ou ativamos dispositivos/máquinas assim que uma pessoa está presente
- NÃO desligamos nem desativamos dispositivos/máquinas imediatamente depois que a pessoa deixa de estar presente. Desligamos ou desativamos dispositivos/máquinas depois que passa um certo tempo.
Modo de disparo repetido:
Podemos observar que, no modo de disparo único, o sensor é ativado duas ou três vezes. Já no modo de disparo repetido, o sensor dispara apenas uma vez.
※ Nota:
Durante o tempo em LOW (3 segundos, um valor 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 muitos cenários do mundo real:
Como Usar o Tempo de Atraso
Se nenhuma pessoa for detectada, o sistema de automação esperará por um período de tempo antes de agir.
O sensor de movimento tem um Ajuste do Tempo de Atraso que pode definir o tempo de atraso com mínimo de 3 segundos e máximo de 5 minutos. Além disso, o código do Arduino Nano pode ser usado para definir qualquer valor para o tempo de atraso.
Se não especificarmos um tempo limite no código do Arduino Nano, o tempo limite será equivalente ao tempo de atraso definido no sensor.
Se um tempo limite for definido no código do Arduino Nano, ele será a soma do tempo de atraso da configuração do sensor com o tempo de atraso do código do Arduino Nano.
Definindo o tempo de atraso no código do Arduino Nano
Se o modo de disparo repetido estiver ativado, o atraso no código será de 30 segundos mais time_delay, que é definido na configuração do sensor por meio do Ajuste do Tempo de Atraso.
Desafie-se
Use o sensor de movimento para realizar um destes projetos:
- Acender a luz quando você entrar no seu quarto e apagá-la 30 segundos depois que você sair. Dica: Veja Arduino Nano - Relé.
- Disparar um alarme quando alguém se aproximar dos seus objetos de valor. Dica: Veja Arduino Nano - Buzzer Piezo.