Spannungssteller Lenze


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


PIR-Bewegungsmelder mit Raspberry Pi


Das Herzstück eines PIR-Bewegungsmelders ist ein pyroelektrischer Sensor, genannt PIR (engl. Pyroelectric Infrared Sensor). Der Sensor ist in der Lage, auf Temperaturänderungen zu reagieren. Beim Aufbau dieser Sensoren werden die piezoelektrischen Eigenschaften einiger Halbleiter genutzt. Auch in diesem Bereich werden im Handel für einfache Experimente oder Hobbyprojekte diverse fertige Module mit PIR-Sensoren zu günstigen Konditionen angeboten.

PIR Sensor

PIR-Sensor

In der folgenden Schaltung kommt als Bewegungsmelder ein fertiges Modul VMA314 (von Velleman) zum Einsatz. Anderes populäres Modul, das ähnlich aufgebaut ist, trägt die Bezeichnung HC-SR501. Neben einem PIR-Sensor, der unter einer Fresnel-Linse im oberen Teil der kleinen elektronischen Platine versteckt ist, findet sich im unteren Teil der Platine der IC-Controller BISS0001. Er sorgt zusammen mit der Beschaltungselektronik für die Auswertung der Signale, die vom PIR-Sensor stammen.

BISS0001

BISS0001

Das Modul VMA314 hat drei Anschlüsse. Für die Versorgungsspannung, die 5 V beträgt, werden zwei Pins gebraucht. Der dritte Pin steht als Ausgang zur Verfügung. Intern arbeitet die kleine Platine mit 3,3 V, daher kann das Modul ohne Weiteres an Raspberry Pi angeschlossen werden. Für die Auswertung des Signals kann beliebiges GPIO verwendet werden. Auf der Platine sind zusätzlich zwei Potenziometer untergebracht. Mit ihnen kann Empfindlichkeit und die Intervallzeit eingestellt werden.

PIR-Modul VMA314

PIR-Modul VMA314

Die Schaltung

Ein Lichtband einer Lagerhalle kann wahlweise via Bewegungsmelder oder einen Taster ein- und ausgeschaltet werden. Am Tag, während der Arbeitszeit, kann das Licht beim Verlassen der Lagerhalle wegen Energieeinsparung zu jedem Zeitpunkt zusätzlich via Taster direkt ausgeschaltet werden. Optional kann das Bewegungssignal des Bewegungsmelders von einer Alarmanlage, sofern sie scharfgeschaltet wurde, ausgewertet werden. Außerdem könnte eine Entscheidung getroffen werden, ob, während die Alarmanlage scharf gestellt wurde, das Licht per Bewegungsmelder ein- bzw. ausschaltbar sein soll. Diese Option wird in der folgenden Schaltung jedoch nicht berücksichtigt. Die Koordination der Schaltvorgänge übernimmt Raspberry Pi mit einem Python-Programm.

Testschaltung

Testschaltung

Die Schaltung, da nur wenige Verbindungen hergestellt werden müssen, kann zügig auf einem Steckbrett aufgebaut werden. Der Bewegungssensor wird mit 5 V versorgt. Hierzu nutzen wir den Pin Nr. 1 des Raspi, der 5 V liefert. Der Ausgang des Sensors wird an Pin 16 angeschlossen, der als Eingang definiert wird. Zusätzlich wird am Pin 36, der ebenfalls als Eingang definiert wird, ein Taster angeschlossen. Für Beobachtungszwecke wird am Pin 22 eine Leuchtdiode mit einem Vorwiderstand angeschlossen. Sie soll die Beleuchtung der Lagerhalle symbolisieren. Der Pin 22 wird dementsprechend als Ausgang definiert.
Der dazugehörige Schaltplan:

Schaltplan

Schaltplan

Das Programm

Damit das folgende Programm gute Dienste leisten kann, stellen wir die Nachlaufzeit am Sensor-Modul auf Minimum. Das Starten, Verlängern und schließlich Beenden der Nachlaufzeit übernimmt das Programm. Andernfalls können sich vor Ort Situationen ergeben, mit welchen der Nutzer sicher nicht einverstanden wäre.

Z.B. man stellt die Nachlaufzeit an dem Bewegungsmelder auf 15 Min ein. Eine Person betritt das Lager und das Licht, da Bewegungssensor dies erkannte, geht automatisch an. Die Person verlässt das Lager nach 2 Min und schaltet das Licht, um Energie zu sparen, per Schalter aus. Nach zwei weiteren Minuten kommt eine andere Person ins Lager und erwartet, dass das Licht ebenfalls automatisch angeht. Dies geschieht jedoch nicht, da die Nachlaufzeit des Bewegungsmelders noch nicht abgelaufen ist. Um in Dunkelheit durch das Lager nicht irren zu müssen, ist die zweite Person gezwungen, das Licht per Schalter einzuschalten.

Das Programm arbeitet mit mehreren Variablen. Die Variable „Licht_Status“ informiert darüber, ob das Licht gerade an oder aus ist. Mit „Nachlaufzeit“ wird die Nachlaufzeit festgelegt, die in dem Beispiel auf 15 Sek eingestellt ist. Die beiden Eingänge, an die der Taster und Bewegungssensor angeschlossen sind, werden mit „add_event_detect“ überwacht. Die Funktionen lösen sofort aus, wenn am Eingang eine Änderung stattfindet, auch dann, wenn das Programm gerade mit anderen Aufgaben beschäftigt ist. Sobald die Funktionen aktiviert wurden, werden die Variablen „Flanke_Sensor“ bzw. „Flanke_Taster“ auf True gesetzt. Sie werden in weiteren Teilen des Programms fürs Ein- bzw. Ausschalten des Lichtes verwendet.


# ------------------------------------------------------------
# Raspi & Bewegungsmelder
# PIR - Sensor-Modul mit BISS0001
# Raspberry Pi 3B, Python 3
# ------------------------------------------------------------
import time
import RPi.GPIO as GPIO

Eingang_Bewegung = 16
LED_Beleuchtung = 22
Taster_Ein_Aus = 36
Licht_Status = False
Nachlaufzeit = 15
Zeit_Anfang = 0
Zeit_Ist = 0
Flanke_Sensor = False
Flanke_Taster = False

def Bewegung_erkannt(n):
    global Flanke_Sensor
    Flanke_Sensor = True

def Taster_betätigt(n):
    global Flanke_Taster
    Flanke_Taster = True
    
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(LED_Beleuchtung, GPIO.OUT)
GPIO.setup(Eingang_Bewegung, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(Taster_Ein_Aus, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect (16, GPIO.RISING)
GPIO.add_event_callback (16, Bewegung_erkannt)
GPIO.add_event_detect (36, GPIO.FALLING)
GPIO.add_event_callback (36, Taster_betätigt)

# Hauptprogramm --------------------------------------------------

while True:

    if Flanke_Sensor:                       # Licht EIN (Bewegung)
        Licht_Status = True
        Flanke_Sensor = False
        Zeit_Anfang = time.time()
        GPIO.output(22, GPIO.HIGH)
        print("Bewegung")

    if not Licht_Status and Flanke_Taster:  # Licht EIN (Taster)
        time.sleep(0.3)                     # Prellen abwarten
        Licht_Status = True
        Flanke_Taster = False
        Zeit_Anfang = time.time()
        GPIO.output(22, GPIO.HIGH)
        print("Taster Ein")

    if Licht_Status and Flanke_Taster:      # Licht AUS (Taster)
        time.sleep(0.3)                     # Prellen abwarten
        Licht_Status = False
        Flanke_Taster = False
        GPIO.output(22, GPIO.LOW)
        print("Taster Aus")
        
    Zeit_Ist = time.time()                  # Zeit abgelaufen
    if Licht_Status:
        if (Zeit_Ist > Zeit_Anfang + Nachlaufzeit):
            if GPIO.input(16) == GPIO.LOW:
                Licht_Status = False
                GPIO.output(22, GPIO.LOW)
                print("Zeit abgelaufen")

    # Anzeige ................................................... 
    if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang)):
        print("Nachlaufzeit noch 15 Sek.")
        time.sleep (1)
        
    if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang + 5)):
        print("Nachlaufzeit noch 10 Sek.")
        time.sleep (1)

    if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang + 10)):
        print("Nachlaufzeit noch 5 Sek.")
        time.sleep (1)
    # ........................................................... 
    
    time.sleep(0.5)
# ------------------------------------------------------------------
        

Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz