MicroPython 및 Thonny IDE를 사용하는 ESP32 포함 PIR 모션 센서

Micropython Mich Thonny Ideleul Sayonghaneun Esp32 Poham Pir Mosyeon Senseo



ESP32는 여러 외부 장치를 인터페이스하여 다양한 센서를 제어하고 읽을 수 있습니다. PIR 또는 모션 센서는 ESP32를 사용하여 특정 범위의 PIR 센서에서 움직임을 감지하기 위해 ESP32와 인터페이스할 수 있는 예 중 하나입니다.

ESP32와 PIR 센서의 인터페이스를 시작하기 전에 인터럽트가 작동하는 방식과 ESP32에서 인터럽트를 읽고 처리하는 방법을 알아야 합니다. ESP32를 사용한 PIR 작업에 대해 자세히 살펴보겠습니다.

이 기사의 내용은 다음과 같습니다.







1: 인터럽트란?



1.1: ESP32의 인터럽트 핀



2: ESP32에서 인터럽트 호출 – MicroPython





3: PIR 센서와 ESP32의 인터페이스 – MicroPython

3.1: PIR 모션 센서(HC-SR501)



3.2: 핀아웃 HC-SR501

3.3: 코드

3.4: 출력

1: 인터럽트란?

ESP32 프로그래밍에서 발생하는 대부분의 이벤트는 순차적으로 실행됩니다. 즉, 코드를 한 줄씩 실행하는 것입니다. 코드를 순차적으로 실행하는 동안 실행할 필요가 없는 이벤트를 처리하고 제어하려면 인터럽트 사용됩니다.

예를 들어 특별한 이벤트가 발생하거나 마이크로 컨트롤러의 디지털 핀에 트리거 신호가 주어질 때 특정 작업을 실행하려는 경우 인터럽트를 사용합니다.

중단이 있으면 ESP32 입력 핀의 디지털 상태를 지속적으로 확인할 필요가 없습니다. 인터럽트가 발생하면 프로세서는 메인 프로그램을 중단하고 ISR( 인터럽트 서비스 루틴 ). 이것 ISR 함수는 메인 프로그램으로 돌아가서 실행을 시작한 후 발생하는 인터럽트를 처리합니다. ISR의 예 중 하나는 모션이 감지되면 인터럽트를 생성하는 PIR 모션 센서입니다.

1.1: ESP32의 인터럽트 핀

외부 또는 하드웨어 인터럽트는 터치 센서 또는 푸시 버튼과 같은 하드웨어 모듈로 인해 발생할 수 있습니다. 터치 인터럽트는 ESP32 핀에서 터치가 감지될 때 발생하거나 키 또는 푸시 버튼을 누를 때 GPIO 인터럽트를 사용할 수도 있습니다.

이 기사에서는 ESP32가 있는 PIR 센서를 사용하여 동작이 감지되면 인터럽트를 트리거합니다.

일반적으로 제공되는 6 SPI 통합 핀을 제외한 거의 모든 GPIO 핀 36 ESP32 보드의 핀 버전은 인터럽트 호출 목적으로 사용할 수 없습니다. 따라서 외부 인터럽트를 수신하기 위해 ESP32에서 사용할 수 있는 핀은 다음과 같습니다.

2: MicroPython을 사용하여 ESP32에서 인터럽트 호출

MicroPython 코드를 사용하여 PIR 센서로 ESP32 보드를 프로그래밍합니다. 인터럽트 함수를 정의해야 합니다. 다음은 ESP32 보드에 대한 인터럽트를 정의하는 데 도움이 되는 몇 가지 간단한 단계입니다.

1단계: 인터럽트 처리 기능 초기화: 인터럽트 처리 기능은 신속하게 실행되고 가능한 한 빨리 메인 프로그램으로 돌아갈 수 있도록 쉬운 방법으로 정의되어야 합니다. 이는 전역 변수를 정의하여 수행할 수 있으므로 호출 시 코드 내부 어디에서나 액세스할 수 있습니다.

여기서 PIR 센서의 경우 GPIO 핀을 글로벌 변하기 쉬운. 인터럽트 기능은 핀을 인수로 사용하고 인터럽트 기능을 발생시키는 GPIO 핀을 설명합니다.

데프 핸들 인터럽트 ( ) :

2단계: 인터럽트를 위한 GPIO 핀 설정: GPIO 핀의 값을 얻으려면 다음을 사용하여 입력을 받을 개체를 만들어야 합니다. 핀인 핀 클래스 내부의 두 번째 인수로. 우리는 이것을 다른 이름으로 바꿀 수 있습니다.

= ( 13 , 핀. )

3단계: irq() 메서드를 사용하여 PIR 센서용 GPIO 핀에 인터럽트를 연결합니다.

아래 명령을 사용하여 이전에 정의한 핀으로 인터럽트를 설정할 수 있습니다.

다리. IRQ ( 방아쇠 = 핀. IRQ_RISING , 매니저 = handle_interrupt )

그만큼 IRQ() 메서드는 인터럽트를 핀에 연결하는 데 사용됩니다. IRQ() 두 가지 다른 인수를 허용합니다.

  • 방아쇠
  • 매니저

방아쇠: 이 인수는 트리거 모드를 설명합니다. 다음은 세 가지 모드입니다.

  • Pin.IRQ_FALLING: 핀이 HIGH에서 LOW로 전환되면 인터럽트가 시작됩니다.
  • 핀.IRQ_RISING: 핀이 LOW에서 HIGH로 전환되면 인터럽트가 시작됩니다.
  • 핀.IRQ_FALLING|핀.IRQ_RISING: 핀이 상태를 변경할 때마다 인터럽트를 트리거합니다. 핀이 HIGH 또는 LOW로 이동합니다.

매니저: 이 함수는 인터럽트가 트리거되면 호출됩니다.

3: PIR 센서와 ESP32의 인터페이스

이제 MicroPython을 사용하여 ESP32의 인터럽트 개념을 다루었으므로 PIR 센서를 ESP32와 인터페이스할 것입니다. 여기에서 우리는 사용할 것입니다 핀.IRQ_RISING PIR 센서가 어떤 움직임을 감지할 때마다 LED를 트리거하기를 원하기 때문에 PIR 센서용 MicroPython 코드의 모드입니다. 이 LED는 설정된 시간 동안 켜져 있다가 꺼집니다.

다음 구성 요소가 필요합니다.

  • ESP32 개발 보드
  • PIR 모션 센서 (HC-SR501)
  • 220옴 저항
  • 점퍼 와이어
  • 브레드보드
  • 주도의

개략도 ESP32가 있는 PIR 센서의 경우:

PIR 센서가 있는 ESP32의 핀 구성은 다음과 같습니다.

  자동으로 생성된 테이블 설명

3.1: PIR 모션 센서(HC-SR501)

PIR은 약어입니다. 패시브 적외선 센서 . 주위의 열량을 감지하는 두 개의 초전기 센서가 함께 사용됩니다. 이 두 초전기 센서는 차례로 놓여 있으며 물체가 해당 범위 안에 들어올 때 열 에너지의 변화 또는 두 센서 사이의 신호 차이로 인해 PIR 센서 출력이 LOW가 됩니다. PIR 출력 핀이 LOW가 되면 실행할 특정 명령을 설정할 수 있습니다(LED 깜박임).

  다이어그램 설명 자동 생성

다음은 PIR 센서의 특성입니다.

  • 프로젝트 위치에 따라 감도를 설정할 수 있습니다(마우스 감지 또는 나뭇잎 움직임 감지 등).
  • PIR 센서는 물체를 감지하는 시간을 설정할 수 있습니다.
  • 가정 보안 경보 및 기타 열 기반 움직임 감지 애플리케이션에 널리 사용됩니다.

3.2: 핀아웃 HC-SR501

PIR HC-SR501에는 세 개의 핀이 있습니다. 그 중 2개는 Vcc 및 GND용 전원 핀이고 하나는 트리거 신호용 출력 핀입니다.

다음은 PIR 센서 핀에 대한 설명입니다.

이름 설명
1 VCC 센서용 입력 핀 ESP32 Vin 핀에 연결
밖으로 센서 출력
GND 센서 GND

3.3: 코드

이제 ESP32를 프로그래밍하기 위해 Thonny IDE 편집기 또는 다른 MicroPython IDE에서 주어진 코드를 작성하고 ESP32에 업로드합니다.

기계 가져오기 핀에서
~에서 시각 수면 수입
운동 = 거짓
데프 핸들 인터럽트 ( ) :
글로벌 모션
운동 = 진실
글로벌 인터럽트 핀
인터럽트_핀 =
~ 주도의 = ( 4 , 핀. 밖으로 )
다리 = ( 13 , 핀. )
다리. IRQ ( 방아쇠 = 핀. IRQ_RISING , 매니저 = handle_interrupt )
동안 진실 :
만약에 운동 :
인쇄 ( '움직임 감지됨' )
주도의. ( 1 )
( 5 )
주도의. ( 0 )
인쇄 ( '동작이 중지됨' )
운동 = 거짓

먼저, 우리는 기계 모듈의 클래스 및 지연을 추가하는 방법. 다음으로 이름을 가진 변수가 생성됩니다. 운동. 이 변수는 모션 감지 여부를 감지합니다.

그런 다음 함수를 만들었습니다. handle_interrupt.handle_interrupt. PIR 센서가 움직임을 감지할 때마다 이 기능이 활성화됩니다. 핀을 입력 매개변수로 사용하고 인터럽트를 발생시키는 핀을 나타냅니다.

간단히 말해서 PIR이 움직임을 감지할 때마다 handle_interrupt 모션 변수를 true로 설정하고 인터럽트를 발생시키는 핀을 저장합니다. 기억해야 할 한 가지 는 항상 선언합니다 운동 변수는 코드 전체에서 필요하기 때문에 전역 변수입니다.

앞으로 우리는 두 개의 핀 개체를 만들었습니다. 하나는 LED 핀을 저장하고 다른 하나는 GPIO 핀 13에서 PIR 센서 출력을 가져옵니다. 또한 다음에서 트리거 핀을 선언했습니다. 상승 방법.

에서 고리 코드의 일부에서 모션 변수의 값을 확인하여 true가 되면 ESP32의 4번 핀에 연결된 LED가 켜집니다. 움직임이 멈추면 5초 후에 LED가 꺼집니다.

3.4: 출력

출력 섹션에서 물체가 PIR 센서의 범위를 벗어난 것을 볼 수 있습니다. 주도의 켜져있다 끄다 .

이제 PIR 센서 LED가 감지한 동작이 켜집니다. 켜짐 ~을 위한 5 비서 그 후 움직임이 감지되지 않으면 그대로 유지됩니다. 끄다 다음 트리거가 수신될 때까지.

다음 출력은 쉘/터미널 토니 IDE에서.

  그래픽 사용자 인터페이스, 텍스트, 애플리케이션 설명 자동 생성

결론

ESP32가 있는 PIR 센서는 다양한 사물의 움직임을 감지하는 데 도움이 될 수 있습니다. MicroPython with ESP32의 인터럽트 기능을 사용하여 일부 특정 GPIO 핀에서 응답을 트리거할 수 있습니다. 변경이 감지되면 인터럽트 기능이 트리거되고 LED가 켜집니다.