Você está na página 1de 6

Sistema Embarcado com ESP32 e Micropython

Aula 25: Interrupção Externa - Parte IV – Sensor PIR


Prof. Marcos Carnevali

Objetivo
Realizaremos um experimento utilizando um Sensor PIR para efetuarmos uma
interrupção externa, ao detectar o movimento de uma pessoa, o sensor
acionará uma interrupção a qual acenderá um Led e ativará um alarme sonoro,
também será apresentado um texto de alerta no Shell da IDE Thonny.

Sensor PIR
O Sensor PIR (Detector Piroelétrico) de Movimento é capaz de detectar
movimento de objetos que emitem calor dentro de um raio de detecção de até
7 metros, com uma abertura de ângulo menor que 100 graus. Com o sensor
ligado, qualquer objeto (que emite calor) que se movimentar dentro do seu
campo de detecção, fará com que a saída do mesmo seja ativada.
O sensor PIR que estamos utilizando é o modelo PIR-DYP-ME003-
SEN005 (figura 1), podendo ser alimentado com uma tensão contínua de 4,5 a
20 V, porém a sua tensão de saída é de 3,3 V.
Inicialmente o sensor apresenta 0 V em sua saída, quando detectar o
movimento de um corpo a tensão vai a 3,3 V, portanto iremos elaborar o nosso
código para que seja sensível à borda de subida.

Figura 1: Sensor PIR


Fonte: Datasheet-Sensor-PIR-DYP-ME003-SEN005.pdf
Na figura 2, temos os detalhes dos pinos do Sensor PIR, preste atenção
no Datasheet do sensor a ser utilizado, pois existem sensores que funcionam
com alimentação de 3,3 V e os pinos de alimentação ligados em uma
configuração diferente. Cuidado para não inverter a polaridade da tensão de
alimentação.

Figura 2: Detalhes dos pinos do Sensor PIR


Fonte: Datasheet-Sensor-PIR-DYP-ME003-SEN005.pdf

Na figura 3, podemos observar outros detalhes, principalmente os


trimpots de ajuste de sensibilidade e temporização do módulo.

Figura 3: Detalhes do módulo do Sensor PIR


Fonte: Datasheet-Sensor-PIR-DYP-ME003-SEN005.pdf
Montagem do Circuito

A montagem é realizada em protoboards alimentando o Sensor PIR com


5 V da fonte do ESP32, a saída do sensor é ligada no GPIO 22, o Led no GPIO
23 e o Buzzer (elemento sonoro) no GPIO21.

Na figura 4, temos detalhes da montagem, lembrando que existem no


mercado sensores que podem ser alimentados com uma tensão de 3,3 V. No
nosso caso estamos aproveitando um sensor que utilizamos em experimentos
com a placa Arduino (utiliza 5 V nas suas portas).

Figura 4: Detalhes da montagem do experimento com Sensor PIR


Fonte: O autor
Código
Inicialmente importamos as bibliotecas Pin e sleep, em seguida criamos
quatro variáveis: led, buzzer, sensor_pir e movimento, figura 5.

Através da variável led configuramos o pino 23 como uma porta de saída


(GPIO23) a qual irá controlar o Led; através da variável buzzer configuramos o
pino 21 como uma porta de saída (GPIO21) para controlar o sinal sonoro do
alarme; a variável sensor_pir para configurarmos o pino 22 como uma porta de
entrada (GPIO22) para receber o sinal do Sensor PIR.

Criamos uma variável chamada movimento para atribuirmos uma lógica


inicial False (Falso), a mesma será mudada quando ocorrer uma interrupção
externa.

Figura 5: Importando bibliotecas e criando variáveis


Fonte: O autor

Na figura 6, criamos uma função denominada de chamada_Interrupcao a


qual será chamada toda vez em que ocorrer uma interrupção externa através
da porta GPIO22.

Na função guardamos o pino que causou a interrupção, no nosso caso


não seria necessário, pois estamos trabalhando com um único pino de
interrupção, porém é muito útil quando estivermos trabalhando com várias
interrupções que irão acionar a mesma função de interrupção, sendo
interessante sabermos qual GPIO gerou a interrupção.
Observem que através da instrução de interrupção sensor_pir.irq
(trigger=Pin.IRQ_RISING) configuramos a GPIO22 como porta sensível à
borda de subida (variável sensor_pir).

A função chamada_Interrupcao somente muda a variável movimento


para True (Vverdadeiro) e salva o pino que acionou a interrupção. Deve-se
sempre manter as funções criadas para as interrupções o mais curtas possível.

Figura 6: Criando a função chamada_Interrupcao


Fonte: O autor

Na figura 7, temos a sequência de ações criadas a partir do momento


em que temos uma interrupção externa feita pelo Sensor PIR e através da
porta GPIO22.

Primeiro o laço while verifica se a variável denominada movimento é


True (Verdadeiro), lembrando que se a variável movimento for de False para
True é porque foi detectado uma alteração de borda (no caso borda de subida)
no nível de tensão no pino 22 (GPIO22), portanto ocorreu uma interrupção
externa. Em seguida, se for True, será impresso na tela (no Shell da IDE
Thonny) a mensagem: Movimento Detectado!!! Alerta!!! ; acenderá o Led e
acionará o Buzzer (sinal de alarme sonoro), ambos estarão ativos por 7
segundos, depois são desativados, e a mensagem Iniciada nova varredura é
impressa no Shell, finalmente a variável movimento recebe a lógica False
(Falso) e uma nova verificação de interrupção é iniciada, sendo que, a
sequência do laço while só será iniciada novamente se ocorrer uma nova
interrupção, ou seja, a variável movimento mudar de False para True.

Você também pode gostar