Hallo Forengemeinde,
ich habe ein großes Problem bei folgendem Setting:
Ich verwende auf einer Experimentierplatine einen 12V Gleichstrommotor, eine 12V LED und einen Taster. LED und Motor werden via 2 NPN Transistoren geschalten.
Was ich vorhabe:
LED und Motor sollen in einer for-Schleife ein gewisses Programm ablaufen. Währenddessen soll mir der Pi mit der "GPIO.add_event_detect - Methode" den Taster im Auge behalten und soll falls dieser betätigt wird die for-Schleife beenden und das Python-Programm beenden.
Weil mein Motor und die LED 12 V Gleichstrom benötigen verwende ich ein externes Netzteil zur Fremdeinspeisung.
Hier ein Foto vom Breadboard:
Hier der Python-Programmcode:
import RPi.GPIO as GPIO
import time
import sys
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False) # Fehlermeldungen aus
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Taster
GPIO.setup(11, GPIO.OUT) # Motor
GPIO.setup(15, GPIO.OUT) # LED
def my_callback(channel):
print "Funktionsaufruf"
GPIO.output(15, False)
GPIO.output(11, False)
sys.exit(0)
GPIO.add_event_detect(18, GPIO.RISING, callback=my_callback, bouncetime=200)
try:
for i in range(100):
GPIO.output(15, True)
time.sleep(1)
GPIO.output(15, False)
time.sleep(1)
print 'Bild Nr.: ' + str(i+1)
time.sleep(1)
GPIO.output(11, True)
time.sleep(861/100)
GPIO.output(11, False)
time.sleep(5)
except KeyboardInterrupt:
GPIO.cleanup() # clean up GPIO on CTRL+C exit
GPIO.cleanup() # clean up GPIO on normal exit
Alles anzeigen
Nun zum eigentlichen Problem:
Wenn ich mein Python-Programm laufen lasse, funktioniert zunächst alles einwandfrei.
Die LED leuchtet auf, Motor läuft im vorgegebenen Zeitintervall und wenn der Taster betätigt wird, bricht die Schleife ab und das Programm wird beendet.
Wenn ich aber zum Beispiel mit einem metallischen Gegenstand, wie einer Pinzette oder nur einem Stück Draht oder Kabel an den Minus- oder Pluspol ran gehe, bricht das Programm ab. (Obwohl ich den Taster nicht betätigt habe, nur Kontakt mit GND oder dem Pluspol).
Wenn ich das Programm so umschreibe, dass die Tasterstellung am Ende der for-Schleife abgefragt wird (also sequentielles Abfragen des Tasters und Programmabbruch) dann gibt es den Effekt nicht. Dann kann ich noch so oft mit einem metallischen Gegenstand an einen der beiden Pole gehen, da bricht nichts ab.
Fazit: Ich habe dieses Phänomen nur, wenn ich die interrupt-Methode mit der Event-handler [font="Monaco, Consolas, Courier, monospace"]GPIO.add_event_detect(18, GPIO.RISING, callback=my_callback, bouncetime=200)[/font][font="Verdana"]in den Code aufnehme.[/font]
Meine Vermutung: Ich habe das Gefühl, dass der Pi selbst auf die kleinsten Spannungsschwankungen reagiert, die ich ihm über eine Pinzette/ Kabel induziere.
Meine Frage: Wie kann ich das Problem lösen? Gibt es eine Möglichkeit beim Pi die "Empfindlichkeit" des Inputs zu "regeln"!? Hat jemand schon mal ähnliche Erfahrungen gemacht?
Ich hoffe ihr könnt mir da weiterhelfen!?