ESP32 - Sensor de Movimento

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

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

    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 variação da radiação infravermelha do 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

    Então:

    • 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.

    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:

    • Se o movimento for detectado, há pessoas presentes
    • Se o movimento NÃO for 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 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)
Diagrama de Ligação ESP32 Sensor de Movimento

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)
Diagrama de Ligação ESP32 Sensor de Movimento

This image is created using Fritzing. Click to enlarge image

Como conectar o ESP32 e o sensor de movimento
Como ligar o ESP32 e o sensor de movimento

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.
Configuração inicial do sensor de movimento ESP32

Como Programar o Sensor de Movimento

  • Configure um pino do ESP32 no 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().
pinStateCurrent = digitalRead(PIN_TO_SENSOR);
  • Detecte o início do movimento (o estado do pino muda de LOW para HIGH)
pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); }
  • Detecte o fim do movimento (o estado do pino muda de HIGH para LOW)
pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); }

Código ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-motion-sensor */ const int PIN_TO_SENSOR = 19; // GPIO19 pin connected to OUTPUT pin of sensor int pinStateCurrent = LOW; // current state of pin int pinStatePrevious = LOW; // previous state of pin void setup() { Serial.begin(9600); // initialize serial pinMode(PIN_TO_SENSOR, INPUT); // set ESP32 pin to input mode to read value from OUTPUT pin of sensor } void loop() { pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (pinStatePrevious == HIGH && pinStateCurrent == 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 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
Como abrir o Serial Monitor no Arduino IDE
  • Mova sua mão na frente do alcance do sensor
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Motion detected! Motion stopped!
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Vídeo

Referências da Linguagem

※ 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!