Hallo,
ich habe einen RPi3 und dieses (Affiliate-Link) Relais. Das Relais ist mit 5V und GND vom Pi verbunden.
Die GPIO Pins des Pis führen jeweils über einen 1 kOhm Widerstand zur Basis eines Transistors (BC 547 B) und vom Emitter weiter zum Pin auf dem Relais. (Collector an GND am Pi)
Wenn ich mein Testprogramm starte, sind am Anfang alle Lampen auf dem Relais aus und schalten danach wie geplant an/aus. Wenn aber am Ende des Programms die OutputDevices schließe gehen relais1 und relais2 nach dem schließen an. relais3 und relais4 bleiben nach dem Schließen aus, wie sie es ja auch sollen.
Tausche ich Kabel1 mit Kabel3 leuchtet auch die dritte statt der ersten Lampe.
Tausche ich die komplette Transistor-Konstrukton aus besteht das Problem weiterhin.
from gpiozero import OutputDevice
from time import sleep
relais1 = OutputDevice(2)
relais2 = OutputDevice(3)
relais3 = OutputDevice(4)
relais4 = OutputDevice(17)
sleep(3)
relais1.on()
sleep(1)
relais2.on()
sleep(1)
relais3.on()
sleep(1)
relais4.on()
sleep(1)
relais1.off()
sleep(1)
relais2.off()
sleep(1)
relais3.off()
sleep(1)
relais4.off()
sleep(10)
relais1.close()
print('Relais 1 geschlossen')
sleep(3)
relais2.close()
print('Relais 2 geschlossen')
sleep(3)
relais3.close()
print('Relais 3 geschlossen')
sleep(3)
relais4.close()
print('Relais 4 geschlossen')
sleep(3)
print('Programm beendet')
Display More
Und in dem eigentlichen Programm, welches ich benutzen möchte geht oft, nicht immer, einfach das erste Relais an, obwohl noch überhaupt kein Befehl diesbezüglich gegeben wurde. Obwohl es schon an ist klackt es, als würde es nochmal angehen. Gefühlt in der drei Sekunden Schleife, in der die Temperatur gemessen wird.
Habt ihr einen Rat?
Gruß, Tom
PS: Sofern es hilfreich sein sollte hier noch der Code, ich vermute aber, dass es ein Hardwareproblem ist.
from gpiozero import OutputDevice
import pigpio
import DHT22
from time import sleep
from statistics import median
from datetime import datetime
pi = pigpio.pi()
dht22 = DHT22.sensor(pi, 14)
relais1 = OutputDevice(2, active_high=True)
relais2 = OutputDevice(3, active_high=True)
relais3 = OutputDevice(4, active_high=True)
relais4 = OutputDevice(17, active_high=True)
sleep_time = 3
def readDHT22():
dht22.trigger()
hum = float(dht22.humidity())
temp = float(dht22.temperature())
return(hum, temp)
def hoch():
relais1.on()
relais4.on()
current_time = datetime.now()
save_file = open('/home/pi/Desktop/cookie/Hochbeet/log_{0}.txt'.format(current_time.strftime('%Y.%m.%d')),'a')
save_file.write('{0}{1} % - {2} °C. Abdeckung geöffnet.\n'.format(time, round(mh, 1),round(mt, 1)))
save_file.close()
sleep(90)
relais1.off()
relais4.off()
def runter():
relais2.on()
relais3.on()
current_time = datetime.now()
save_file = open('/home/pi/Desktop/cookie/Hochbeet/log_{0}.txt'.format(current_time.strftime('%Y.%m.%d')),'a')
save_file.write('{0}{1} % - {2} °C. Abdeckung geschlossen.\n'.format(time, round(mh, 1),round(mt, 1)))
save_file.close()
sleep(90)
relais2.off()
relais3.off()
x = []
y = []
for i in range(10):
humidity, temperature = readDHT22()
x.append(humidity)
y.append(temperature)
sleep(sleep_time)
current_time = datetime.now()
time = current_time.strftime('%H:%M: ')
mh = (median(x))
mt = (median(y))
print('{0}{1} % - {2} °C'.format(time, round(mh, 1),round(mt, 1)))
if mh >= 98 or mt >= 30:
hoch()
else:
runter()
#relais1.close()
#relais2.close()
#relais3.close()
#relais4.close()
Display More