Hallo zusammen, bin ganz neu hier und will gleich mal mein Problem schildern:
Habe eine Heizung, bei dem ein Ventil schaltet, sollte die Heizung anlaufen (also Öl verbrennen). Diese 230V AC Spannung für das Ventil habe nach oben verlegt und will nun erreichen, dass mein Raspberry Pi 3 fleissig die Einschalt- und Ausschaltzeiten mitschreibt.
KLARTEXT:
Ich will eine 230 V AC zu 3,3V DC transformieren. Diese 3,3V soll mein Raspberry dann auslesen. Falls ein Spannungssignal von 3,3V anliegt soll eine Ausgabe ("Start Spannungssignal") mit Zeitangabe erzeugt werden. Sobald 0 V anliegen (Brenner der Heizung aus) soll ebenfalls eine Ausgabe("Ende Spannungssignal") mit Zeitangabe geschrieben werden. Am Ende wird die Dauer zwischen Start und Ende berechnet (Ende-Start).
HARDWARE (siehe Anhang):
Habe die 230V AC mithilfe eines Wandlers auf 5V DC transformiert. Dann einen kleinen Spannungsteiler (mit 3x820 Ohm) gebaut, um die Spannung im Verhältnis 1:2 zu teilen. Am Ende habe ich noch einen Widerstand 390 Ohm zum Raspberry eingebracht (nicht in Zeichnung vorhanden; glaube der ist unnötig??).
SOFTWARE Python:
Habe das ganze mit einem Interrupt-detect Befehl geschrieben. GPIO input ist GPIO13.
Falls auf GPIO13 irgendeine Änderung (falling oder rising) stattfindet, wird die Interrupt-Schleife gestartet. Danach wieder in der while Schleifen verweilen.
Python Programm:
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#GPIO 13 als input definieren und auf nullniveau ziehen
GPIO.setup(13, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
Counter = 0
Tic = 0
#definition der Interruptschleife, tritt ein wenn unteres Ereignis detected wird
#gibt if-Schleife aus wenn GPIO13=1, gibt else aus wenn GPIO=0
def Interrupt(channel):
global Counter
global Start
global Ende
global Dauer
if GPIO.input(13) == 1:#Definiert Start des Signals
Start = time.time()
Counter = Counter + 1
print "Counter: " + str(Counter)
f = open("/var/www/html/Upload_html_Heizung/Aufzeichnung_zaehlfkt.txt","a")
f.write("Sequenz " + str(Counter) + "\n")
f.write("Start: " + time.asctime(time.localtime()) + "\n")
print "Start Spannungssignal: " + time.asctime(time.localtime())
else:#Definiert das Ende des Signals und berechnet die Dauer des Signals
Ende = time.time()
print "Ende Spannungssignal: " + time.asctime(time.localtime())
Dauer = (Ende - Start)/60
print "Dauer in Minuten: " + str(Dauer)
f = open("/var/www/html/Upload_html_Heizung/Aufzeichnung_zaehlfkt.txt","a")
f.write("Ende: " + time.asctime(time.localtime()) + "\n")
f.write("Dauer: " + str(Dauer) + " Min" + "\n")
#Definition des Ereignis, um in die Interruptschleife zu kommen
#wenn GPIO13 sich ändert (Wert auf 1 oder 0) dann gehe in die callback genannt Interrupt s.o.
GPIO.add_event_detect(13, GPIO.BOTH, callback = Interrupt, bouncetime = 500 )
#irgendwas nicht sinnvolles tun bis Interrupt eintritt, Raspi muss ja Programm dauerhaft geöffnet haben
try:
while True:
Tic = Tic+1
time.sleep(1)
#Keyboardinterrupt bei Str C
except:
GPIO.cleanup()
print"Sie haben Strg C gedrückt, Messung beendet"
Alles anzeigen
PROBLEM:
Wenn ich einen normalen 3,3 V Anschluss eines GPIO's benutze funktioniert das Programm einwandfrei.
Wenn ich nun den Raspi an die Heizung bzw. an die o.g.Schaltung anschließe, gibt mir der Raspi jede Sekunde eine Spannungsignal Ende zurück.
Ausgabe im Terminal:
NameError: global name 'Start' is not defined
Ende Spannungssignal: Sat Jan 21 10:15:41 2017
Traceback (most recent call last):
File "/home/pi/meinpython/zaehlfunktion_zeit_v03.py", line 35, in Interrupt
Dauer = (Ende - Start)/60
NameError: global name 'Start' is not defined
Ende Spannungssignal: Sat Jan 21 10:15:41 2017
Traceback (most recent call last):
File "/home/pi/meinpython/zaehlfunktion_zeit_v03.py", line 35, in Interrupt
Dauer = (Ende - Start)/60
NameError: global name 'Start' is not defined
^[[AEnde Spannungssignal: Sat Jan 21 10:15:42 2017
Traceback (most recent call last):
File "/home/pi/meinpython/zaehlfunktion_zeit_v03.py", line 35, in Interrupt
Dauer = (Ende - Start)/60
NameError: global name 'Start' is not defined
^[[AEnde Spannungssignal: Sat Jan 21 10:15:42 2017
Traceback (most recent call last):
File "/home/pi/meinpython/zaehlfunktion_zeit_v03.py", line 35, in Interrupt
Dauer = (Ende - Start)/60
NameError: global name 'Start' is not defined
Alles anzeigen
Der Fehler resultiert aus der nicht vorhandenen Start- Ausgabe (GPIO.RISING).
Was mache ich falsch? Warum bekomme ich keine Start- Ausgabe, warum wird jede Sekunde ein Ereignis "detected"? Glättet der Transformator die Spannung ungenügend?
Danke für jede Mithilfe!