Arduino Nano ESP32 - Sensor de Movimento

Este tutorial explica como usar o Arduino Nano ESP32 com o sensor de movimento HC-SR501. Em detalhes, vamos aprender:

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Sensor de Movimento HC-SR501
1×Protoboard
1×Fios Jumper
1×(Opcional) Conector de Alimentação DC
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Sensor de Movimento HC-SR501

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 um intruso, abrir/fechar a porta...)

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 envia o sinal correspondente à detecção de movimento:
    • LOW se nenhum movimento for detectado
    • HIGH se movimento for detectado.

    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.

    Pinagem do Sensor de Movimento HC-SR501

    Como o Sensor de Movimento HC-SR501 Funciona

    O princípio de funcionamento do sensor HC-SR501 se baseia na mudança da radiação infravermelha no objeto em movimento. Para ser detectado pelo sensor HC-SR501, o objeto precisa atender a dois requisitos:

    • O objeto está emitindo raios infravermelhos.
    • O objeto está se movendo ou balançando

    Portanto:

    • 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 veículo), ele NÃO é detectado pelo sensor.

    Animais e pessoas emitem raios infravermelhos naturalmente. Portanto, 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. E então a presença de pessoas é inferida a partir da detecção de movimento:

    • Se o movimento é detectado, há pessoas presentes
    • Se o movimento NÃO é detectado, NÃO há pessoas presentes

    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 Arduino Nano ESP32 (ou MCU) deduz que NÃO há pessoa presente.

    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.

    Arduino Nano 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.

    Ao conectar o pino do ESP32 ao pino OUTPUT do sensor HC-SR501, podemos usar o código do Arduino Nano ESP32 para ler o valor do pino OUTPUT e então inferir o movimento.

Diagrama de Ligação entre o Sensor de Movimento HC-SR501 e o Arduino Nano ESP32

  • O diagrama de ligação quando a placa Arduino Nano ESP32 é alimentada pela porta USB.
Diagrama de Ligação do Sensor de Movimento com o Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação quando a placa Arduino Nano ESP32 é alimentada pelo pino Vin.
Diagrama de Ligação do Sensor de Movimento com o Arduino Nano ESP32 usando adaptador de alimentação externo

This image is created using Fritzing. Click to enlarge image

Configuração Inicial

Ajustador do Alcance de Detecção Gire-o totalmente no sentido horário.
Ajustador do Atraso de Tempo Gire-o totalmente no sentido anti-horário.
Seletor de Disparo Repetido Coloque o jumper como na imagem abaixo.
Configuração inicial do sensor de movimento com o Arduino Nano ESP32

Como Programar o Sensor de Movimento

  • Configure um pino do ESP32 para o modo de entrada digital usando a função pinMode()
pinMode(PIN_TO_SENSOR, INPUT);
  • Leia o estado do pino OUTPUT do sensor usando a função digitalRead().
motion_state = digitalRead(PIN_TO_SENSOR);
  • Detecte o início do movimento (o estado do pino muda de LOW para HIGH)
prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); }
  • Detecte o fim do movimento (o estado do pino muda de HIGH para LOW)
prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); }

Código Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-motion-sensor */ #define PIN_TO_SENSOR D2 // The Arduino Nano ESP32 pin connected to OUTPUT pin of sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(PIN_TO_SENSOR, INPUT); // set Arduino Nano ESP32 pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: turn off alarm, light or deactivate a device ... here } }

Passos Rápidos

  • Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente do Arduino Nano ESP32 no Arduino IDE.
  • Copie o código acima e cole no Arduino IDE.
  • Compile e faça o upload do código para a placa Arduino Nano ESP32 clicando no botão Upload do Arduino IDE
  • Abra o Serial Monitor no Arduino IDE
Como abrir o Serial Monitor no Arduino IDE
  • Mova a mão no alcance do sensor
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Motion detected! Motion stopped!
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Vídeo

Referências de Funções

Tutoriais Relacionados

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!