PIR -bevegelsessensor med esptop 10 ved bruk av mikropython og Thonny IDE

PIR -bevegelsessensor med esptop 10 ved bruk av mikropython og Thonny IDE
ESP32 kan grensesnitt flere eksterne enheter for å kontrollere og lese forskjellige sensorer. PIR eller bevegelsessensor er et av eksemplene vi kan grensesnitt med ESP32 for å oppdage bevegelse i et visst utvalg av PIR -sensor ved bruk av ESP32.

Før vi begynner å grensesnitt mot ESP32 med PIR -sensor, må vi vite hvordan avbrytelser fungerer og hvordan vi kan lese og håndtere dem i ESP32. La oss diskutere arbeidet med PIR med ESP32 i detalj.

Her er innholdet for denne artikkelen:

1: Hva er avbryter

1.1: Avbryter pinner i ESP32

2: Ringer et avbrudd i ESP32 - Micropython

3: Grensesnitt PIR -sensor med ESP32 - Micropython

3.1: PIR-bevegelsessensor (HC-SR501)

3.2: Pinout HC-SR501

3.3: Kode

3.4: Output

1: Hva er avbryter

De fleste av hendelsene som skjer i ESP32 -programmering kjøres sekvensielt som betyr linje ved linjeutførelse av kode. For å håndtere og kontrollere hendelsene som ikke trenger å kjøre under sekvensiell utførelse av kode og Avbryter er brukt.

For eksempel, hvis vi ønsker å utføre en bestemt oppgave når noen spesiell hendelse oppstår, eller et triggersignal blir gitt til digitale pinner i mikrokontrolleren, bruker vi avbrudd.

Med avbrudd trenger vi ikke å sjekke den digitale tilstanden til ESP32 -inngangspinnen kontinuerlig. Når et avbrudd skjer stopper prosessoren hovedprogrammet, og en ny funksjon kalles som er kjent som ISR (Avbryt servicerutine). Dette ISR Funksjon håndterer avbruddet forårsaket etter den returnerte tilbake til hovedprogrammet og begynn å utføre det. Et av eksemplene på ISR er PIR -bevegelsessensor som genererer en avbrudd når bevegelse er oppdaget.

1.1: Avbryter pinner i ESP32

Et eksternt eller maskinvareavbrudd kan være forårsaket av hvilken som helst maskinvaremodul som berøringsføler eller trykknapp. Berøring.

I denne artikkelen vil vi utløse et avbrudd når bevegelsen oppdages ved hjelp av PIR -sensoren med ESP32.

Nesten alle GPIO -pinnene bortsett fra 6 SPI -integrerte pinner som vanligvis kommer i 36 PIN -versjon av ESP32 -styret kan ikke brukes til å avbryte samtale. Så for å motta det eksterne avbruddet følgende er pinnene man kan bruke i ESP32:

2: Ringer et avbrudd i ESP32 ved hjelp av mikropyton

For å programmere et ESP32 -brett med PIR -sensor ved bruk av mikropytonkode. Vi må definere en avbruddsfunksjon. Følgende er noen enkle trinn som hjelper til med å definere et avbrudd for ESP32 -styret.

Trinn 1: Initialiser avbruddshåndteringsfunksjon: Avbruddshåndteringsfunksjon bør defineres på en enkel måte slik at den kan utføre raskt og gå tilbake til hovedprogrammet så raskt som mulig. Dette kan gjøres ved å definere en global variabel slik at den kan nås hvor som helst i koden hvis det blir kalt.

Her i tilfelle av PIR -sensor bruker vi GPIO PIN -kode som en global variabel. Avbruddsfunksjonen vil ta en pinne som et argument og beskrive GPIO -pinnen som får avbrytelsesfunksjonen til å oppstå.

def håndtak_interrupt (pin):

Trinn 2: Sett opp GPIO -pinnen for et avbrudd: For å få verdien av GPIO -pinnen må vi lage et objekt som vil ta innspill fra det ved å bruke Pin.I som det andre argumentet i vår pin -klasse. Vi kan gi nytt navn til dette med alle andre.

pin = pin (13, pin.I)

Trinn 3: Fest avbrudd til GPIO PIN for PIR -sensor ved bruk av IRQ () -metode:

Ved hjelp av kommandoen nedenfor kan vi sette avbruddet til en pinne vi definerte tidligere.

pir.irq (trigger = pin.IRQ_RISING, HANDLER = Handle_Interrupt)

De irq () Metoden brukes til å feste avbruddet til pinnen. irq () Godtar to forskjellige argumenter:

  • Avtrekker
  • Handler

avtrekker: Dette argumentet forklarer modus for trigger. Følgende er tre modus:

  • Pin.Irq_falling: Når en pinne overgår fra høyt til lavt, startes et avbrudd.
  • Pin.Irq_rising: Etter pinnens overgang fra lav til høy, startes et avbrudd.
  • Pin.Irq_falling | pin.Irq_rising: Utløs avbruddet når en pin endrer tilstanden. Enten pin går til høy eller lav.

handler: Denne funksjonen vil bli kalt når et avbrudd utløses.

3: grensesnittende PIR -sensor med ESP32

Som nå har vi dekket konseptene av avbrytelse med ESP32 ved bruk av mikropyton nå vil vi grensesnitt PIR -sensoren med ESP32. Her skal vi bruke Pin.Irq_rising modus i mikropython -kode for PIR -sensor fordi vi ønsker å utløse en LED hver gang PIR -sensoren oppdager en viss bevegelse. Denne LED vil forbli på en bestemt tid, så slår den av.

Følgende komponenter vil være nødvendige:

  • ESP32 Development Board
  • PIR-bevegelsessensor (HC-SR501)
  • 220 ohm motstand
  • Jumper ledninger
  • Brødbrett
  • Led

Skjematisk For PIR -sensor med ESP32:

PIN -konfigurasjon av ESP32 med PIR -sensor er:

3.1: PIR-bevegelsessensor (HC-SR501)

PIR er et forkortelse for Passive infrarøde sensorer. To pyroelektriske sensorer som brukes sammen som vil oppdage mengden varme rundt omgivelsene. Begge disse pyroelektriske sensorene ligger etter hverandre, og når et objekt kommer inn i deres område, får en endring i varmeenergi eller signalforskjellen mellom begge disse sensorene fører til at PIR -sensorutgangen er lav. Når PIR OUT -pinnen går lavt, kan vi angi en spesifikk instruksjon for å utføre (LED blink).

Følgende er egenskapene til PIR -sensor:

  • Følsomhet kan settes avhengig av plasseringen av prosjektet (for eksempel sensing av mus eller bladbevegelse)
  • PIR -sensor kan settes for hvor lenge den oppdager et objekt
  • Mye brukt i hjemmesikkerhetsalarmer og andre termiske baserte bevegelsesapplikasjoner.

3.2: Pinout HC-SR501

PIR HC-SR501 kommer med tre pinner. To av dem er kraftpinner for VCC og GND, og ​​en er utgangspinnen for utløsersignalet.

Følgende er beskrivelsen av PIR -sensorpinner:

Pin Navn Beskrivelse
1 VCC Inngangspinne for sensor koble til ESP32 Vin Pin
2 UTE Sensorutgang
3 GND Sensor GND

3.3: Kode

Nå for å programmere ESP32, skriv den gitte koden i Thonny IDE -redaktør eller annen Micropython IDE og last den opp til ESP32.

Fra maskinimportnål
Fra tid importer søvn
bevegelse = falsk
def håndtak_interrupt (pin):
Global bevegelse
bevegelse = sant
Global Interrupt_Pin
interrupt_pin = pin
LED = PIN (4, PIN.UTE)
pir = pin (13, pin.I)
pir.irq (trigger = pin.IRQ_RISING, HANDLER = Handle_Interrupt)
Mens sant:
Hvis bevegelse:
trykk ('Bevegelse oppdaget')
Led.verdi (1)
søvn (5)
Led.verdi (0)
trykk ('bevegelse stoppet')
bevegelse = falsk

Først importerte vi Pin klasse fra maskinmodulen og sove Metode for å legge til forsinkelse. Neste en variabel opprettes med navn bevegelse. Denne variabelen vil oppdage om en bevegelse blir oppdaget eller ikke.

Så opprettet vi en funksjon håndtak_interrupt. Hver gang PIR -sensoren oppdager bevegelse, vil denne funksjonen bli aktivert. Det tar en pinne som en inngangsparameter og indikerer at pinnen som får avbrytelsen til å skje.

Med enkle ord hver gang PIR oppdager bevegelse, håndtak_interrupt vil stille bevegelsesvariabelen til True og lagre tappen som får avbrytelsen til å skje. En ting å huske er alltid erklærer bevegelse variabel som globalt fordi det trengs gjennom hele koden.

Fremover laget vi to pin -objekter, en for å lagre LED -pinner, og den andre vil ta PIR -sensorutgang ved GPIO PIN 13. Videre erklærte vi triggerpinnen inn Stiger modus.

I Løkke En del av koden, den vil se etter verdien av bevegelsesvariabelen når den blir sann LED vil slå på koblet til pinne 4 på ESP32. Hvis bevegelsen stoppet LED vil slå seg av etter 5 sekunder.

3.4: Output

I utgangsseksjonen kan vi se at objektet er utenfor PIR -sensoren, så Led er snudd AV.

Nå vil bevegelsen oppdaget av PIR -sensor -LED snu til 5 sek Etter det hvis ingen bevegelse blir oppdaget, vil det forbli AV Inntil neste trigger er mottatt.

Følgende utgang vises av skall/terminal i Thonny Ide.

Konklusjon

En PIR -sensor med ESP32 kan bidra til å oppdage bevegelse av forskjellige ting. Ved å bruke avbruddsfunksjonen i mikropyton med ESP32 kan vi utløse et respons på en spesifikk GPIO -pinne. Når endring oppdages, vil avbrytelsesfunksjonen bli utløst og en LED vil slå på.