StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Relais Schaltung erkennen

Mon May 11, 2020 9:43 pm

Hallo, ich bin neu hier und habe eine Frage. Ich habe schon viel gelesen über Schaltungen von Relais mit dem raspberry aber zu meinem Anwendungsfall habe ich nichts gefunden.
Ich habe ein Relais dass so geschaltet ist dass es dauerhaft Strom durchlässt und bei einem bestimmten Event (in meinem Fall wenn eine klingel an einem 12v Trafo klingelt) das den Kreislauf unterbricht.
Dieses Event würde ich gerne an einem gpio Eingang registrieren und weiter verarbeiten (geplant ist eine pushmitteilung auf ein Android Handy).
Dafür kann man ja die 3,3v am Ausgang des raspberry nutzen oder? Wie müsste ich das relais anschließen?
Danke im Voraus!

smartifahrer
Posts: 1058
Joined: Sat Feb 13, 2016 8:10 am

Re: Relais Schaltung erkennen

Tue May 12, 2020 10:30 am

Es gibt zwei Stellen an denen du ansetzen kannst. Am der Steuerseite (an der der Taster der Klingel angeschlossen ist) oder am geschalteten "Ausgang". Schau dir das Relais aber mal genau an ob es nicht ein zweites Kontakte-Paar hat.
Wenn du den Pi direkt anschließt geht er kaputt!. Auserdem wird Wechselspannung verwendet was bedeutet das du auf jedenfall eine Schaltung zwischen Pi und Klingel bauen musst die die Spannung gleichrichtet und auf die 3,3 Volt des Pi reduziert. Mit einem Optokopler kannst du das galvanisch trennen was deutlich die Sicherheit erhöht.

Elektronik/Elektrik-Kennnisse hast du? Bastelleien im Umfeld der Netzspannung sind Lebensgefährlich.

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Tue May 12, 2020 1:46 pm

Ich dachte der GPIO könnte Spannungen <=3,3V vertragen.
Das Releais wird ja nur mit 12V geschaltet. Diese Spannung ist aber unabhängig von dem Kreislauf, der geschaltet wird, durch das Relais. Das was ich dann daran anschließe kann ja weniger Spannung haben. Daher dachte ich, man kann die 3,3V vom Raspberry nehmen und das Relais (das dann wie ein Taster funktioniert) zwischen 3,3V, GND und einem GPIO schalten. Aber diese Verkabelung ist mir noch nicht ganz klar.

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Tue May 12, 2020 1:49 pm

Würde sowas funktionieren: http://rpi.ksz.ch/index.php/2015/08/28/ ... chliessen/
Nur ohne die LED/Widerstand und der Taster wird durch das Relais ersetzt.

smartifahrer
Posts: 1058
Joined: Sat Feb 13, 2016 8:10 am

Re: Relais Schaltung erkennen

Wed May 13, 2020 1:01 pm

Ich dachte das du den Pi zusätzlich zur Klingel betreiben willst.

Wenn die Relais-Kontakte sonnt keinerlei Verbindung haben , kannst du das Relais wie im verlinkten Beispiel statt dem Taster anschließen .
Wenn du Python benutzt, solltest du dich am Code aus dem Beispiel orientieren.
Wichtig ist aus Beschaltungssicht folgende Zeile.
GPIO.setup(15,GPIO.IN,pull_up_down=GPIO.PUD_UP)
Damit wird der Pin GPIO15 intern mit einem Widerstand nach 3,3 Volt verbunden (Pullup-Wiederstand). Dieser sorg dafür, daß am Pin 3,3 Volt anliegen wenn der Taster NICHT gedrückt ist. Ohne Widerstand kann ansonsten der Tastendruck nicht immer ermittelt werden.

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Wed May 13, 2020 9:43 pm

ok, super.
d.h. wenn ich die LED aus dem Beispiel nicht brauche, brauche ich auch den extra verbauten Widerstand nicht oder?

smartifahrer
Posts: 1058
Joined: Sat Feb 13, 2016 8:10 am

Re: Relais Schaltung erkennen

Thu May 14, 2020 6:27 am

So ist es. Allerdings lässt mich deine Frage vermuten das du von Elektronik Null Ahnung hast.
Das ist nicht Böse gemeint! Bitte, bitte Vorsicht beim verkabeln. Ein Kuzschluss und der Pi ist möglicherweise kapput. Alles immer ohne Stromversorgung aufbauen. Zum ausprobieren kannst du z.B. erst mal ein normalen Taster/Schalter verwenden.

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Fri May 15, 2020 11:41 am

So ist es, kein Problem. Also so die Basics sind vorhanden, aber halt nicht in diesem Fall mit dem Raspberry zusammen.
Aber dafür gibt es ja euch Experten in Foren. Wäre doch langweilig, wenn hier jeder alles wissen würde :-D
Danke erstmal für die Tipps, probier ich mal aus!

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Mon May 25, 2020 11:07 am

Update: Hat alles soweit geklappt mit dem Relais.
Nur dass immer wenn das Releais öffnet oder schließt, das Event mehrfach erkannt wird.
Ein Beispiel:
Mit diesem Code:

Code: Select all

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.OUT,initial=False)
GPIO.setup(15,GPIO.IN,pull_up_down=GPIO.PUD_UP)
 
def getButtonState(channel):
    if GPIO.input(15):
        GPIO.output(14,False)
        print("Button released")
    else:
        GPIO.output(14,True)
        print("Button pressed")
 
GPIO.add_event_detect(10,GPIO.BOTH,callback=getButtonState,bouncetime=20)
 
while True:
  time.sleep(60)
Immer wenn das Relais öffne kommt in der Konsole:
Button pressed
Button released

Wenn ich das Relais schließe kommt:
Button pressed
Button pressed

Manchmal auch 3x.
Kann man das noch optimieren?
Liegt das am Relais als Taster?

Viele Grüße!

smartifahrer
Posts: 1058
Joined: Sat Feb 13, 2016 8:10 am

Re: Relais Schaltung erkennen

Mon May 25, 2020 11:45 am

Das nennt sich Prellen und ist so bei allen mechanischen Schaltern vorhanden. Beim Schliesen der Kontakte prallen diese wieder voneinander ab. Wie ein Ball vom Boden. Wie lang dieses prellen dauert hängt von den Kontaktfedern ab und ist von Schalter zu Schalter unterschiedlich. Dies kann entweder mit zusätzlicher Elektronik oder per Software gelöst werden.
In deinem Programmcode macht das bouncetime=20 erhöhe diesen Wert mal auf z.B. 300 (= 300 ms).

StingerMKO
Posts: 7
Joined: Mon May 11, 2020 9:10 pm

Re: Relais Schaltung erkennen

Mon May 25, 2020 2:49 pm

Ok, danke für den Tipp.
Ich habe den Code ein bisschen abgespeckt, um ihn hier nicht zu lang zu machen.
Tatsächlich funktioniert es super, wenn ich den Code oben benutze (also, wenn bei den Events nur "Button pressed" oder "Button released" ausgegeben wird)
In meinem Script verschicke ich zusätzlich eine Email bei den beiden möglichen Events. Und da habe ich weiterhin das Problem, dass es mehrfach ausgeführt wird, d.h. ich bekomme auch mehrfach die Email bei jedem Relais-Schalten.
Hier der ganze Code:

Code: Select all

import RPi.GPIO as GPIO
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.OUT,initial=False)
GPIO.setup(15,GPIO.IN,pull_up_down=GPIO.PUD_UP)


def getButtonState(channel):
    if GPIO.input(15):
        GPIO.output(14,False)

        senderEmail = "max.mustermann@gmx.de"
        empfangsEmail= "max2.mustermann2@gmx.com"
        msg = MIMEMultipart()
        msg['From'] = senderEmail
        msg['To'] = empfangsEmail
        msg['Subject'] = "EMail 1"

        emailText = "Diese E-Mail kommt von deinem <b>Raspberr</b> Pi"
        msg.attach(MIMEText(emailText, 'html'))

        server = smtplib.SMTP('mail.gmx.net', 587) # Die Server Daten
        server.starttls()
        server.login(senderEmail, "TOPSECRET") # Das Passwort
        text = msg.as_string()
        server.sendmail(senderEmail, empfangsEmail, text)
        server.quit()
        
        print("Button released")
        
    else:
        GPIO.output(14,True)

        senderEmail = "max.mustermann@gmx.de"
        empfangsEmail= "max3.mustermann3@gmx.com"
        msg = MIMEMultipart()
        msg['From'] = senderEmail
        msg['To'] = empfangsEmail
        msg['Subject'] = "EMail 2"

        emailText = "Diese E-Mail kommt von deinem <b>Raspberr</b> Pi"
        msg.attach(MIMEText(emailText, 'html'))

        server = smtplib.SMTP('mail.gmx.net', 587) # Die Server Daten
        server.starttls()
        server.login(senderEmail, "TOPSECRET") # Das Passwort
        text = msg.as_string()
        server.sendmail(senderEmail, empfangsEmail, text)
        server.quit()

        print("Button pressed")
 
GPIO.add_event_detect(15,GPIO.BOTH,callback=getButtonState,bouncetime=300)
 
while True:
  time.sleep(60)

Habt ihr vielleicht noch eine Idee?

User avatar
DerKleinePunk
Posts: 76
Joined: Thu Feb 23, 2017 9:18 am
Location: Germany
Contact: Website

Re: Relais Schaltung erkennen

Tue Jun 23, 2020 3:51 am

Warscheinlich nicht mehr interessant aber ich würde nicht eine Mail in der Callback des Kontaktes auf rufen sondern in der Main.
Ein Print ist schnell durch das Mail versenden da muss man schon was tun.

Also in der Main alle X Zeit prüfen war der GIO Hi dann Mail senden.
Dann würde das Prellen selbst wenn es noch da ist egal sein.

Gruß
PI 2 und PI 3 1GB Raspbian Strech
Der Wandel von Atom zum Bit ist unwiderruflich und nicht mehr aufzuhalten.
Nicholas Negroponte

Return to “Deutsch”