Hallo,
ich hab mir erst vor ein paar Tagen meinen ersten Raspberry zugelegt und möchte mir eine automatische Bewässerung damit basteln.
Leider habe ich Probleme mit der Ansteuerung 2er Relaiskarten weshalb ich euch, hier in meinem ersten Forumsbeitrag, um Hilfe bitten möchte.
(Ich hoffe im richtigen Bereich...denn ich denke es handelt sich eher um ein Elektronik als um ein Python-Problem)
Zuerst mein Python Code:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#Ausgaenge
RELAIS_1=16
RELAIS_2=21
GPIO.setup(RELAIS_1, GPIO.OUT)
GPIO.setup(RELAIS_2, GPIO.OUT)
#Eingaenge
TASTER_ROT=6
TASTER_GELB=13
TASTER_BLAU=19
TASTER_GRUEN=26
GPIO.setup(TASTER_ROT,GPIO.IN)
GPIO.setup(TASTER_GELB,GPIO.IN)
GPIO.setup(TASTER_BLAU,GPIO.IN)
GPIO.setup(TASTER_GRUEN,GPIO.IN)
#Programmdefinitionen
def RelaisEIN(RelaisNr):
if RelaisNr==1:
GPIO.output(RELAIS_1,1)
elif RelaisNr==2:
GPIO.output(RELAIS_2,1)
print ('Relais ' + str(RelaisNr) + '= EIN')
def RelaisAUS(RelaisNr):
if RelaisNr==1:
GPIO.output(RELAIS_1,0)
elif RelaisNr==2:
GPIO.output(RELAIS_2,0)
print ('Relais ' + str(RelaisNr) + '= AUS')
def ProgrammGruen():
#Wiese beregnen
dauer_wiese=10 #in Sekunden
laufzeit_wiese=0
RelaisEIN(1)
while (GPIO.input(TASTER_ROT)==False) and (laufzeit_wiese<dauer_wiese):
time.sleep(1)
laufzeit_wiese=laufzeit_wiese+1
print ('1 - Laufzeit:' + str(laufzeit_wiese) + ' STATUS R1=' + str(GPIO.input(RELAIS_1))+ ' R2='+ str(GPIO.input(RELAIS_2)))
RelaisAUS(1)
def ProgrammBlau():
#Hochbeet beregnen
dauer_hochbeet=6 #in Sekunden
laufzeit_hochbeet=0
RelaisEIN(2)
while (GPIO.input(TASTER_ROT)==False) and (laufzeit_hochbeet<dauer_hochbeet):
time.sleep(1)
laufzeit_hochbeet=laufzeit_hochbeet+1
print ('2 - Laufzeit:' + str(laufzeit_hochbeet) + ' STATUS R1=' + str(GPIO.input(RELAIS_1))+ ' R2='+str(GPIO.input(RELAIS_2)))
RelaisAUS(2)
RotGedruecktDauer=0
while (RotGedruecktDauer<20):
if GPIO.input(TASTER_GRUEN)==True:
#Wiese beregnen
ProgrammGruen()
elif GPIO.input(TASTER_BLAU)==True:
#Hochbeet beregnen
ProgrammBlau()
elif GPIO.input(TASTER_GELB)==True:
#Beides beregnen Zuerst Wiese und dann Hochbeet
ProgrammGruen()
time.sleep(2);
ProgrammBlau()
if GPIO.input(TASTER_ROT)==True:
RotGedruecktDauer=RotGedruecktDauer+1
else:
RotGedruecktDauer=0
time.sleep(0.5)
GPIO.cleanup()
Alles anzeigen
Je nach Programm (Grün, Blau oder Gelb) schalten die Relais für eine bestimmte Zeitdauer. Die Programme Blau und Grün funktionieren einwandfrei. Aber beim Programm Gelb (führt zuerst Programm Blau und anschließend Grün aus) spielen die Relais verrückt.
Es wird zwar das gewünschte Relais eingeschaltet aber ab und zu (kein Muster erkennbar) schaltet sich einfach das zweite Relais dazu. Manchmal funktioniert auch das gelbe Programm ohne Probleme.
Hier 2 Bilder der Console:
Normal:
Ich habe bisher nur die GPIO 16/20/21 als Output probiert? Können diese Schuld sein?
Oder kann es sein das die Output Pins zu viel Strom ziehen? (Laut Relaiskarte sollten nicht mehr als 5mA gezogen werden; und würde dann nicht eher ein Relais ausfallen als eines zu viel dazuschalten?)
Eigentlich habe ich die Massekabeln alle kontrolliert, aber kann es sein dass der Fehler daher kommt?
Vielen Dank im Voraus und Liebe Grüße!