Framework Arduino II: Aula 14 Sensor PIR Detector de Movimento

Imagem meramente ilustrativa


Introdução

    Já que falamos na aula anterior sobre infravermelho, vamos conhecer hoje os sensores PIR utilizados  na automação de residências para detectar movimento de pessoas em ambientes com halls de entradas e corredores.

Conhecendo o Sensor PIR

    A sigla PIR vem de Passive Infrared Sensor que significa Sensor Infravermelho Passivo, isto é, um sensor piroelétrico que capta a radiação infravermelho sem nenhuma emissão e traduz a radiação captada em um sinal elétrico.

    Um dos modelos mais populares é o HC-SR501É um sensor comercializado em um módulo que além de um receptor PIR contem no circuito dois potenciômetros do tipo trimpot. Esses potenciômetros servem para ajustar a sensibilidade do sensor e o intervalo de detecção.

    A sensibilidade refere-se ao alcance do sensor que pode variar de 3 a 7 metros, dependendo do ângulo de abertura. O intervalo de detecção é o tempo que o sensor permanece na condição de "movimento detectado" antes de qualquer outra detecção. Ele pode ser ajustado de 2,5 a 5 segundos, sendo o último o seu ajuste padrão.

    Conta também com uma capa protetora que na realidade é uma lente Fresnel que ajuda o receptor PIR a detectar as variações de infravermelho provenientes do calor do corpo humano e de animais. 

    Quando uma pessoa passa dentro do raio de detecção do sensor, o seu pino de sinal fica em estado HIGH pelo tempo ajustado no potenciômetro de intervalo. Quando nada é detectado esse pino permanece em LOW.

Componentes do Sensor PIR
Componentes do Sensor PIR


    Na figura acima vemos a parte inferior do módulo mostrando a descrição dos principais elementos, pinagem e os trimpots de ajustes. Chama a atenção a presença de um CI Biss0001 Smd que na realidade é quem faz o controle do sensor. 

    Por essa razão, se a intenção do estudante for apenas criar uma lâmpada inteligente que acenda na presença de pessoas, esse módulo pode ser instalado sozinho com uma fonte de alimentação e um relê para controlar o acendimento de lâmpada dispensando o uso do Arduino.

    Em termos de especificações, tomando como exemplo o HC-SR501, ele trabalha com uma alimentação de de 5V a 20V, sendo que o seu sinal de saída é de 3,3V. 

Montagem

    Abaixo temos o link de uma montagem básica mostrando o uso do sensor PIR para acender um Led quando um movimento é detectado. O Wokwi não permite simular o ajuste de tempo de intervalo, por isso seu tempo é fixo em 5 segundos.

    Para simular a detecção, após iniciar a simulação, clique no sensor PIR para abrir a barra superior de ajuste e então clique no botão SIMULATE MOTION. Você verá o Led se acender por cerca de 5 segundos e então se apagará.

    Para verificar esse tempo, providenciei um código que deixa esses segundos serem mostrados no monitor serial. Em máquinas muito lentas as mensagens no monitor serial podem não corresponder ao tempo real.

Simulação de sensor PIR no Wokwi
Simulação de sensor PIR no Wokwi


    Link: https://wokwi.com/projects/414460707352970241

Sketch

    Nesse código temos a declaração das constantes led sensor que definem quais pinos serão utilizados pelo led e pelo sensor como temos também a declaração de duas variáveis que controlarão o acendimento da lâmpada.

    A variável estado armazenará o estado do sinal do sensor, isto é, se detectar a presença de movimento ficará HIGH, caso contrário permanecerá em LOW

    Temos também a variável booleana esperar que poderá ser false quando o sensor estiver pronto para detectar movimento ou poderá ser true quando o sensor já tiver detectado um movimento e está no seu tempo de intervalo impossibilitado de outra detecção.

    Criamos também um contador apenas para fins didáticos para mostrar esse intervalo de detecção no monitor serial. Repare que a função setup() apenas ajusta o modo dos pinos, inicializa o monitor serial e dá instruções para o usuário.

    Na função loop() estamos lendo o estado do sensor na linha 15. Se ele estiver HIGH, significa que detectou alguém, então eu acendo o led na linha 17. Dai eu verifico se é a primeira vez que isso ocorreu testando a variável esperar.

    Se esperar é falso eu dou a mensagem de que a movimentação foi detectada e ajusto essa variável como true para que na próxima repetição do loop() eu não escreva a mensagem novamente. Depois da linha 22 a 25 eu coloquei uma contagem de tempo apenas para o aluno perceber aquele intervalo de detecção que normalmente é ajustado por potenciômetro. 

    Se não houver uma nova movimentação, após os 5 segundos de intervalo pré-estabelecido pelo Wokwi, o loop() entra no else da linha 27, desliga o led, avisa que a movimentação foi encerrada e reinicializa as variáveis esperar contador.

    Caso estudante clique por várias vezes no botão SIMULATE MOTION após uns 3 segundos do inicio da contagem, o sistema detectará uma nova movimentação e a contagem seguirá adiante após os 5 segundos. 

    Isso é o que normalmente acontece em um corredor de apartamento quando existe esse controle de iluminação e alguém está aguardando o elevador. Basta que os movimentos da pessoa sejam detectados para a luz permanecer acessa.

  1. const int led=13;
  2. const int sensor=10;
  3. int estado = LOW;
  4. bool esperar = false;
  5. int contador=1;

  6. void setup() {
  7.   pinMode(led, OUTPUT);
  8.   pinMode(sensor, INPUT);
  9.   Serial.begin(9600);
  10.   Serial.println("Clique no sensor PIR");
  11.   Serial.println("Depois clique em SIMULATE MOTION");
  12. }
  13. void loop() {
  14.   estado = digitalRead(sensor);
  15.   if (estado == HIGH) {
  16.     digitalWrite(led, HIGH);
  17.     if (esperar == false) {
  18.       Serial.println("Movimentação detectada");
  19.       esperar = true;
  20.     }
  21.     Serial.print(contador);
  22.     Serial.println("S");
  23.     contador++;
  24.     delay(1000);
  25.   } 
  26.   else {
  27.     digitalWrite(led, LOW);
  28.     if (esperar == true) {
  29.       Serial.println("Movimentação encerrada");
  30.       esperar = false;
  31.       contador=1;
  32.     }
  33.   }
  34. }

    Outra opção como sensor de movimento são os Módulos de Radar Doppler que detectam movimentos através de Microondas, mas que por enquanto não estão disponíveis nas plataformas de simulação que utilizamos. Provavelmente será nosso assunto em uma outra fase do Blog.

Próxima Aula                                                                                                                        Aula Anterior

Referências

ARDUINO E CIA. Como usar um sensor de presença PIR com Arduino. Disponível em <https://www.arduinoecia.com.br/sensor-presenca-arduino-modulo-pir-dyp-me003/> Acesso em 13 nov 2024.

BLOG ELETROGRATE. Automação Residencial: Sensor de Presença. Disponível em <https://blog.eletrogate.com/automacao-residencial-sensor-de-presenca-com-arduino/> Acesso em 13 nov 2024.

BLOG MASTER WALKER. Como usar com Arduino – Sensor PIR (Detector) de Movimento. Disponível em <https://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-sensor-pir-detector-de-movimento> Acesso em 13 nov 2024.

MAKER HERO. Sensor de Movimento Presença PIR. Disponível em <https://www.makerhero.com/produto/sensor-de-movimento-presenca-pir/> Acesso em 13 nov 2024.

LENTE DE FRESNEL. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2024. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Lente_de_Fresnel&oldid=68611476>. Acesso em: 13 nov 2024.

ROBO CORE. Sensor de Presença PIR - HC-SR501 Disponível em <https://www.makerhero.com/produto/sensor-de-movimento-presenca-pir/> Acesso em 13 nov 2024.

WOKWI. Referência do wokwi-pir-motion-sensor. Disponível em <https://docs.wokwi.com/pt-BR/parts/wokwi-pir-motion-sensor/> Acesso em 13 nov 2024.