Sensor de movimento PIR com Esptop 10 usando Micropython e Thonny IDE

Sensor de movimento PIR com Esptop 10 usando Micropython e Thonny IDE
O ESP32 pode interface vários dispositivos externos para controlar e ler diferentes sensores. PIR ou Sensor de movimento é um dos exemplos que podemos interagir com o ESP32 para detectar movimento em uma certa gama de sensor PIR usando ESP32.

Antes de começarmos a interface o ESP32 com o sensor pir, precisamos saber como as interrupções funcionam e como lê -las e lidar com eles no ESP32. Vamos discutir o funcionamento do PIR com o ESP32 em detalhes.

Aqui está o conteúdo deste artigo:

1: O que são interrupções

1.1: interrompe os pinos no ESP32

2: Chamando uma interrupção no ESP32 - Micropython

3: Interface PIR Sensor com ESP32 - Micropython

3.1: Sensor de movimento PIR (HC-SR501)

3.2: pinout hc-sr501

3.3: código

3.4: saída

1: O que são interrupções

A maioria dos eventos que acontecem na programação ESP32 é executada sequencialmente, o que significa linha por linha de execução do código. Para lidar e controlar os eventos que não precisam ser executados durante a execução seqüencial do código e Interrompe são usados.

Por exemplo, se queremos executar uma determinada tarefa quando ocorrer qualquer evento especial, ou um sinal de gatilho é dado aos pinos digitais do microcontrolador, usamos interrupções.

Com a interrupção, não precisamos verificar continuamente o estado digital do pino de entrada ESP32. Quando uma interrupção ocorre, o processador interrompe o programa principal, e uma nova função é chamada que é conhecida como ISR (Rotina de serviço de interrupção). Esse Isr A função lida com a interrupção causada após esse retorno ao programa principal e comece a executá -la. Um dos exemplos de ISR é o sensor de movimento pir que gera uma interrupção quando o movimento é detectado.

1.1: interrompe os pinos no ESP32

Uma interrupção externa ou de hardware pode ser causada por qualquer módulo de hardware, como sensor de toque ou botão. Interrupções de toque acontecem quando um toque é detectado em pinos ESP32 ou interrupção do GPIO também pode ser usada quando uma tecla ou botão é pressionada.

Neste artigo, desencadearemos uma interrupção quando a moção for detectada usando o sensor PIR com ESP32.

Quase todos os pinos do GPIO, exceto 6 pinos integrados SPI que geralmente vêm no 36 A versão PIN da placa ESP32 não pode ser usada para fins de chamada de interrupção. Portanto, para receber a interrupção externa a seguir, os pinos que se pode usar no ESP32:

2: Chamando uma interrupção no ESP32 usando o Micropython

Para programar uma placa ESP32 com sensor PIR usando o Código Micropython. Temos que definir uma função de interrupção. A seguir, estão algumas etapas simples que ajudam a definir uma interrupção para a placa ESP32.

Etapa 1: Inicialize a função de manuseio de interrupções: A função de manuseio de interrupção deve ser definida de maneira fácil para que possa executar rapidamente e retornar ao programa principal o mais rápido possível. Isso pode ser feito definindo uma variável global para que possa ser acessada em qualquer lugar dentro do código se chamado.

Aqui, em caso de sensor pir, usaremos o pino GPIO como um global variável. A função de interrupção tomará um alfine.

def handle_interrupt (pino):

Etapa 2: Configure o pino GPIO para uma interrupção: Para obter o valor do pino gpio, precisamos criar um objeto que tire a entrada dele usando o Alfinete.EM Como o segundo argumento dentro da nossa aula de pinos. Podemos renomear isso com qualquer outro.

pino = pino (13, pino.EM)

Etapa 3: Anexe a interrupção ao pino GPIO para o sensor pir usando o método irq ():

Usando o comando abaixo, podemos definir a interrupção para um alfinete que definimos anteriormente.

pir.IRQ (Trigger = PIN.Irq_rising, manipulador = handle_interrupt)

O IRQ () o método é usado para anexar a interrupção ao pino. IRQ () aceita dois argumentos diferentes:

  • Acionar
  • Manipulador

acionar: Este argumento explica o modo de gatilho. A seguir, são três modos:

  • Alfinete.Irq_falling: Quando um pino transita de alto para baixo, uma interrupção é iniciada.
  • Alfinete.Irq_Rising: Após a transição do pino de baixa para alta, uma interrupção é iniciada.
  • Alfinete.Irq_falling | pino.Irq_Rising: Acionar a interrupção sempre que um pino altera seu estado. Qualquer pino vai para alto ou baixo.

manipulador: Esta função será chamada assim que uma interrupção for acionada.

3: Interface PIR Sensor com ESP32

Como agora cobrimos os conceitos de interrupção com o ESP32 usando o Micropython agora vamos interface o sensor PIR com o ESP32. Aqui estaremos usando Alfinete.IRQ_RISHING Modo no código Micropython para o sensor PIR, porque queremos acionar um LED toda vez que o sensor pir detecta algum movimento. Este LED permanecerá ligado por um tempo definido e depois desligar.

Os seguintes componentes serão necessários:

  • Conselho de Desenvolvimento Esp32
  • Sensor de movimento PIR (HC-SR501)
  • Resistor de 220 ohm
  • Fios de jumper
  • Pão de pão
  • LIDERADO

Esquemático Para o sensor PIR com ESP32:

A configuração do PIN do ESP32 com o sensor PIR é:

3.1: Sensor de movimento PIR (HC-SR501)

PIR é um acrônimo para Sensores de infravermelho passivo. Dois sensores piroelétricos usados ​​juntos que detectarão a quantidade de calor ao redor do ambiente. Ambos os sensores piroelétricos estão um após o outro e quando um objeto entra em seu alcance, uma mudança na energia térmica ou a diferença de sinal entre esses dois sensores faz com que a saída do sensor PIR seja baixa. Depois que o Pir Out Pin for baixo, podemos definir uma instrução específica para executar (LED Blink).

A seguir, as características do sensor PIR:

  • A sensibilidade pode ser definida, dependendo da localização do projeto (como sensor de movimento de mouse ou folha)
  • O sensor pir pode ser definido por quanto tempo detecta um objeto
  • Amplamente utilizado em alarmes de segurança doméstica e outras aplicações de detecção de movimento baseadas em térmicas.

3.2: pinout hc-sr501

Pir hc-sr501 vem com três pinos. Dois deles são pinos de potência para VCC e GND e um é o pino de saída para o sinal de gatilho.

A seguir, a descrição dos pinos do sensor pir:

Alfinete Nome Descrição
1 VCC Pino de entrada para sensor conectar ao pino esp32 vin
2 FORA Saída do sensor
3 Gnd Sensor gnd

3.3: código

Agora, para programar o ESP32, escreva o código fornecido no Thonny IDE Editor ou em qualquer outro micropython ide e envie -o para o ESP32.

do pino de importação da máquina
Desde o tempo de importação do sono
movimento = falso
def handle_interrupt (pino):
movimento global
movimento = verdadeiro
Global Interrupt_pin
interromp_pin = pino
LED = PIN (4, PIN.FORA)
pir = pin (13, pino.EM)
pir.IRQ (Trigger = PIN.Irq_rising, manipulador = handle_interrupt)
enquanto é verdade:
Se movimento:
Imprimir ('movimento detectado')
liderado.valor (1)
sono (5)
liderado.valor (0)
Imprimir ('movimento parado')
movimento = falso

Primeiro, importamos o alfinete classe do módulo da máquina e dormir Método para adicionar atraso. Em seguida, uma variável é criada com nome movimento. Esta variável detectará se uma moção é detectada ou não.

Então criamos uma função handle_interrupt. Toda vez que o sensor pir detecta movimento, essa função será ativada. É preciso um alfinete como um parâmetro de entrada e indica o pino que faz com que a interrupção aconteça.

Em palavras simples toda vez que pir detecta movimento, handle_interrupt Definirá a variável de movimento como verdadeira e armazenará o alfinete que faz com que a interrupção aconteça. Uma coisa a lembrar está sempre declarando o movimento variável como global porque é necessária em todo o código.

Avançando, criamos dois objetos de pino, um para armazenar pinos de LED e o segundo levará a saída do sensor PIR no pino 13 do GPIO 13. Além disso, declaramos o pino de gatilho em ASCENDENTE modo.

No laço Parte do código, ele verificará o valor da variável de movimento assim que se tornar verdadeiro LED ligará conectada no pino 4 do ESP32. Se o movimento parado LED, desligará após 5 segundos.

3.4: saída

Na seção de saída, podemos ver que o objeto está fora do alcance do sensor pir, de modo que o LIDERADO Está virado DESLIGADO.

Agora a moção detectada pelo LED do sensor PIR virará SOBRE para 5 Sec depois disso, se nenhum movimento for detectado, ele permanecerá DESLIGADO Até o próximo gatilho ser recebido.

A saída seguinte é mostrada pelo concha/terminal em Thonny ide.

Conclusão

Um sensor PIR com ESP32 pode ajudar a detectar o movimento de coisas diferentes. Usando a função de interrupção no micropython com o ESP32, podemos acionar uma resposta em algum pino específico do GPIO. Quando a alteração for detectada, a função de interrupção será acionada e um LED ligará.