Relay mit UART TX schalten

  • Hallo Forum,


    Ich habe einen Raspi2 B+ auf dem eine USV StromPi2 sitzt. So kann ich den Pi bei gekappter Hauptstromversorgung noch herunterfahren. Das funktioniert auch alles fein. Momentan hängen noch drei parallel geschaltete 9V Blocks am Wide Eingang der USV. Der Pi wird nur zweimal am Tag automatisch eingeschaltet, läuft etwa eine Stunde und wird dann wieder automatisiert ausgeschaltet.

    Nun bleibt die USV und natürlich auch der Pi in gewisser Weise "an", was die Batterien bei 22H Betrieb über nur diese sehr schnell leer zieht.


    Meine Idee war nun die Batterien physikalisch zu trennen, sobald der Pi heruntergefahren wurde. Wird der Pi dann wieder über die Hauptstromversorgung gestartet, sollen die Batterien wieder aktiv verbunden sein, damit sie beim nächsten Ausschalten der Hauptstromversorgung einspringen um den Pi herunterzufahren.


    Um dies durchzuführen, würde ich gerne ein Relay verwenden. Ich habe hier noch eines dieser 4-Relay-optokopler Dinger. Die Idee ist den UART TX Pin zu verwenden. Dazu habe ich das Relay über eine externe Quelle mit 5V versorgt. Also V+ auf VCC am Relay und GND auf GND am Relay. GPIO 15 habe ich mit IN1 auf dem Relay verbunden. GND vom Pi habe ich auf den gleichen GND wie der externen Stromversorgung gelegt.

    Ich war der Annahme das der UART TX pin nach Shutdown des Pi auf 0V sinkt und das sich dadurch am Relay irgendwas tut, aber nichts. Aber auch bei eingeschaltetem Pi wird das Relay nicht aktiviert.


    Hat hier jemand eine Idee was genau ich falsch mache? Funktioniert das so überhaupt? Über ein laufendes Skript auf dem Pi geht das mit Sicherheit gut, aber da der Pi dann schon heruntergefahren sein wird wenn das Skript reagieren muss, fällt das wohl aus?


    Vielen Dank für mögliche Hilfe,

    KellJ

  • Hallo RTFM,


    Den Thread habe ich mir zu Gemüte geführt. Wenn ich das alles richtig verstanden habe, ist es ratsam einen ULN zwischen Pi und Relay Board zu schalten. Den im Thread genannten ULN2003 habe ich nicht. Stattdessen ist aber ein ULN2803 vorhanden. Wenn ich das Datenblatt richtig interpretiere sollte dieser auch geeignet sein um die Schaltung zu realisieren.


    In der Zeichnung ist nur statt eines 4 Channel Relays ein 8 Channel Relay. Konnte auf die schnelle keines für Fritzing finden. Auf meinem vierer ist VCC-JDVCC per Jumper verbunden und das sollte bei der Verschaltung wie unten angegeben ja auch so bleiben, wenn ich es richtig verstanden habe.


    Auf dem Pi2 würde es dann bei mir so aussehen:

  • Auf meinem vierer ist VCC-JDVCC per Jumper verbunden und das sollte bei der Verschaltung wie unten angegeben ja auch so bleiben, wenn ich es richtig verstanden habe.

    Das kann ich Dir ohne Schaltplan Deines Relaisboards nicht sagen. Manchmal wird der Optokoppler gegen Masse aktiviert und dadurch das Relais angezogen.


    Das Problem Deiner Schaltung ist jedoch, dass Du die Stromversorgung über einen GPIO Pin + Relais zwar (u.U. zeitverzögert) unterbrechen kannst, eine Wiederinbetriebnahme des Pi ist aber so (noch) nicht möglich.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Also auf die Gefahr hin mir meinen Pi zu brutzeln, habe ich es einfach mal so ausprobiert. Funktioniert bis auf eine Kleinigkeit sehr gut. Ich nutze das Relay ja nur um die Batterien zu entkoppeln während der Pi nicht läuft. Um das zu detektieren verwende ich den UART TX pin. Nur kann ich garantieren das wenn der UART TX pin auf low ist, das der Pi dann auch schon wirklich runtergefahren ist?
    Das Relay geht nämlich aus, kurz bevor das letzte Blinken der grünen LED für den Shutdown beendet ist. Heißt die rote LED ist aus, aber die grüne blinkt noch ein letztes mal. Ist der Shutdown da bereits abgeschlossen? Ansonsten könnten 1-2 Kondensatoren diese Zeit noch genügend verlängern?

  • Servus KellJ,

    ... Nur kann ich garantieren das wenn der UART TX pin auf low ist, das der Pi dann auch schon wirklich runtergefahren ist?

    nein, es sei denn, Du findest in der Doku zum Pi eine Aussage, dass der Pin nach abgeschlossenem shutdown mit LOW und vorher mir HIGH definiert ist.



    ... Ist der Shutdown da bereits abgeschlossen?

    s.o.

    Auch da kannst Du nur sicher sein, wenn das irgendwo dokumentiert ist.

    Mir ist aber weder das eine noch das andere bekannt (was jetzt nicht heissen muss, dass es nicht so ist) ...


    cu,

    -ds-

  • Ich weiß nur, dass Pin 8 (GPIO14) oder UART_TXD0 schon beim booten auf "High" geht. Wenn ich mich richtig erinnere, dann blieb der auch hin und wieder nach dem shutdown so, meine Hand würde ich dafür also nicht ins Feuer legen.


    Nachtrag: Evtl. Anpassungen im Device Tree ausgenommen. Dazu kann ich im Bezug auf UART auch wenig sagen.

  • Der Pi wird nur zweimal am Tag automatisch eingeschaltet, läuft etwa eine Stunde und wird dann wieder automatisiert ausgeschaltet.

    Ich habe mir Dein "USV StromPi2" mal näher angeschaut (Betriebsanleitung) und unterstelle Dir, dass beide Modus Steckbrücken auf "USV" gesteckt sind, die Reset Brücke gesteckt ist, und Du mit einer Zeitschaltuhr ein 5 V Netzgerät betreibst, das am Micro USB Anschluss des StromPi2 angeschlossen ist. Im ausgeschaltenen Zustand verbraucht der StromPi2 gerade einmal 20μA – 80μA. (micro, nicht milli).


    Fraglich ist, ob Dein USB Modul nach dem Shutdown auch die Stromzufuhr zum Pi gänzlich unterbricht, das geht aus der Anleitung nicht hervir, ist aber bei den Pi-USVs üblich. Das kannst Du aber testen, wenn im ausgeschaltenen Zustand und angesteckter Batterie an Pin 1 und 3 der Steckerleiste 5 V anliegen. Dann läuft der Pi nach Shutdown im Leerlauf tatsächlich weiter und saugt Deine Batterien leer.


    Ist aber nach dem USV-Shutdown die 5 V Spannung am Pi (Pin1,3) weg, wäre das ein besserer Indikator für ein abgeschlossenes Shutdown und es wird kein GPIO Pin beansprucht, die zeitweise undefiniert in der Luft hängen können.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hi hyle,

    Nachtrag: Evtl. Anpassungen im Device Tree ausgenommen. Dazu kann ich im Bezug auf UART auch wenig sagen.

    wobei Device-tree Einträge voraussetzen, dass eine Software diese interpretiert und umsetzt ... das ist aber nicht immer der Fall (gerade beim EIn- bzw. Ausschalten ... und darum geht's ja hauptsächlich, denke ich).

    cu,

    -ds-

  • Das kannst Du aber testen, wenn im ausgeschaltenen Zustand und angesteckter Batterie an Pin 1 und 3 der Steckerleiste 5 V anliegen. Dann läuft der Pi nach Shutdown im Leerlauf tatsächlich weiter und saugt Deine Batterien leer.

    Die Spannung an 5V und 3V3 Pin bleiben nach herunterfahren mittels USV bestehen. Was ich schon ziemlich bescheuert finde, da so niemals die 20μA – 80μA erreicht werden. Auf diese Weise sind die normalen Batterien ruck zuck leer. Und ja, ich habe beide Jumper auf USV und dem Reset Jumper aktiv.


    Deswegen meine Idee die Batterien/den Akku per Relais von der USV zu trennen sobald der Pi heruntergefahren wurde. Wenn ich da jetzt noch eine Ausschaltverzögerung rein bekomme, funktioniert auch alles wie ich es mir vorstelle. Vielleicht komplizierter als nötig, aber es würde dann funktionieren. :/

  • Auf diese Weise sind die normalen Batterien ruck zuck leer.

    Was ist eine normale Batterie bei einer (unterbrechungsfreien) Stromversorgung ? Im Normalfall kommt ja der Netzstom am USB Netzteil wieder und bleibt nicht 20 Stunden am Tag weg.


    Du brauchst daher eine Zeitverzögerung am Trennrelais. Bei der Kondensatormethode musst Du wieder aufpassen, dass am GPIO Pin nicht mehr als 2 - 4 mA (zum Aufladen des Kondensators) entnommen werden.


    Oder Du lässt im Ausschalt-Script den shutdown Befehl um 1 Minute zeitverzögert ausfühten (statt now, +1) und nutzt diese Zeit, um das Root Filesystem in einen sicheren Zustand zu versetzen (mit beenden Deines Hauptorigrammes, sync, remount ro, oder so).


    Bei Verwendung des TX GPIO Pins habe ich ein mulmiges Bauchgefühl. Probiere lieber einmal die normalen - einfach belegten - Schaltpins durch, wie sich diese im Out Mode nach dem Shutdown verhalten, wenn sie vorher auf high gesetzt weden und/oder probiere eine Art Pulldown am ULN Eingang (Basis), unter Beachtung des Datenblatt(schaltplanes) der vpn Dir verwendeten ULN - Version.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • dreamshader,


    das wäre vielleicht eine Alternative. Am liebsten wäre mir dann ein System das Standardmäßig als "read only" läuft. Wenn ich meine Skripte zum Schreiben von Daten verwende, das Filesystem auf "read write" geht, die Skripte durchlaufen, das Filesystem wieder auf "read only" geht und ich den Pi herunterfahre.
    Ich werde dieses Tutorial mal testen: https://hallard.me/raspberry-pi-read-only/


    Das wurde zuletzt auf Jessie angepasst. Mal sehen ob es auch für Stretch noch funktioniert. Natürlich mache ich vorher ein Backup meiner SD Karte.

    Was ist eine normale Batterie bei einer (unterbrechungsfreien) Stromversorgung ? Im Normalfall kommt ja der Netzstom am USB Netzteil wieder und bleibt nicht 20 Stunden am Tag weg.

    Genau. Es wird aber der Fall sein das die Hauptstromversorgung eben für 20 Stunden und mehr nicht zur Verfügung stehen wird. Die Gründe dafür werde und möchte ich jetzt nicht noch ausführen. :)




    Oder Du lässt im Ausschalt-Script den shutdown Befehl um 1 Minute zeitverzögert ausfühten (statt now, +1) und nutzt diese Zeit, um das Root Filesystem in einen sicheren Zustand zu versetzen (mit beenden Deines Hauptorigrammes, sync, remount ro, oder so).

    Sowas in der Art ergibt sich ja auch daraus das System auf ro zu setzen, aber wenn was geschrieben werden muss auf rw und anschließend wieder auf ro.


    Der TX pin scheint mir aber zum Erkennen des poweroff recht gut. Zumindest verwenden ihn viele und sind auch die Überzeugung das das FS schon unmounted ist sobald dieser auf LOW geht. Aber sicher weiß es eben keiner.