ESPTOP 10 mit PIR -Bewegungssensor unter Verwendung von Interrupts und Timern - Arduino IDE

ESPTOP 10 mit PIR -Bewegungssensor unter Verwendung von Interrupts und Timern - Arduino IDE

ESP32 ist eine IoT -basierte Mikrocontroller -Karte. PIR oder Bewegungssensor ist eines der Geräte, die wir mit ESP32 anstellen können, um die Bewegung eines Objekts im Bereich des Bewegungssensors mit ESP32 zu erkennen.

Bevor wir mit dem PIR -Sensor mit der Schnittstelle von ESP32 beginnen. Als nächstes müssen wir das Kernkonzept von Delay () und Millis () in der ESP32 -Programmierung verstehen.

Lassen Sie uns die Arbeit von PIR mit ESP32 im Detail diskutieren.

Hier ist der Inhalt für diesen Artikel:

  1. Was sind Interrupts?
    • 1.1: Unterbricht Stifte in ESP32
    • 1.2: So nennen Sie einen Interrupt in ESP32
  2. Timer in ESP32 -Programmierung
    • 2.1: Delay () Funktion
    • 2.2: Millis () Funktion
  3. PIR -Sensor mit ESP32 anschließen
    • 3.1: PIR-Bewegungssensor (HC-SR501)
    • 3.2: Pinout HC-SR501
    • 3.3: Code
    • 3.4: Ausgabe

1: Was sind Interrupts

Die meisten Ereignisse, die in ESP32 -Programmierungen nacheinander stattfinden. Um die Ereignisse zu behandeln und zu steuern, die während der sequentiellen Ausführung von Code A nicht ausgeführt werden müssen Interrupts werden verwendet.

Wenn wir beispielsweise eine bestimmte Aufgabe ausführen möchten, wenn ein spezielles Ereignis auftritt oder ein Triggersignal an digitale Stifte des Mikrocontrollers verabreicht wird, verwenden wir Interrupt.


Mit Unterbrechung müssen wir den digitalen Zustand des ESP32 -Eingangs Pin nicht kontinuierlich überprüfen. Wenn ein Interrupt auftritt, hält der Prozessor das Hauptprogramm an, und eine neue Funktion wird als ISR bezeichnet (isr (genanntService Routine unterbrechen). Das Isr Die Funktion übernimmt den nach dieser Rückkehr zurück zum Hauptprogramm verursachten Interrupt und beginnt mit der Ausführung. Eines der Beispiele von ISR ist PIR -Bewegungssensor welche erzeugt einen Interrupt, sobald die Bewegung erkannt wird.

1: Unterbricht Stifte in ESP32

Ein externer oder Hardware -Unterbrech. Berührungsstörungen treten auf, wenn eine Berührung bei ESP32 -Stiften erkannt wird oder GPIO -Interrupt auch verwendet werden kann, wenn eine Taste oder ein Druckknopf gedrückt wird.

In diesem Artikel werden wir einen Interrupt auslösen, wenn die Bewegung mit dem PIR -Sensor mit ESP32 erkannt wird.

Fast alle GPIO -Stifte außer 6 SPI -integrierten Stiften, die normalerweise in die kommen 36-PIN -Version des ESP32 -Boards kann nicht zum Zweck der Interrupt -Anrufe verwendet werden. Um den externen Interrupt zu erhalten, sind die in lila Farbe hervorgehobenen Stifte, die man in ESP32 verwenden kann:

Dieses Bild hat einen 30 -Pin -ESP32.

2: Rufen Sie einen Interrupt in ESP32 an

Für die Verwendung von Interrupt in ESP32 können wir anrufen Attinterrupt () Funktion.

Diese Funktion akzeptiert nach drei Argumenten:

    • GPIO PIN
    • Funktionen ausführen
    • Modus
CATTInInterrupt (DigitalPintoInterrupt (GPIO), Funktion, Modus);


1: gpio Pin ist das erste Argument, das im Inneren der genannt wird Attinterrupt () Funktion. Zum Beispiel können wir sie mit dem Digital Pin 12 als Interrupt -Quelle verwenden DigitalPintointerruhrter (12) Funktion.

2: Funktion Auszuführen ist das Programm, das jedes Mal ausgeführt wird, wenn der Interrupt erreicht wird oder von einer externen oder internen Quelle ausgelöst wird. Es kann entweder eine LED blinken oder einen Feueralarm drehen.

3: Modus ist das dritte und letzte Argument, das die Interrupt -Funktion benötigt. Es beschreibt, wann der Interrupt ausgelöst werden muss. Im Folgenden können die Modi verwendet werden:

    • Niedrig: Lösen Sie den Interrupt jedes Mal aus, wenn der definierte GPIO -Pin niedrig ist.
    • Hoch: Lösen Sie den Interrupt jedes Mal aus, wenn der definierte GPIO -Pin hoch ist.
    • Ändern: Trigger unterbrechen jedes Mal, wenn GPIO -Pin seinen Wert von hoch auf niedrig oder umgekehrt ändert.
    • Fallend: Es ist der Modus, einen Interrupt auszulösen, wenn ein bestimmter Stift von hohem Zustand bis niedrig fällt.
    • Steigend: Es ist der Modus, um einen Interrupt auszulösen, wenn ein bestimmter Stift von niedrigem Zustand zu hoch steigt.

Heute werden wir benutzen Steigend Modus als drittes Argument für die Interrupt -Funktion, wenn der PIR -Sensor erkennt, dass die Interrupt -LED oder der Sensor aufleuchten.

2: Timer in ESP32 -Programmierung

Timer in Mikrocontroller -Programmierungen spielen eine wichtige Rolle für die Ausführung von Anweisungen für einen bestimmten Zeitgeberzeitraum oder in einer bestimmten Zeitpunkte.

Zwei Hauptfunktionen, die üblicherweise verwendet werden, um die Ausgabe auszulösen Verzögerung() Und Millis (). Der Unterschied zwischen beiden als Dely () -Funktion stoppt den Rest des Programms, sobald es ausgeführt wird, während Millis () für den definierten Zeitraum ausgeführt wird, dann geht das Programm auf die Hauptfunktionen zurück.

Hier werden wir eine LED mit PIR. Wir werden die Millis () -Funktion verwenden, mit der wir sie für eine definierte Zeit leuchten können und dann wieder zum ursprünglichen Programm zurückkehren, sobald dieser Zeitstempel vorbei ist.

1: Delay () Funktion

Delay () -Funktion ist ziemlich einfach, sondern nur ein Argument, das ist MS von vorzeichenlosen langen Datentypen. Dieses Argument repräsentiert die Zeit in Millisekunden, die wir das Programm pausieren möchten, bis es in die nächste Zeile wechselt.

Beispielsweise stoppt die folgende Funktion das Programm für 1 Sek.

Verzögerung (1000)


Delay () ist eine Art Blockierungsfunktion für die Programmierung von Mikrocontrollern. Delay () blockiert den Rest des Code. Wenn wir mehrere Anweisungen ausführen möchten, sollten wir vermeiden, dass Verzögerungsfunktionen verwendet werden, stattdessen können wir Millis- oder externe Timer -RTC -Module verwenden.

2: Millis () Funktion

Millis () Funktion gibt die Anzahl der Millisekunden zurück, seit ESP32 -Board begonnen hat, das aktuelle Programm auszuführen. Durch das Schreiben einiger Codezeilen können wir die gegenwärtige Zeit in jedem Fall leicht berechnen, während wir den ESP32 -Code ausführen.

Millis wird weit verbreitet, wo wir mehrere Aufgaben ausführen müssen, ohne den Rest des Codes zu blockieren. Hier ist die Syntax der Millis -Funktion, die zur Berechnung verwendet wird, wie viel Zeit vergangen ist, damit wir eine bestimmte Anweisung ausführen können.

if (currentMillis - vorhermillis> = intervall)
vorhermillis = currentMillis;


Dieser Code subtrahiert die vorherige Millis () von Current Millis (), wenn die subtrahierte Zeit entspricht, das Intervall zu definieren, das ein bestimmter Befehl ausgeführt wird. Nehmen wir an, wir wollen eine LED für 10 Sekunden blinken. Nach allen 5 Minuten können wir das Zeitintervall auf 5 Minuten (300000 ms) einstellen. Der Code prüft jedes Mal, wenn der Code ausgeführt wird, nach dem Erreichen der LED die LED 10 Sekunden lang blinzelt.

Notiz: Hier verwenden wir eine Millis () -Funktion für die Schnittstelle von ESP32 mit PIR -Sensor. Der Hauptgrund für die Verwendung von Milli und nicht die Verzögerung ist, dass die Funktion millis () den Code nicht als Dely () -Funktion blockiert. Sobald der PIR die Bewegung erkennt, wird ein Interrupt erzeugt. Die Verwendung der Interrupt Millis () -Funktion auslöst die LED für die definierte Zeit danach, wenn die Bewegung gestoppt wird. Die Millis () -Funktion wird zurückgesetzt und auf den nächsten Interrupt warten.

In Fall.

3: Schnittstellenpir -Sensor mit ESP32

Hier verwenden wir Millis () -Funktion im Arduino -IDE -Code, da wir jedes Mal, wenn der PIR -Sensor eine Bewegung erkennt, LED auslösen möchten. Diese LED leuchtet eine festgelegte Zeit danach, sie wird wieder in den normalen Zustand zurückkehren.

Hier ist eine Liste von Komponenten, die wir benötigen:

    • ESP32 Development Board
    • PIR-Bewegungssensor (HC-SR501)
    • LED
    • 330 Ohm Widerstand
    • Drähte verbinden
    • Brotbrett

Schematisch Für PIR -Sensor mit ESP32:


PIN -Verbindungen von ESP32 mit PIR -Sensor lautet:

ESP32 PIR -Sensor
Vin VCC
Gpio13 AUS
GND GND

1: PIR-Bewegungssensor (HC-SR501)

PIR ist ein Akronym für Passiver Infrarotsensor. Es verwendet ein Paar Pyroelektrik -Sensoren, die Wärme um seine Umgebung erkennen. Beide pyroelektrischen Sensoren liegen nacheinander und wenn ein Objekt in seinen Bereich eintritt. Sobald der Pir -Out -Pin niedrig ist, können wir einen bestimmten Anweisungen zur Ausführung festlegen.


Im Folgenden finden Sie die Eigenschaften des PIR -Sensors:

    • Die Empfindlichkeit kann je nach Ort des Projekts festgelegt werden (z. B. Maus- oder Blattbewegung).
    • PIR -Sensor kann so eingestellt werden, wie lange er ein Objekt erkennt.
    • In den Sicherheitsalarmen und anderen thermischen Bewegungserkennungsanwendungen häufig verwendet.

2: Pinout HC-SR501

PIR HC-SR501 verfügt über drei Stifte. Zwei von ihnen sind Leistungsstifte für VCC und GND und einer ist der Ausgangsstift für das Triggersignal.


Im Folgenden finden Sie die Beschreibung der PIR -Sensorstifte:

Stift Name Beschreibung
1 VCC Eingabestift für Sensor Verbinden Sie mit ESP32 Vin Pin
2 AUS Sensorausgang
3 GND Sensor GND

3: Code

Um ESP32 zu programmieren, schreiben Sie den angegebenen Code in Arduino IDE Editor und laden Sie ihn auf ESP32 hoch.

#define Timesseconds 10
const int led = 4; /*GPIO PIN 4 definiert für LED*/
const int pir_out = 13; /*GPIO PIN 13 für PIR OUT*/
nicht signiert long Current_time = millis (); /*Variable definiert zum Speichern von Millis -Werten*/
nicht signiert lange vorher_trig = 0;
boolean start_time = false;
void iram_attr detektsMovement () /*nach Bewegung prüfen* /
Serie.println ("Bewegung erkannt");
DigitalWrite (LED, hoch); /*LED einschalten, wenn der Zustand wahr ist*/
Start_time = true;
Vorher_trig = millis ();

void setup ()
Serie.Beginnen Sie (115200); /*Baudrate für serielle Kommunikation*/
PinMode (pir_out, input_pullup); /*PIR -Bewegungssensor -Modus definiert*/
/*Pir ist im steigenden Modus konfiguriert, stellen Sie den Bewegungssensor Pin als Ausgang ein*/
ContatInterrupt (digitalPintointerrupt (PIR_OUT), DetectsMovement, Steig);
PinMode (LED, Ausgabe); /*Set LED zu niedrig*///
DigitalWrite (LED, niedrig);

void Loop ()
Current_time = millis (); /*Aktuelle Zeit speichern*/
if (start_time && (current_time - pother_trig> (timesseconds*1000)) /*Zeitintervall, nach der LED* /ausgeschaltet wird* /
Serie.println ("Bewegung gestoppt"); /*Druckt Bewegung gestoppt, wenn keine Bewegung erkannt wurde*/
DigitalWrite (LED, niedrig); /*Setzen Sie LED auf niedrig, wenn der Zustand falsch ist*/
Start_time = false;


Der Code begann mit der Definition von GPIO -Stiften für LED- und PIR -Ausgabe. Als nächstes haben wir drei verschiedene Variablen erstellt, die dazu beitragen, die LED zu aktivieren, wenn die Bewegung erkannt wird.

Diese drei Variablen sind Current_time, vorher_trig, Und Anfangszeit. Diese Variablen speichern die aktuelle Zeit, die Zeit, zu der Bewegung erkannt wird, und der Timer nach Erkennung der Bewegung.

Im Setup -Teil haben wir die serielle Baudrate für die Kommunikation definiert. Als nächstes mit PinMode () Stellen Sie den PIR -Bewegungssensor als Eingangspullup ein. Den PIR -Interrupt festlegen Attinterrupt () wird beschrieben. GPIO 13 wird beschrieben, um die Bewegung im steigenden Modus zu erkennen.

Als nächstes in Loop () Teil des Code.

4: Ausgabe

Im Ausgangsabschnitt können wir sehen, dass das Objekt außerhalb des PIR -Sensors außerhalb des Bereichs liegt, also der LED Wird gedreht AUS.


Jetzt dreht sich die von der PIR -Sensor -LED erkannte Bewegung AN für 10 Sek Danach, wenn kein Antrag erkannt wird, bleibt dies bestehen AUS Bis der nächste Auslöser empfangen wird.


Die folgende Ausgabe wird durch den seriellen Monitor in Arduino IDE angezeigt.

Abschluss

Ein PIR -Sensor mit ESP32 kann dazu beitragen, die Bewegung von Objekten zu erkennen, die durch seinen Bereich fließen. Verwenden der Interrupt -Funktion in der ESP32 -Programmierung können wir eine Antwort an einem bestimmten GPIO -PIN auslösen. Wenn Änderungen erkannt werden, wird die Interrupt -Funktion ausgelöst und eine LED wird eingeschaltet.