Bewegungsmelder und Relais kombinieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    ich habe es jetzt schon geschafft einen Bewegungsmelder und ein Relais separat mit einem Script zu steuern. Jetzt wollte ich gerne beide kombinieren so dass das Relais immer dann für einen bestimmte Zeit schaltet, wenn der Bewegungsmelder ein Signal auf dem SENSOR_PIN ausgibt.

    Mein erster Versuch für das Script:


    führt leider nicht zum gewünschten Erfolg. Habt ihr ev. nützliche Tipps oder Hinweise für mich?

    Gruß Hakupapa

  • Hallo Hakupapa,

    als Python-Ignorant fällt mir als Erstes auf:

    Deine Callback-Funktion enthält Definitionen, die dort nicht hingehören.

    Code
    import RPi.GPIO as GPIO
    def mein_callback(channel):
       # Hier kann alternativ eine Anwendung/Befehl etc. gestartet werden.
       RELAIS_1_GPIO = 21
       GPIO.setup(RELAIS_1_GPIO, GPIO.OUT) # GPIO Modus zuweisen
       time.sleep(10)
       GPIO.output(RELAIS_1_GPIO, GPIO.HIGH) # aus
       time.sleep(10)
       GPIO.output(RELAIS_1_GPIO, GPIO.LOW) # an

    Bringe die Zuweisungen von RELAIS_1_GPIO nach oben zu den anderen Zuweisungen.
    Ebenso wird dort auch kein GPIO.setup() erfolgen. Das machst Du im Hauptprogrammteil zusammen mit den anderen GPIO.setpups.
    In diesem Callback machst Du nichts anderes als zwischen den Zuständen HIGH und LOW hin- und herzuschalten.

    In einer zweiten Stufe kannst Du auch die Verzögerung auslagern, so dass der Callback aus nur 1 oder 2 Zeilen besteht. Das past dann auch besser zur Interrupt-Philosophie. Aber das ist ein anderes Thema.

    Probier mal aus und dann sehen wir weiter.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas und danke!!! Ja da hätte ich eigentlich auch drauf kommen können. Das mit dem Auslagern der Verzögerung verstehe ich allerdings noch nicht. Das Script sieht jetzt so aus:

    Damit wird das Relais jedes Mal geschaltet und bleibt scheinbar unbegrenzt an. Das Script endet nur bei STR + C. Außerdem schaltet das Relais unabhängig vom Bewegungssensor immer sofort. Es soll aber nur schalten, wenn der Bewegungssensor auslöst. Was mache ich falsch?
    Gruß
    Hakupapa

  • Hallo Hakupapa,

    ein GPIO kann folgende Zustände annehmen:
    - HIGH
    - LOW
    - RISING
    - FALLING

    Dein Pseudo-Interrupt soll einen steigenden Pegel (von LOW nach HIGH) erkennen. Dann schaltet Dein Relais auf LOW, bleibt 10 Sekunden auf LOW und schaltet dann auf HIGH.
    LOW bedeutet in dem Fall einen Pegel < 0,8 V. HIGH entspricht einem Pegel von > 1,3 V.
    Wie Du siehst, gibt es einen Bereich, der nicht definiert ist.

    Was mag passieren, wenn Du von diesem undefinierten Bereich nach HIGH pegelst - oder nach LOW pegelst. Ist Ersteres dann immer noch "RISING"? Keine Ahnung. Das kann mal so und mal anders sein.

    Ich würde in dem Fall mal mit den entsprechenden anderen Optionen arbeiten:
    Statt

    Code
    GPIO.add_event_detect(SENSOR_PIN , GPIO.RISING, callback=mein_callback)

    sowas wie

    Code
    GPIO.add_event_detect(SENSOR_PIN , GPIO.HIGH, callback=mein_callback)

    oder

    Code
    GPIO.add_event_detect(SENSOR_PIN , GPIO.LOW, callback=mein_callback)


    Eines von beiden wird auf ein PIR-Ereignis reagieren (gewünschtes Verhalten), das andere wird ohne PIR-Ereignis die Callback-Rouitine aufrufen (ungewünschtes Verhalten). Das hängt davon ab, ob Deine Schaltung bzw. Sensormodul durch einen Pullup- oder Pulldown-Widerstand saubere Pegel erzeugt.


    Zu Deinem Callback:

    Relais sind normalwerweise LOW-aktiv. Das heißt, es ist geschlossen (?), wenn keine Spannung anliegt. Das heißt, Dein LOW schaltet es nicht aus sondern ein. HIGH entsprechend. Wechsel mal diese beiden Zeilen, um festzustellen, ob es dann Deinem Wunschverhalten entspricht.


    Worauf ich eigentlich hinaus wollte:
    Eine Interrupt-Routine sollte immer möglichst schnell beendet werden, um auf weitere Interrupts reagieren zu können. Da gehören (aus klassischer Sicht) keine delays und sleeps hinein. Da gehört keine Ausgabe (Bildschirm, externer Speicher) hinein. Da gehört auch keine Eingabe (Tastatur, externer Speicher) hinein.
    Suche mal in einem Python-Tutorial Deiner Wahl etwas zu UND bzw. ODER-Verknüpfungen. Damit kannst Du zwischen zwei Zustanden hin- und her schalten. Aus EIN wird AUS, aus AUS wird EIN. Aus HIGH wird ... na was? Wenn Du das verstanden ist, dann besteht Dein Callback nur noch aus einer Zeile, in der der Zustand wechselt. In Deinem Hauptprogramm braucht dann nur der entsprechende Zustand geschaltet zu werden. Dein Callback wird (auch bzgl. Laufzeitverhalten extrem kurz sein. Du kannst dann sehr schnell auf andere Interrupts reagieren.


    Wenn Du meine Anregungen umsetzt, dann sollte das


    Damit wird das Relais jedes Mal geschaltet und bleibt scheinbar unbegrenzt an. Das Script endet nur bei STR + C. Außerdem schaltet das Relais unabhängig vom Bewegungssensor immer sofort. Es soll aber nur schalten, wenn der Bewegungssensor auslöst. Was mache ich falsch?


    der Vergangenheit angehören.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (6. Januar 2017 um 11:13)


  • Relais sind normalwerweise LOW-aktiv. Das heißt, es ist geschlossen (?), wenn keine Spannung anliegt. Das heißt, Dein LOW schaltet es nicht aus sondern ein. HIGH entsprechend. Wechsel mal diese beiden Zeilen, um festzustellen, ob es dann Deinem Wunschverhalten entspricht.

    darüber sollten wir noch mal reden,

    Relais sind normal high aktiv

    Spannung an Spule, Relais zieht an und schliesst einen Kontakt (OK der andere öffnet bei Umschaltekontakte)

    Die typischen Relaisplatinen invertieren das Ganze, erst wenn am IN low ist schaltet das Relais.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Jar,

    darüber sollten wir noch mal reden,

    Relais sind normal high aktiv

    Spannung an Spule, Relais zieht an und schliesst einen Kontakt (OK der andere öffnet bei Umschaltekontakte)

    Die typischen Relaisplatinen invertieren das Ganze, erst wenn am IN low ist schaltet das Relais.

    Mit dem Fragezeichen habe ich angedeutet, dass ich mich da auf ganz dünnem Eis bewege. Ich kann nur die Codezeilen deuten und mit Hakupapas Beobachtungen verknüpfen. Da bleibt dann nicht viel anderes übrig, als im Code was zu ändern.

    OK. Dann passt das doch, was ich geschrieben habe. Wenn die typischen Relaisplatinen schalten, wenn an deren Relais-IN letztlich LOW anliegt. Oder?

    (Relais sind noch außerhalb des dünnen Eises, auf dem ich stehe...)

    Pragmatisch betrachtet:
    Hakupapa hat eine Hardware, die zunächst funktioniert, indem sie schaltet. Nur andersherum als gedacht. Also ist es das Einfachste, den Code so zu stricken, dass es "passt". Ob jetzt richtig oder falsch gedacht - ist eigentlich egal, wenn die Software es "ausbügeln" kann.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (6. Januar 2017 um 16:41)

  • danke für die ausführliche Antwort Andreas . :) Ich sitze jetzt schon den ganzen Tag und probiere herum. Komme aber nicht weiter. Dann bin ich zurückgegangen, um zu schauen, ob der Bewegungsmelder noch so funktioniert, wie das schonmal der Fall war. Geht nicht mehr. Dann habe ich mit dem Mulitmeter mal ein bisschen rumgemessen und festgestellt, dass die 5V Pins 10,5 Volt und die 3,3 V Pins 6,5V ausgeben. Sagt jetzt bitte nicht, dass ich mir schon den zweiten Pi zerlegt habe? Und der dann den/die Bewegungsmelder? Das Relais funktioniert aber auch mit 10,5V Eingang und 6,5 V Signalleitung.

    Übrigens die Parameter lassen sich im Zusammenhang mit dem event Befehl nur auf RISING, FALLING und BOTH ändern, hab ich auch versucht aber ohne Ergebnis. Wobei ich momentan nicht ausschließen kann, dass es etwas mit dem Bewegungsmelder zu tun hat.

    Ich geh jetzt erstmal mit den Kindern raus in den Schnee, damit ich auf andere Gedanken komme und dann werde ich nochmal versuchen den Bewegungsmelder zum Laufen zu bekommen. Ich hoffe nur, dass die Spannungen "normal" sind?!

  • Servus,
    wenn ich so was lese stellt sich mir jedesmal die Frage, warum hier im Forum Schaltpläne nur auf (teilweise mehrfache) Aufforderung geliefert werden. :s
    Die meisten hier dürften, mich eingeschlossen, keine Elektronik-Cracks sein.
    Und da ist, zumindest meine Vorgehensweise doch:
    1. Überlegen, was man realisieren will
    2. Eine -> Skizze einer Schaltung anfertigen <- und mal drüberschauen, ob da evtl. ein Denkfehler vorliegt
    3. Die Schaltung aufbauen, im "Trockenlauf" (also ohne Pi) mit Strom versorgen und, soweit möglich und sinnvoll, erst mal durchmessen
    4. Dann erst am Pi anschliessen ...

    Und spätestens ab Punkt 2 könnt ihr Euch hier ein Feedback holen, ob das alles so klappt, wie ihr Euch das vorstellt, wenn ihr unsicher seid.
    Damit könnt ihr das Leben Eures Pi sicher um einiges verlängern.

    Irgendwie wollen die meisten scheinbar aus Schaden klug werden, dabei wäre es so einfach ...

    cu,
    -ds-

  • diese Verweigerung disktierbare Schaltpläne zu liefern erschliesst sich mir auch nicht.

    Wir sind ja hier in keinem Anwaltsforum wo Prosa Auslegungssache ist!

    mich ärgert es ja schon wenn ich im Verkehrsfunk höre
    "Über Verkehrsstörungen liegen keine Meldungen vor"

    ja keine Verkehrsstörungen oder keine Meldungen?

    Wenn es keine Meldung gibt heisst es noch lange nichtdas es keine Verkehrsstörung gibt, also ist diese Info nutzlos und entbehrlich!

    Vorhin wieder imRadio eine Durchsage verknüpft mit einer Verneinung und keiner kann es verstehen, deswegen sind Worte oder auch viele Wort sinnlos.

    Schaltpläne sind die Worte des Technikers

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (6. Januar 2017 um 13:45)

  • mein Fehler - ich vergaß die Ursache zu erwähnen. Hatte gestern mit dem Relais rumgespielt, da mein Script nicht richtig ausgeführt wurde. Da dass Relais einen Jumper hat, dachte ich mir, dass man diesen mal umstecken könnte. Böser Fehler. Es roch und das Massekabel wurde richtig heiß. Gleich gekappt aber wahrscheinlich war der Schaden schon angerichtet. Konnte das Relais aber noch ansteuern, daher dachte ich nicht, dass es größere Schäden gab. Bis ich heute die Spannungen gemessen hatte. Der Schaltplan an sich war nicht fehlerhaft und daher hätte mir die vorgeschlagene Verfahrensweise dann auch nicht viel geholfen.
    Sicher ich hätte ich vor dem Test mit dem Jumper fragen können, aber ich wollte halt auch nicht wegen jeder Kleinigkeit nachfragen, die ich selber testen kann. Es wird ja hier auch ein gewisses Maß an Eigeninitiative erwartet. Das war dann wohl ein Fehler. Kann ich jetzt aber nicht mehr ändern. Wenn er tatsächlich jetzt die doppelte Spannung ausgibt, kann ich das ja über Widerstände kompensieren. :D Bevor ich das nächste Mal an einem Jumper rumspiele, dessen Funktion ich nicht kenne, frag ich Euch. :daumendreh2:

    Für mich wäre jetzt erstmal interessant, ob die Bewegungsmelder hinüber sind. Kann ich das irgendwie testen?

  • Servus,
    das war jetzt auch nicht ausschliesslich auf Dich bezogen sondern nur mal eine allgemeine Feststellung. Ist halt wie mit dem berühmten Backup, das man nicht braucht ... bis man es braucht ...

    Welche Bewegungsmelder setzt Du ein ... so aus dem hohlen Bauch wird Dir da niemand was dazu sagen können ...

    cu,
    -ds-

  • hallo ds, ja kein Problem. Ich versteh da irgendwie beide Seiten. Bin auch jemand der gerne rumprobiert und ziemlich ungeduldig ist. ;) Mit dem Backup das kenne ich auch gut. :shy: Bewegungsmelder sind alle i.O. hab jetzt mal gemessen und dann nochmal mein erstes Script gefahren und alles gut.

    Ich verstehe nur das mit der Spannung nicht ganz. Ist da jetzt bei mir definitiv was defekt, wenn ich auf 5V mehr als 10V messe und muss ich entsprechend alle Verbraucher die auf 3,3V ausgelegt sind mit entsprechenden Widerständen betreiben?

  • Also 10V kann imho nicht sein ... und 6 statt 3V3 auch nicht ... bei 6V wäre der SoC schon in Rauch aufgegangen.
    Evtl. hat es Deinen Spannungsregler erwischt ... das könnte die 10V erklären ...
    Erklär mal genauer, was Du wie und wo gemessen hast und wie Dein Pi mit Strom versorgt wird.

    cu,
    -ds-

  • HEUREKA :danke_ATDE: :danke_ATDE: :danke_ATDE: insbesondere an Andreas. Hab ihn tatsächlich so weit, dass er bei Bewegung das Relais durchschaltet. Mit meinen o.a. Script. Mit meinem letzten Script wahr schon alles ok. Bei dem Rückwärtsprüfen hab ich rausgefunden, dass der SensorPin falsch eingestellt war. Das hättet ihr dann mit einem Schaltplan wahrscheinlich ziemlich schnell bemerkt. Ich bin erstmal ziemlich happy das ich das mit Eurer Hilfe auf die Reihe bekommen und wieder ziemlich viel dazu gelernt habe. Unter anderem auch, dass solche kleinen Fehler zwar sehr lästig sind aber auch dazu führen, dass man viel lernt - wenn man nur hartnäckig genug ist. ;)

  • Hallo Hakupapa,

    kannst Du mal eine Schaltung posten (am besten mit Fritzung). Ich habe den Überblick verloren, was wo mit wem verbunden ist und welche Spannungen Du zwischen welchen Messpunkten misst.

    Ebenso ist es essentiell zu wissen, welches PIR-Modul / PIR-Sensor Du einsetzt.

    Ich habe vor ein paar Wochen mal einen eingesetzt, den ich mit 3,3 V des RPi betreiben kann. Und dessen Ausgangspegel ebenso 3,3 V beträgt. Kann ich ohne weitere Schaltung direkt an den Raspberry Pi hängen - und funktioniert.

    An Spekulationen, wo die 10 V herkommen und ob sie schädlich sind, möchte ich mich auch nicht beteiligen, bevor ich keine Schaltung gesehen habe.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (6. Januar 2017 um 16:52)

  • hallo ds,
    versorgt wird er über mikro USB mit einem 5V Netzteil.

    Andreas mit Fritzing das hab ich noch nie gemacht. Hab schon versucht mich anzumelden. Alles ausgefüllt und über die Mailadresse freigeschaltet. Komme da aber noch nicht rein. Hab schon versucht das PW zurückzusetzen. Daran scheint es nicht zu liegen. Er verweigert mir aber konsequent den Login mit falscher Benutzer PW Begründung. Ich bleibe dran, vielleicht dauert es ja eine Weile bis man richtig freigeschaltet wird.

    Einmal editiert, zuletzt von Hakupapa (6. Januar 2017 um 17:04)

  • Da schliesse ich mich jetzt erst mal Andreas an ... wenn der Pi mit 5V versorgt wird, kannst Du unmöglich irgendwo 10V messen ...
    Es sei denn ... na, und da warten wir mal auf Dein Schema ....

    //EDIT:


    ... mit Fritzing das hab ich noch nie gemacht. ...

    da brauchst Du Dich nicht anmelden ... einfach in den Download-Bereich gehen und passende Version herunterladen und installieren ...
    Ansonsten ist Fritzing intuitiv bedienbar. Alternative wäre eagle ... das darfst Du für private Zwecke ebenfalls kostenlos nutzen.

    cu,
    -ds-

  • Hallo Hakupapa,


    Andreas mit Fritzing das hab ich noch nie gemacht. Hab schon versucht mich anzumelden. Alles ausgefüllt und über die Mailadresse freigeschaltet. Komme da aber noch nicht rein. Hab schon versucht das PW zurückzusetzen. Daran scheint es nicht zu liegen. Er verweigert mir aber konsequent den Login mit falscher Benutzer PW Begründung. Ich bleibe dran, vielleicht dauert es ja eine Weile bis man richtig freigeschaltet wird.


    das geht ganz einfach:
    RPi oder einen Linux-Räscheknäscht ans Internet anschließen (LAN oder WLAN) und dann in der Konsole /LXTerminal eingeben:

    Code
    sudo apt-get install fritzing


    Dann hast Du irgendwo in der Menüleiste einen Eintrag Fritzing (Symbol weißes kleines F auf rotem Untergrund). Das meiste, was ein Anfänger braucht, ist selbsterklärend und intuitiv bedienbar.

    Dann sehen wir weiter ;)

    Beste Grüße

    Andreas
    Automatisch zusammengefügt:


    [Edit] dreamshader war schneller

    ... und ich war noch langsamer als Doing .... boing ...

    ;)

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (6. Januar 2017 um 17:14)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!