Como usar o sensor de movimento PIR com Raspberry Pi Pico

Tempo de leitura: 6 minutes

Neste tutorial, aprenderemos como fazer a interface do sensor de movimento PIR com o Raspberry Pi Pico e usar os pinos GPIO do Raspberry Pi Pico como pinos de saída e pinos de entrada. Assim, também mostraremos como controlar um LED através de um sensor de movimento PIR com uma placa Pi Pico. Estaremos lendo o valor do sensor de movimento e acendendo o LED de acordo. Assim, o terminal do sensor de movimento atuará como entrada digital e o LED atuará como saída digital.

Pré-requisitos

Antes de começarmos esta lição, certifique-se de que você esteja familiarizado e tenha a versão mais recente do Python 3 em seu sistema, tenha configurado o MicoPython no Raspberry Pi Pico e tenha um Ambiente de Desenvolvimento Integrado (IDE) em execução no qual faremos a programação. Usaremos o mesmo Thonny IDE que usamos anteriormente quando aprendemos a piscar e perseguir LEDs em micro-python

 

Pinos GPIO Raspberry Pi Pico

Raspberry Pi Pico expõe 26 pinos GPIO multifuncionais de um total de 36 pinos GPIO disponíveis no microcontrolador RP2040. Desses 26 pinos, 23 são pinos digitais e apenas 3 pinos têm capacidade de leitura analógica. Esses pinos digitais são marcados como GP0, GP1 e até GP22. GP23, GP24 e GP25 não são expostos na pinagem. Portanto, não pode ser usado. GP26, GP27 e GP28 são os próximos pinos digitais disponíveis. Esses 26 pinos GPIO podem ser usados tanto no modo de entrada digital quanto no modo de saída digital.

Sensor de movimento PIR com Raspberry Pi Pico

Existem muitos sensores PIR disponíveis no mercado, mas estamos usando sensores de movimento PIR passivos neste projeto. Ele pode detectar um movimento humano dentro de um alcance de 10m com muita facilidade. Possui três pinos e a função de cada pino é descrita abaixo:

  • GND: É um pino terra e você deve conectá-lo ao terra do seu Raspberry Pi Pico.
  • VDD: É um pino do fornecedor de energia e você deve conectá-lo com o pino de 3,3V do Raspberry Pi Pico.
  • Saída: É um pino de saída do sensor PIR. Basicamente, obtemos saída deste pino. Vamos conectá-lo com um dos pinos GPIO do nosso Raspberry Pi Pico.

Funcionamento do sensor de movimento PIR

O sensor PIR é um sensor detector de movimento de baixo custo. É um sensor de movimento passivo, o que significa que só pode detectar algo ao seu redor e não pode transmitir nada. Sempre que houver um movimento ao redor do sensor, ele detectará o calor do corpo humano e produzirá uma lógica de saída alta 1 na saída do sensor. Todos os objetos emitem raios infravermelhos quando são aquecidos e, pelo mesmo princípio, o corpo humano emite raios infravermelhos devido ao calor do corpo. Assim, sempre que o sensor de movimento detecta o corpo humano ao seu redor, sua saída se torna alta. Também podemos ajustar a sensibilidade deste sensor alterando os resistores variáveis ​​disponíveis no sensor. Um resistor variável é para ajuste de sensibilidade de distância e outro resistor variável é para ajuste de sensibilidade de tempo, que é a quantidade de tempo em que a saída deve ser alta.

Interface de sensor de movimento PIR e LED com Raspberry Pi Pico

Os seguintes componentes são necessários:

  • Placa Raspberry Pi Pico
  • Um sensor PIR
  • Um LED de 5 mm
  • Um resistor de 220 ohms
  • Protoboard
  • Fios de conexão

Monte seu circuito conforme mostrado no diagrama abaixo:

No esquema acima, podemos ver que o GPIO14 está conectado com o pino do ânodo do LED através do resistor de 220 ohms, e o pino do cátodo está conectado com o terra comum.

O sensor PIR que estamos usando neste tutorial consiste em três pinos. Dois deles são pinos de fonte de alimentação, como VCC e pinos de aterramento. Podemos alimentar o sensor de movimento PIR diretamente do pino de alimentação Raspberry Pi Pico 3.3V, conforme mostrado no diagrama esquemático acima. O pino central é um pino de saída que fornece um pulso alto ativo sempre que o movimento é detectado. Caso contrário, este pino permanece ativo baixo.

Quando o movimento é detectado, um estado lógico de alto (1) será passado no GPIO13 e a entrada do sensor estará em um estado alto. Quando o botão for solto, um estado lógico de baixo (0) será passado no GPIO13 e a entrada do sensor de movimento estará em um estado lógico LOW. Vamos ler esses dois estados do sensor de movimento e ligar e desligar o LED de acordo.

MicroPython Sketch: Raspberry Pi Pico Control Digital Output (LED) através da leitura da entrada digital (estado do sensor de movimento PIR)

Crie um novo arquivo no uPyCraft ou Thonny IDE e copie este código para o arquivo recém-criado. Depois disso, baixe e execute este script MicroPython no Raspberry Pi Pico.

from machine import Pin
from time import sleep

LED = Pin(14, Pin.OUT)
PIR_sensor = Pin(13, Pin.IN, Pin.PULL_UP)
LED.low()
sleep(3)

while True:
   print(PIR_sensor.value())
   if PIR_sensor.value() == 0:
       print("Motion Detected! -> LED is now ON")
       LED.high()
       sleep(5)
   else:
       print("No motion detected -> LED is OFF")
       LED.low()
       sleep(1)

 

Como o Código Funciona?

Importando Bibliotecas MicroPython

Agora, vamos ver o funcionamento de um script MicroPython. Importaremos a biblioteca para a classe Pin do módulo da máquina. Para interagir com os GPIOs de entrada/saída importaremos o módulo da máquina que contém as classes para interagir com os GPIOs. Também devemos importar o módulo sleep para inserir delay em nosso script MicroPython.

from machine import Pin
from time import sleep

Configurando a entrada/saída digital

A classe Pin() recebe quatro parâmetros conforme mostrado abaixo:

Pin(Pin_number, pin_mode, pull, value)
  • O primeiro argumento é um número de pino para o qual queremos configurar em diferentes modos, como entrada, saída, etc.
  • O segundo argumento define o modo do pino, como entrada digital (Pin.IN), saída digital (Pin.OUT), dreno aberto (OPEN_DRAIN).
  • O terceiro argumento especifica se queremos habilitar o resistor interno pull-up e pull-down de um pino GPIO. Esses resistores pull-up e pull-down tornam-se úteis quando queremos usar pinos GPIO como um pino de entrada digital (PULL_UP ou PULL_DOWN).
  • O último argumento define o estado inicial do pino GPIO como ativo alto (1) ou ativo baixo (0). Mas, por padrão, o estado inicial do GPIO na reinicialização é 0 (ativo baixo).

Definir saída digital

Para ativar ou desativar um GPIO, vamos defini-lo como uma saída. O primeiro argumento na classe Pin() é o número do pino no qual estamos configurando a saída. A saída está no GPIO14 que está conectado ao LED. O segundo argumento mostra o modo pin, por exemplo. entrada digital ou modo de saída digital. Como estamos configurando o GPIO14 como saída digital, demos a ele como ‘Pin.Out’. Isso é armazenado no objeto ‘LED’.

LED = Pin(14, Pin.OUT)

Definir entrada digital

Para obter o valor de um GPIO, vamos criar um objeto Pin ‘PIR_sensor’ e defini-lo como entrada usando ‘Pin.IN’ como segundo argumento em nossa classe Pin(). A entrada está no GPIO13 que especificamos no primeiro argumento e está conectado ao sensor de movimento PIR. O terceiro argumento habilita o resistor pull-up neste pino que habilita um estado alto no pino do sensor de movimento.

PIR_sensor = Pin(13, Pin.IN, Pin.PULL_UP)

Aqui, configuramos o GPIO14 (conectado ao LED) para um estado baixo e fornecemos um atraso de 3 segundos para que o sensor se estabilize.

LED.low()
sleep(3)

Dentro do loop, acessamos o estado do sensor de movimento PIR usando a função value() da classe Pin através do objeto “PIR_sensor”. Isso será impresso no terminal shell do nosso IDE.

print(PIR_sensor.value())

Se o estado do sensor for 0, significa que o movimento é detectado pelo sensor e acendemos o LED por 5 segundos. O terminal shell imprimirá a mensagem: Movimento detectado! -> O LED está agora LIGADO.

Se o estado do sensor for 1, isso significa que o movimento não é detectado pelo sensor, então o LED permanece DESLIGADO. O terminal shell imprimirá a mensagem: Nenhum movimento detectado -> LED está DESLIGADO. Teremos um atraso de 1 segundo e então o loop continua verificando a detecção de movimento.

while True:
   print(PIR_sensor.value())
   if PIR_sensor.value() == 0:
       print("Movimento detectado! -> O LED está agora LIGADO")
       LED.high()
       sleep(5)
   else:
       print("Nenhum movimento detectado -> LED está DESLIGADO")
       LED.low()
       sleep(1)

Demonstração

Agora crie um novo arquivo no uPyCraft IDE ou Thonny IDE e carregue este MicroPython Script para o Raspberry Pi Pico. Você verá que o LED permanece DESLIGADO quando nenhum movimento é detectado e quando o sensor PIR detecta movimento, o LED permanece LIGADO por 5 segundos.

Podemos visualizar as mensagens detectadas de movimento no console do shell