Hallo zusammen,
ich hoffe, ihr könnt mir helfen einen Fehler zu finden, da ich ziemlich auf dem Schlauch stehe.
Vielleicht ein paar einleitende Worte:
Es handelt sich um einen Code auf einem Raspberry Pi 3b, der verschiedene Aktionen ausführen soll, nachdem ein Bewegungsmelder (HC-SR501) eine Bewegung erkannt hat (siehe hierzu auch anhängendes Bild).
Nach Durchlauf des Programms soll die nächste Auslösung – unabhängig davon, ob zwischenzeitlich Bewegungen erkannt wurden oder nicht – erst nach einer Pause von 180 Sekunden möglich sein.
Problem aktuell ist, dass das Programm in Dauerschleife läuft und der Bewegungsmelder quasi gar nicht berücksichtigt wird.
Bevor ich alles an seinen Bestimmungsort eingebaut habe, wurde das ganze erfolgreich außerhalb getestet. Deshalb verstehe ich auch nicht, warum das jetzt nicht mehr funktioniert.
In der Testphase hatte ich bereits das gekaufte NoName-Netzteil (3A) für den Pi gegen ein Original-Netzteil mit 2,5A ausgetauscht, da ich eine „Low Voltage“-Meldung bekam, nachdem ich den miniamp angeschlossen hatte.
Den Bewegungsmelder habe ich durch andere kleine Programme getestet und somit festgestellt, dass dieser in Ordnung ist. Gegenüber dem finalen Einbauort (ca. 70cm Kabel dazwischen) habe ich den BWM auch mal direkt am Pi angeschlossen.
Ansonsten habe ich auch schon mal den miniamp (VCC und GND) vom Pi abgeklemmt bzw. mit einer separaten Stromversorgung versehen (VCC und GND; allerdings kam dann kein Ton mehr raus).
Des Weiteren hab ich auch mal den Lüfter abgeklemmt und dafür dort den Bewegungsmelder angeschlossen.
Die Verkabelung wurde ebenfalls geprüft.
Alles hat leider nichts bewirkt. Das Programm läuft weiterhin in Dauerschleife.
Ich vermute daher, dass der Fehler doch irgendwo im nachfolgenden Code liegt.
Oder es gibt irgendwelche anderen Störeinflüsse.
import RPi.GPIO as GPIO
import time
import pygame
pygame.mixer.init()
open = pygame.mixer.Sound(' /home/pi/Music/Creaking Door.wav')
open.set_volume(1.0)
GPIO.setmode(GPIO.BCM)
PIR_Sensor = 24
Relais1_Up = 13
Relais2_Down = 22
Relais3_Nebel = 12
Relais4_Licht = 23
GPIO.setup(PIR_Sensor, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(Relais1_Up , GPIO.OUT)
GPIO.setup(Relais2_Down , GPIO.OUT)
GPIO.setup(Relais3_Nebel , GPIO.OUT)
GPIO.setup(Relais4_Licht , GPIO.OUT)
GPIO.output(Relais1_Up, GPIO.HIGH)
GPIO.output(Relais2_Down , GPIO.HIGH)
GPIO.output(Relais3_Nebel , GPIO.HIGH)
GPIO.output(Relais4_Licht , GPIO.HIGH)
print("Das Programm wurde gestartet")
def Bewegung(PIR_Sensor):
print("Bewegung erkannt")
time.sleep(2)
GPIO.output(Relais3_Nebel, GPIO.LOW) # Nebel an
print("Nebeln")
time.sleep(4)
GPIO.output(Relais3_Nebel, GPIO.HIGH) # Nebel aus
for i in range(2):
GPIO.output(Relais1_Up, GPIO.LOW)
time.sleep(0.3) # Ausfahren
GPIO.output(Relais1_Up, GPIO.HIGH)
time.sleep(0.15)
GPIO.output(Relais2_Down , GPIO.LOW)
time.sleep(0.3) # Einfahren
GPIO.output(Relais2_Down , GPIO.HIGH)
time.sleep(1.0)
GPIO.output(Relais1_Up, GPIO.LOW)
pygame.mixer.Sound.play(open)
print("Sargdeckel öffnet sich")
time.sleep(4) # Linearantrieb Ausfahren
GPIO.output(Relais1_Up, GPIO.HIGH)
time.sleep(5)
GPIO.output(Relais4_Licht, GPIO.HIGH) # Licht an
GPIO.output(Relais2_Down, GPIO.LOW)
print("Sargdeckel schließt ich")
time.sleep(4) # Linearantrieb einfahren
GPIO.output(Relais2_Down, GPIO.HIGH)
GPIO.output(Relais4_Licht, GPIO.LOW) # Licht aus
try:
GPIO.add_event_detect(PIR_Sensor, GPIO.RISING, callback=Bewegung)
while True:
time.sleep(180) # 180 Sekunden kein erneutes Auslösen ermöglichen
except KeyboardInterrupt:
print("Programm beendet")
GPIO.cleanup()
Alles anzeigen
Ich würde mich freuen, wenn ihr euch das Konstrukt mal ansehen und mir bei der Suche des Fehlers behilflich sein könntet.
Bin für jeden Tipp dankbar.
Grüße
PeerT