PIR Motion Sensor na may ESP32 Gamit ang MicroPython at Thonny IDE

Pir Motion Sensor Na May Esp32 Gamit Ang Micropython At Thonny Ide



Ang ESP32 ay maaaring mag-interface ng maramihang mga panlabas na aparato upang kontrolin at basahin ang iba't ibang mga sensor. Ang PIR o motion sensor ay isa sa mga halimbawang maaari nating i-interface sa ESP32 para makita ang paggalaw sa isang partikular na hanay ng PIR sensor gamit ang ESP32.

Bago natin simulan ang interfacing ng ESP32 sa PIR sensor dapat nating malaman kung paano gumagana ang mga interrupts at kung paano basahin at pangasiwaan ang mga ito sa ESP32. Talakayin natin ang paggana ng PIR sa ESP32 nang detalyado.

Narito ang nilalaman para sa artikulong ito:







1: Ano ang Mga Pagkagambala



1.1: Nakakaabala sa Mga Pin sa ESP32



2: Pagtawag ng Interrupt sa ESP32 – MicroPython





3: Interfacing PIR Sensor sa ESP32 – MicroPython

3.1: PIR Motion Sensor (HC-SR501)



3.2: Pinout HC-SR501

3.3: Code

3.4: Output

1: Ano ang Mga Pagkagambala

Karamihan sa mga kaganapan na nangyayari sa ESP32 programming ay tumatakbo nang sunud-sunod na nangangahulugang linya sa linya ng pagpapatupad ng code. Upang pangasiwaan at kontrolin ang mga kaganapan na hindi kailangang tumakbo sa sunud-sunod na pagpapatupad ng code an Nakakaabala ay ginamit.

Halimbawa, kung gusto naming magsagawa ng isang partikular na gawain kapag may nangyaring anumang espesyal na kaganapan, o isang trigger signal ang ibinibigay sa mga digital na pin ng microcontroller na ginagamit namin na interrupt.

Sa pagkaantala, hindi namin kailangang patuloy na suriin ang digital na estado ng ESP32 input pin. Kapag naganap ang isang interrupt, ihihinto ng processor ang pangunahing programa, at tinatawag ang isang bagong function na kilala bilang ISR ( Makagambala sa Routine ng Serbisyo ). Ito ISR pinangangasiwaan ng function ang interrupt na dulot pagkatapos na bumalik sa pangunahing programa at simulan itong isagawa. Ang isa sa mga halimbawa ng ISR ay ang PIR motion sensor na bumubuo ng interrupt kapag natukoy ang paggalaw.

1.1: Nakakaabala sa Mga Pin sa ESP32

Ang isang panlabas o hardware interrupt ay maaaring sanhi ng anumang hardware module tulad ng touch sensor o push button. Nangyayari ang mga touch interrupts kapag may na-detect na touch sa mga ESP32 pin o maaari ding gamitin ang GPIO interrupt kapag pinindot ang isang key o push button.

Sa artikulong ito, magti-trigger kami ng interrupt kapag natukoy ang paggalaw gamit ang PIR sensor na may ESP32.

Halos lahat ng mga GPIO pin maliban sa 6 na SPI integrated pin na kadalasang pumapasok sa 36 Ang pin na bersyon ng ESP32 board ay hindi maaaring gamitin para sa layunin ng interrupt na pagtawag. Kaya, upang makatanggap ng panlabas na interrupt na sumusunod ay ang mga pin na magagamit ng isa sa ESP32:

2: Pagtawag ng Interrupt sa ESP32 Gamit ang MicroPython

Upang magprogram ng ESP32 board na may PIR sensor gamit ang MicroPython code. Kailangan nating tukuyin ang isang interrupt function. Ang mga sumusunod ay ilang simpleng hakbang na tumutulong sa pagtukoy ng interrupt para sa ESP32 board.

Hakbang 1: Simulan ang interrupt handling function: Ang interrupt handling function ay dapat na tukuyin sa isang madaling paraan upang maisagawa ito nang mabilis at bumalik sa pangunahing programa sa lalong madaling panahon. Magagawa ito sa pamamagitan ng pagtukoy ng isang global variable para ma-access ito kahit saan sa loob ng code kung tawagin.

Dito sa kaso ng PIR sensor gagamitin namin ang GPIO pin bilang a global variable. Ang interrupt function ay kukuha ng pin bilang argumento at ilalarawan ang GPIO pin na nagiging sanhi ng interrupt function na mangyari.

def handle_interrupt ( pin ) :

Hakbang 2: I-setup ang GPIO pin para sa isang interrupt: Upang makuha ang halaga ng GPIO pin kailangan naming lumikha ng isang bagay na kukuha ng input mula dito gamit ang Pin.IN bilang pangalawang argumento sa loob ng aming pin class. Maaari naming palitan ang pangalan nito sa anumang iba pa.

pin = Pin ( 13 , Pin. SA )

Hakbang 3: Maglakip ng interrupt sa GPIO pin para sa PIR sensor gamit ang irq() method:

Gamit ang command sa ibaba, maaari naming itakda ang interrupt sa isang pin na tinukoy namin kanina.

ang tulay. irq ( gatilyo = Pin. IRQ_RISING , handler = handle_interrupt )

Ang irq() paraan ay ginagamit upang ilakip ang interrupt sa pin. irq() tumatanggap ng dalawang magkaibang argumento:

  • Trigger
  • Handler

trigger: Ipinapaliwanag ng argumentong ito ang mode ng pag-trigger. Ang sumusunod ay tatlong mga mode:

  • Pin.IRQ_FALLING: Kapag ang isang pin ay lumipat mula sa HIGH hanggang LOW, magsisimula ang isang interrupt.
  • Pin.IRQ_RISING: Sa paglipat ng pin mula LOW hanggang HIGH, magsisimula ang isang interrupt.
  • Pin.IRQ_FALLING|Pin.IRQ_RISING: I-trigger ang interrupt sa tuwing babaguhin ng isang pin ang estado nito. Alinman sa pin napupunta sa HIGH o LOW.

handler: Tatawagin ang function na ito kapag na-trigger ang isang interrupt.

3: Interfacing PIR Sensor sa ESP32

Sa ngayon ay sakop na namin ang mga konsepto ng interrupt sa ESP32 gamit ang MicroPython ngayon ay i-interface namin ang PIR sensor sa ESP32. Dito natin gagamitin Pin.IRQ_RISING mode sa MicroPython code para sa PIR sensor dahil gusto naming mag-trigger ng LED sa tuwing may nakitang paggalaw ang PIR sensor. Ang LED na ito ay mananatiling NAKA-ON para sa isang nakatakdang oras pagkatapos ay i-OFF ito.

Ang mga sumusunod na sangkap ay kinakailangan:

  • ESP32 development board
  • PIR motion sensor (HC-SR501)
  • 220 Ohm risistor
  • Mga wire ng jumper
  • Breadboard
  • LED

Schematic para sa PIR sensor na may ESP32:

Ang configuration ng pin ng ESP32 na may PIR sensor ay:

  Awtomatikong nabuo ang Paglalarawan ng Table

3.1: PIR Motion Sensor (HC-SR501)

Ang PIR ay isang acronym para sa Passive Infrared sensor . Dalawang pyroelectric sensor ang ginamit na magkasama na magde-detect ng dami ng init sa paligid nito. Ang parehong mga pyroelectric sensor na ito ay magkasunod na namamalagi at kapag ang isang bagay ay pumasok sa kanilang hanay, isang pagbabago sa enerhiya ng init o ang pagkakaiba ng signal sa pagitan ng parehong mga sensor na ito ay nagiging sanhi ng PIR sensor output na maging MABA. Kapag LOW na ang PIR out pin, maaari tayong magtakda ng isang partikular na pagtuturo na isasagawa (LED blink).

  Awtomatikong nabuo ang Paglalarawan ng Diagram

Ang sumusunod ay ang mga katangian ng PIR sensor:

  • Maaaring itakda ang sensitivity depende sa lokasyon ng proyekto (tulad ng sensing mouse o leaf movement)
  • Ang sensor ng PIR ay maaaring itakda kung gaano katagal ito nakakakita ng isang bagay
  • Malawakang ginagamit sa mga alarma sa seguridad sa bahay at iba pang mga application sa pagtuklas ng paggalaw na nakabatay sa thermal.

3.2: Pinout HC-SR501

Ang PIR HC-SR501 ay may tatlong pin. Dalawa sa mga ito ay power pin para sa Vcc at GND at ang isa ay ang output pin para sa trigger signal.

Ang sumusunod ay ang paglalarawan ng PIR sensor pins:

Pin Pangalan Paglalarawan
1 Vcc Input pin para sa sensor Kumonekta sa ESP32 Vin Pin
dalawa LABAS Output ng Sensor
3 GND Sensor GND

3.3: Code

Ngayon sa programa ng ESP32 isulat ang ibinigay na code sa Thonny IDE editor o anumang iba pang MicroPython IDE at i-upload ito sa ESP32.

mula sa machine import Pin
mula sa oras import ng tulog
galaw = Mali
def handle_interrupt ( pin ) :
pandaigdigang galaw
galaw = totoo
global interrupt_pin
interrupt_pin = pin
pinangunahan = Pin ( 4 , Pin. LABAS )
ang tulay = Pin ( 13 , Pin. SA )
ang tulay. irq ( gatilyo = Pin. IRQ_RISING , handler = handle_interrupt )
habang totoo :
kung galaw :
print ( 'NAKITA ANG MOTION' )
pinangunahan. halaga ( 1 )
matulog ( 5 )
pinangunahan. halaga ( 0 )
print ( 'TUMIGIL ANG MOTION' )
galaw = Mali

Una, na-import namin ang pin klase mula sa module ng makina at matulog paraan upang magdagdag ng pagkaantala. Susunod na isang variable ay nilikha na may pangalan galaw. Matutukoy ng variable na ito kung may nakitang paggalaw o hindi.

Pagkatapos ay lumikha kami ng isang function handle_interrupt. Sa tuwing may nakitang paggalaw ang sensor ng PIR, ia-activate ang function na ito. Ito ay tumatagal ng isang pin bilang isang parameter ng pag-input at ipinapahiwatig ang pin na nagiging sanhi ng pagkagambala.

Sa simpleng salita sa tuwing nakakakita ang PIR ng paggalaw, handle_interrupt ay itatakda ang motion variable sa true at iimbak ang pin na nagiging sanhi ng pagkagambala. Isang bagay na dapat tandaan ay palaging nagdedeklara ng galaw variable bilang global dahil kailangan ito sa buong code.

Sa paglipat ng pasulong, lumikha kami ng dalawang pin object, isa upang mag-imbak ng mga LED pin at ang pangalawa ay kukuha ng PIR sensor output sa GPIO pin 13. Karagdagang idineklara namin ang trigger pin sa TUMAAS mode.

Nasa loop bahagi ng code, titingnan nito ang halaga ng motion variable kapag naging totoo ang LED na nakakonekta sa pin 4 ng ESP32. Kung huminto ang paggalaw, OFF ang LED pagkatapos ng 5 segundo.

3.4: Output

Sa seksyon ng output makikita natin ang bagay na wala sa saklaw ng sensor ng PIR, kaya ang LED ay nakabukas NAKA-OFF .

Ngayon ang paggalaw na nakita ng PIR sensor LED ay liliko NAKA-ON para sa 5 sec pagkatapos nito kung walang nakitang paggalaw ay mananatili ito NAKA-OFF hanggang sa matanggap ang susunod na trigger.

Ang sumusunod na output ay ipinapakita ng shell/terminal sa Thonny IDE.

  Ang graphical na interface ng gumagamit, teksto, paglalarawan ng application ay awtomatikong nabuo

Konklusyon

Ang isang PIR sensor na may ESP32 ay makakatulong upang matukoy ang paggalaw ng iba't ibang bagay. Gamit ang interrupt function sa MicroPython kasama ang ESP32 maaari tayong mag-trigger ng tugon sa ilang partikular na GPIO pin. Kapag natukoy ang pagbabago ang interrupt function ay ma-trigger at ang isang LED ay mag-o-ON.