Arduino UNO R4 - Sensor de Movimento

Este tutorial ensina como usar o sensor de movimento HC-SR501 e o Arduino UNO R4 para detectar pessoas. Em detalhes, vamos aprender:

Arduino UNO R4 com sensor de movimento

Sobre o Sensor de Movimento HC-SR501

Sensor de Movimento HC-SR501

O sensor PIR HC-SR501 detecta o movimento de pessoas ou animais. Ele é muito usado em várias aplicações, como acender e apagar luzes, abrir e fechar portas, acionar escadas rolantes e detectar intrusos.

Quando você vai a lugares onde as portas abrem e fecham sozinhas, onde as luzes acendem e apagam automaticamente ou onde as escadas rolantes começam a funcionar sozinhas, você já se perguntou: "Como isso acontece?" Se sim, este guia não só vai explicar como funciona, mas também mostrar como criar isso você mesmo. Vamos começar!

Pinagem

O sensor de movimento HC-SR501 tem três pinos:

  • Pino GND: conecte ao GND (0V)
  • Pino VCC: conecte ao VCC (5V)
  • Pino OUTPUT: envia LOW quando não há movimento e HIGH quando há movimento. Conecte este pino ao pino de entrada do Arduino UNN R4.

O HC-SR501 tem um jumper e dois potenciômetros, que ajudam a ajustar as configurações do sensor. Comece com a configuração padrão. Você pode encontrar mais informações na seção "Usos Avançados". Usos Avançados

Pinagem do Sensor de Movimento HC-SR501

Como Funciona

O sensor HC-SR501 percebe o movimento ao notar mudanças na luz infravermelha vinda do objeto que se move. Para o sensor HC-SR501 detectar um objeto, ele precisa atender a duas condições:

  • Está se agitando ou se movendo
  • Está emitindo energia infravermelha.

Portanto:

  • Se um objeto se move sem emitir raios infravermelhos (como um robô ou um carrinho de brinquedo), o sensor não vai detectá-lo.
  • Se um objeto emite raios infravermelhos, mas não se move (como uma pessoa parada), o sensor não vai detectá-lo.

Pessoas e animais emitem infravermelho naturalmente. Por isso, o sensor consegue perceber quando pessoas e animais se movem.

O estado do pino OUTPUT:

  • Se nenhuma pessoa ou animal está se movendo dentro do alcance do sensor, o pino OUTPUT do sensor fica em LOW.
  • Se uma pessoa ou animal entra no alcance do sensor, o pino OUTPUT muda de LOW para HIGH, indicando a detecção de movimento.
  • Se uma pessoa ou animal sai do alcance do sensor, o pino OUTPUT muda de HIGH para LOW, indicando o fim do movimento.

O vídeo mostra a ideia básica de como o sensor de movimento funciona. Em situações reais, o funcionamento pode variar um pouco de acordo com as configurações, como explicado na seção Usos Avançados.

Arduino UNO R4 - Sensor de Movimento HC-SR501

Quando você configura um pino do Arduino UNO R4 como entrada digital, ele consegue detectar se o item conectado está em estado LOW ou HIGH.

Conecte o pino do Arduino UNO R4 ao pino OUTPUT do sensor HC-SR501. Depois, use o código do Arduino UNO R4 para ler o valor do pino OUTPUT e detectar movimento.

Diagrama de Ligação

Diagrama de Ligação do Arduino UNO R4 com Sensor de Movimento

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Configuração Inicial

Ajuste do Tempo de AtrasoGire o parafuso totalmente no sentido anti-horário.
Ajuste do Alcance de DetecçãoGire o parafuso totalmente no sentido horário.
Seletor de Disparo RepetidoColoque o jumper como mostrado na imagem.
configuração inicial do sensor de movimento para Arduino

Como Programar o Sensor de Movimento

  • Configure um pino do Arduino UNO R4 como entrada digital usando a função pinMode().
pinMode(SENSOR_PIN, INPUT);
  • Use a função digitalRead() para verificar o estado do pino OUTPUT do sensor.
motion_state = digitalRead(SENSOR_PIN);
  • Detecte quando o movimento começa (o pino muda de estado de LOW para HIGH).
prev_motion_state = motion_state; // Store the previous state of the pin motion_state = digitalRead(SENSOR_PIN); // Read the current state of the pin if (prev_motion_state == LOW && motion_state == HIGH) { // Check for transition from LOW to HIGH Serial.println("Motion detected!"); }
  • Detecte quando o movimento termina (o estado do pino muda de HIGH para LOW).
prev_motion_state = motion_state; // Preserve the previous state of the pin motion_state = digitalRead(SENSOR_PIN); // Update the current state from sensor input if (prev_motion_state == HIGH && motion_state == LOW) { // Detect transition from HIGH to LOW Serial.println("Motion stopped!"); // Output message when motion stops }

Código Arduino UNO R4

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-motion-sensor */ #define SENSOR_PIN 2 // The Arduino UNO R4 connected to the output pin of the motion sensor int motion_state = LOW; // Initialize current pin state to LOW int prev_motion_state = LOW; // Initialize previous pin state to LOW void setup() { Serial.begin(9600); // Start serial communication at 9600 baud rate pinMode(SENSOR_PIN, INPUT); // Configure pin 2 as an input for the sensor } void loop() { prev_motion_state = motion_state; // Assign the current pin state to the previous pin state for comparison motion_state = digitalRead(SENSOR_PIN); // Read the current state from the sensor output // Check for transition from LOW to HIGH which indicates motion detected if (prev_motion_state == LOW && motion_state == HIGH) { Serial.println("Motion detected!"); // Print message when motion is detected // Optional: Additional actions when motion is detected } // Check for transition from HIGH to LOW which indicates motion has stopped else if (prev_motion_state == HIGH && motion_state == LOW) { Serial.println("Motion stopped!"); // Print message when motion has stopped // Optional: Additional actions when motion stops } }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima no Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Copie o código acima e abra-o no Arduino IDE
  • Pressione o botão Upload no Arduino IDE para carregar o código no Arduino UNO R4
  • Abra o Serial Monitor
  • Mova a mão na frente do sensor
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Motion detected! Motion stopped!
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Arduino UNO R4 com Sensor de Movimento HC-SR501 - Tutorial em Vídeo

Abaixo está um tutorial em vídeo, passo a passo, que mostra como usar o sensor de movimento HC-SR501 com o Arduino UNO R4. No final do vídeo, você vai ver como fazer um sistema de abertura automática de porta com um servo e um buzzer usando o código abaixo:

#include <Servo.h> #define SENSOR_PIN 2 // The Arduino UNO R4 connected to the output pin of the motion sensor #define SERVO_PIN 5 #define BUZZER_PIN 6 Servo servo; int motion_state = LOW; // Initialize current pin state to LOW int prev_motion_state = LOW; // Initialize previous pin state to LOW void setup() { Serial.begin(9600); // Start serial communication at 9600 baud rate pinMode(SENSOR_PIN, INPUT); // Configure pin 2 as an input for the sensor pinMode(BUZZER_PIN, OUTPUT); // Configure the buzzer pin as output servo.attach(SERVO_PIN); servo.write(0); noTone(BUZZER_PIN); } void beep() { for (int i = 0; i < 2; i++) { tone(BUZZER_PIN, 5000); delay(100); noTone(BUZZER_PIN); delay(100); } } void loop() { prev_motion_state = motion_state; // Assign the current pin state to the previous pin state for comparison motion_state = digitalRead(SENSOR_PIN); // Read the current state from the sensor output // Check for transition from LOW to HIGH which indicates motion detected if (prev_motion_state == LOW && motion_state == HIGH) { Serial.println("Motion detected!"); // Print message when motion is detected servo.write(180); beep(); // Optional: Additional actions when motion is detected } // Check for transition from HIGH to LOW which indicates motion has stopped else if (prev_motion_state == HIGH && motion_state == LOW) { Serial.println("Motion stopped!"); // Print message when motion has stopped servo.write(0); beep(); // Optional: Additional actions when motion stops } }

Usos Avançados

Esta seção traz um conhecimento mais aprofundado. NÃO se preocupe se você não entender. Pule esta seção se ela parecer difícil demais e volte outro dia. Continue lendo as próximas seções.

Podemos ajustar as configurações do sensor usando um jumper e dois potenciômetros, como descrito acima.

Ajuste do Alcance de Detecção

Este potenciômetro ajusta a distância de detecção (cerca de 3 metros a 7 metros).

  • Quando girado totalmente no sentido horário, o alcance de detecção é de cerca de 3 metros.
  • Quando girado totalmente no sentido anti-horário, o alcance de detecção é de cerca de 7 metros.
Alcance de Detecção do Sensor de Movimento

Podemos mudar a posição do potenciômetro para obter o alcance que quisermos, entre 3 metros e 7 metros.

Ajuste do Tempo de Atraso

Este potenciômetro ajusta o tempo de atraso.

  • Se você girá-lo totalmente no sentido horário, o tempo de atraso será de cerca de 5 minutos.
  • Se você girá-lo totalmente no sentido anti-horário, o tempo de atraso será de cerca de 3 segundos.

A seguir, vamos explicar o que significa o tempo de atraso e como ele se relaciona com o Disparo Repetido.

ajuste do tempo de atraso do sensor de movimento

Seletor de Disparo Repetido

Este jumper permite escolher um modo de disparo: disparo único ou disparo repetido.

seleção do modo de disparo do sensor de movimento

Vamos chamar a configuração do tempo de atraso (ajustada pelo Ajuste do Tempo de Atraso) de time_delay. Imagine que você continue se movendo dentro da área de detecção do sensor por um bom tempo, que vamos chamar de motion_time (muito maior que time_delay).

  • No modo de disparo único, o pino OUTPUT alterna entre LOW e HIGH várias vezes. Ele fica em HIGH por um período igual a "time_delay" e em LOW por um tempo fixo de 3 segundos.
modo de disparo único do sensor de movimento
  • O pino OUTPUT fica em HIGH durante o tempo de movimento mais o tempo de atraso.
modo de disparo repetido do sensor de movimento

Teste

Vamos testar os modos de disparo. Gire o Ajuste do Tempo de Atraso totalmente para a esquerda para definir o tempo de atraso em 3 segundos.

  • Modo de Disparo Único:
    • Coloque o jumper para selecionar o modo de disparo único.
    • Acene com a mão na frente do sensor continuamente por 10 segundos.
    • Tire a mão do alcance do sensor.
    • Espere 3 segundos; depois, veja no Serial Monitor a saída mostrada abaixo.
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno R4 WiFi
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
    New Line
    9600 baud
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Ln 11, Col 1
    Arduino Uno R4 WiFi on COM15
    2
    • Modo de Disparo Repetido:
      • Coloque o jumper para ativar o modo de Disparo Repetido.
      • Mova a mão continuamente na frente do sensor por cerca de 10 segundos.
      • Tire a mão do alcance do sensor.
      • Depois de esperar 3 segundos, veja no Serial Monitor a saída.
      ∞
      Newbiely | Arduino IDE 2.3.8
      ──
      ☐
      ✕
      File
      Edit
      Sketch
      Tools
      Help
      Arduino Uno R4 WiFi
      Newbiely.ino
      ···
      8 Serial.println("Hello World!");
      Output
      Serial Monitor
      Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
      New Line
      9600 baud
      Motion detected! Motion stopped!
      Ln 11, Col 1
      Arduino Uno R4 WiFi on COM15
      2

      No modo de disparo único, o sensor é ativado duas ou três vezes. No modo de disparo repetido, ele é ativado apenas uma vez.

      ※ Nota:

      Durante o período LOW, que dura 3 segundos, o sensor não consegue detectar nenhum movimento. Isso significa que o sensor fica inativo nesse tempo, mas isso normalmente não causa problemas.

      É recomendado usar o modo de disparo repetido.

      Em aplicações práticas:

      • Dispositivos ou máquinas costumam ser ligados quando uma pessoa é detectada por perto.
      • Dispositivos ou máquinas não são desligados assim que a pessoa sai. Eles são desligados depois de um certo atraso.

Referências de Funções

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