"USV" mit automatischem Shutdown des RasPi bei Stromabschaltung oder Stromausfall

  • .
    .
    .
    Hinweis: Dieser erste Beitrag wird fortlaufend editiert und somit auf dem aktuellen Stand gehalten. Der aktuelle Stand entspricht dem letzten Änderungsdatum. Somit muss der interessierte Leser nicht dem kompletten Thread (sofern es mal einer wird) lesen, um auf dem aktuellen Stand zu sein.
    .
    .

    Die hier vorgestellte Lösung ist wahrscheinlich für alle interessant, die den RasPi im PKW benutzen oder in Verbindung mit einem Audiosystem als "Datenlieferant oder Datenmanager". Oder auch als Ambilight, wo ja das gleiche Problem besteht. Also im Prinzip für jeden, der sich schon mal die Frage gestellt hat, wie man den RasPi ohne manuellen Eingriff automatisch herunter fahren kann, wenn der Strom aus ist.

    Der ursprüngliche Gedanke zu dieser Lösung kam mir, als ich überlegte, was ich jemandem zum Geburtstag schenken kann, der eigentlich schon alles hat, bzw. es sich kaufen könnte. So entstand dieses Projekt, dass ich dann auch gleich auf meinen Anwendungsfall anpasste.

    Hier der Ansatz für meine Zwecke:

    In meinem Bastelraum möchte ich ein Radio nutzen und per Touchscreen bedienen. Als Hardware dient ein RasPi Modell B, Rev. 2. Dazu habe ich im Großen und Ganzen dieses Projekt umgesetzt.

    http://www.engineering-diy.blogspot.ro/2015/01/raspbe…c-tutorial.html

    Um den Raspberry bequem per Knopfdruck herunterfahren zu können, habe ich dieses Projekt "eingebaut"

    https://www.forum-raspberrypi.de/Thread-tutoria…ight=knopfdruck

    Nun war es zwar möglich, den RasPi per Knopfdruck herunter zu fahren, aber ich konnte ihn nur durch (erstmaliges) Einschalten der Stromzufuhr starten. Das ist in meinem Bastelraum ein Problem. Die komplette Stromversorgung des Raumes läuft über ein Schütz, dass ich bei Verlassen des Raumes abschalte. So ist sicher gestellt, dass nicht versehentlich ein Gerät meines Geräteszoos an bleibt. Betrete ich den Raum, wird das Schütz von mir eingeschaltet. Dann aber würde der RasPi sofort starten, weil die Spannung (durch Schalter) am Gerät mal wieder nicht abgeschaltet wurde, obwohl ich nur kurz in dem Raum bin. Da mich dieser Umstand stört, habe ich ein bisschen mehr Aufwand betrieben, um Start und Herunterfahren des RasPi zu regeln. Denn durch das abrupte Abschalten ohne Shutdown (bei Abschalten des Schützes) zerschießt es auf Kurz oder Lang das Dateisystem der SD-Karte.

    Zuerst habe ich den Taster aus dem obigen Projekt nicht mehr an den RasPi angeschlossen, sondern an einen µController. Da ich ihn herumliegen hatte, habe ich den ATtiny85 genommen. Der läßt sich mit dem AVR ISP MKII oder dem Arduino bequem programmieren. Ein Ausgang des Tiny "simuliert" jetzt den Tastendruck für exakt 0,6 Sekunden am RasPi. Der Taster ist somit jetzt am Tiny angeschlossen statt am RasPi.

    Der Tiny hat aber noch mehr Aufgaben. Er überwacht die Versorgungsspannung des Netzteils (12V). Fällt diese ab, weil ich den Strom am Schütz abschalte oder der Strom mal ausfällt, dann schaltet der Tiny die Versorgungsspannung auf den im Gehäuse installierten Akku um und aktiviert gleichzeitig den Tastimpuls, wodurch der RasPi herunter fährt. Nach einigen Sekunden (einstellbar) schaltet der Tiny die Stromversorgung durch den Akku ab, wodurch sowohl der RasPi als auch der Tiny stromlos sind. Ich brauche mich also nicht mehr um das Herunterfahren des Raspberrys zu kümmern, da es automatisch erfolgt, sobald die Versorgungsspannung abgeschaltet wird. Aber natürlich kann man den RasPi auch weiterhin manuell über einen Tastendruck herunter fahren und auch wieder starten.

    Wird die Versorgungsspannung eingeschaltet, startet nur der Tiny, nicht aber der RasPi. Dieser kann nun über den Taster gestartet werden. Damit wird verhindert, dass der RasPi einschaltet, nur weil der Strom am Schütz kurz eingeschaltet wird. Aber durch eine minimale Änderung im Programm könnte es auch so eingestellt werden, dass der RasPi automatisch beim Einschalten des Stroms bootet. Das wäre für diejenigen interessant, die sich nicht um das manuelle Starten des RasPi kümmern möchten, aber alle anderen Funktionen meiner Lösung nutzen möchten.

    Ein möglicher Einsatz wäre ein RasPi am TV. Wird der TV eingeschaltet, startet der RasPi. Wird der TV abgeschaltet, fährt der RasPi sauber herunter. Die einzige Voraussetzung wäre, dass der TV, wenn er abgeschaltet wird, auch die Spannung am USB-Port abschaltet und dass das Script auf dem RasPi läuft.


    Zur Hardware:

    Der Aufwand für die Hardware ist relativ übersichtlich, da für die meisten der Anwendungen fertige Module für wenig Geld bei ebay zu bekommen sind.

    Da wäre zuerst ein vernünftiges 12V Netzteil, da ich 12V für die Audio-"Endstufe" benötige. Meine Wahl fiel auf das Meanwell SNT RS25-12. Ich nutze inzwischen schon einige Netzteile von Meanwell und hatte bisher nie Probleme. Bei schnellem Lastwechsel allerdings fällt die Ausgangsspannung kurzzeitig ab. Daher installiere ich ganz grob über den Daumen pro Ampere Ausgangsleistung einen 1.000µF Elko direkt am Ausgang. Dann gibt es auch beim Lastwechsel keine Probleme mehr.

    Als Akku nutze ich drei NiMh Eneloop Zellen. Die Spannung wird durch diese Lösung überwacht und per Duo-LED angezeigt:
    http://s-huehn.de/elektronik/klp…/akkutester.htm

    Die Werte in der Software habe ich auf die Eneloops angepasst. Wird durch die LEDs, die erst aktiv sind, wenn der RasPi erstmalig eingeschaltet wurde, signalisiert, dass der Akku leer ist, muss er nachgeladen werden. Hierzu muss die Schaltung aus sein, da der Akku sonst mit der Schaltung verbunden wäre. Im abgeschalteten Zustand besteht durch das abgefallene Relais keine Verbindung mehr zwischen Akkus und Schaltung. An eine enstprechende Ladebuchse muss also bei der Planung eines Gehäuses gedacht werden.

    Zwischen Akku und Tiny-Schaltung sorgt ein StepUp (da der Akku keine 5V hat) Modul für die nötige Spannung. Das fertige Modul (ebay Suchbegriff StepUp 5V USB) hat eine Ausgangsspannung von gut 5V. Da in meinem Aufbau danach aber eine Diode geschaltet ist, muss die Ausgangsspannung etwas höher ausfallen. Ich habe sie auf 5,6V angehoben. Das notwendige Widerstandspaar hat 12 KOhm und 100 KOhm. Die vorinstallierten Widerstände haben bei Lieferung des StepUp die Werte ... und müssen entsprechend ersetzt werden. Da ich nur 1206 SMD Widerstände vorrätig hatte, musste ich die Widerstände hochkant montieren, damit ich die Lötpads noch erwischen konnte. Das sieht merkwürdig aus, funktioniert aber.

    Als letztes benötigt man noch eine stabile Lösung, um aus den 12V auf 5V zu kommen. Zwischen Netzteil und DropDown Modul ist abermals eine Diode geschaltet, um zu verhindern, dass bei der Versorgung durch den Akku der Strom "rückwärts" bis zum Netzteil läuft. Ich habe mich für ein fertiges Modul mit einem KIS3R33S (ebay Suchbegriff KIS3R33S 5V) entschieden, da ich auf jar's Empfehlung hin schon etliche der Dinger verbaut und teilweise seit über einem Jahr ohne Ausfall im 24/7 Einsatz habe.

    Als letzte Komponente ist das "Hirn" des Ganzen zu nennen. Da ich ihn herumliegen hatte, habe ich mich für einen ATtiny85 entschieden, auch wenn er etwas überdimensioniert ist. Damit es ein bisschen ordentlicher aussieht, habe ich eine kleine Platine entworfen, auf der bis auf die Diode zwischen Netzteil und 5V Regler und die "Akkuüberwachung" (ist mir erst später eingefallen) alle Bauteile verbaut sind. Damit der Tiny bequem programmiert werden kann, habe ich noch einen passenden Wannenstecker mit aufgelötet.

    Der Schaltplan, auch wenn er etwas chaotisch aussieht, dürfte selbsterklärend sein. Der Spannungsteiler R4/R5 wurde zur Sicherheit mit 13V gerechnet. Dem ist im Sketch Rechnung getragen. Den "Level-Shifter" an PB4 nutze ich inzwischen bei diversen Projekte. Bisher hat es noch keinen GPIO zerlegt.

    Wenn die Versorgungsspannung durch das Netzteil ausfällt und der Tiny auf den Akku umschaltet, muss für diese sehr kurze Zeit sicher gestellt sein, dass die Spannung nicht zu weit einbricht. Dafür sind die drei Elkos gedacht. Im Schaltplan sind sie fälschlicher Weise mit je 1.000µF angegeben. Die gesamte Kapazität habe ich aber mit rund 10.000 µF angesetzt. Ob die Kapazität auf drei Elkos aufgeteilt wird oder auf zwei oder nur einen, ist dabei egal. Ich habe mein drei Elkos aus einem alten PC-Mainboard ausgeschlachtet. Es mag sein, dass es auch mit weniger Kapazität funktioniert. Das habe ich aber bisher nicht getestet.

    Leider ist mir beim ersten Platinenentwurf ein Gedankenfehler unterlaufen. Daher musste ich statt des geplanten MosFETs Q1 ein zusätzliches Relais installieren. An dieser Stelle möchte ich allen danken, die mir gebetsmühlenartig erklärt haben, wie ein MosFET funktioniert!

    Ursprünglich war geplant, den Monitor durch ein Meder DIP 7212-L 5V zu schalten. Dieses hatte ich noch rumliegen. Da aber nun ein zweites Relais unter gebracht werden muss, habe ich das ursprüngliche Relais durch zwei SIL051-A7271D ersetzt. http://www.reichelt.de/SIL-7271-DHR-5…CH=meder+relais Auf der Platine passt das wunderbar. Da bei diesem Relais bereits eine Freilaufdiode integriert ist, kann D1 entfallen.

    Wie es verbunden ist, ist aus den Fotos gut zu erkennen.

    Wenn ich mal wieder Zeit und Lust habe, werde ich eine zweite Version der Platine entwerfen, bei der die Widerstände und der Tiny als SMD-Version verwendet werden. Eventuell baue ich dann auch noch eine Ladeschaltung mit ein.

    Wer Lust hat das Projekt nachzubauen, kann sich gerne bei mir melden. Ich habe noch einige der Platinen hier rumliegen. Auch über einen programmierten Tiny und den SMD-Kram lässt sich reden.

    P. S. Fotos folgen in den nächsten Tagen. Ich möchte den Prototypen dafür noch ein wenig aufhübschen und alles zusammen in ein Gehäuse bauen.

    edit: Sollte jemand zusätzliche Ideen zur Weiterentwicklung haben, dann her damit. Wenn ich die Schaltung sowieso um die Ladeelektronik erweitere, wäre es sicherlich auch möglich, weitere "Features" umzusetzen.

    Was mir bisher in den Sinn kam:

    (umgesetzte Ideen sind grün)
    (nicht umsetzbare sind blau)

    - Weitestgehende Verwendung von SMD Bauteilen, um die Platine so klein wie möglich zu halten
    - Betrieb auch ohne 12V (also nur 5V) möglich Ist möglich, dazu muss nur R4 überbrückt werden. Allerdings läßt sich dann natürlich kein 12V Verbraucher mehr schalten.
    - Austausch der beiden Relais gegen ein einziges (2 x UM, 2A) Widerspricht der Idee jede Funktion einzeln per I/O zu steuern
    - Ladung der Akkus (zeitgesteuert) sobald die rote LED der "Zustandsanzeige" leuchtet
    - Wahl des Ladestrom durch simples Ändern eines einzigen Widerstandswertes möglich. Somit könnte die Ladeschaltung individuell an jedes Netzteil angepasst werden.
    - Integration der Hardware der Akku "Zustandsanzeige" auf der Platine
    - Integration einiger LEDs, um die Zustände der Ein- und Ausgänge direkt auf der Platine anzuzeigen. Die LEDs werden eine gemeinsame Kathode haben, die über einen Jumper aktivierbar ist. Somit ist es möglich, die LEDs, nachdem alles wunschgemäß läuft und verbaut ist, abzuschalten, damit es nicht innen im Gehäuse leuchtet. Wahlweise könnten die LEDs auch in eine Gehäusefront integriert werden und aktiv bleiben. Die Lötpads werden so gewählt, dass eine Bestückung sowohl mit 0805 SMD LED als auch mit bedrahteten 3mm LED möglich ist.
    - Ersetzen des ATtiny85 durch einen ATtiny84, da dieser mehr I/O Pins bietet. 
    - Jeder MosFET und jedes Relais bekommt einen eigenen Pin, so dass noch individueller auf vorhandene Einsatzszenarien eingegangen werden kann. Je nachdem, wie viele Pins übrig bleiben, werden ein oder zwei MosFETs als Reserve vorgesehen, um Erweiterungen zu ermöglichen Leider nicht möglich, da alle I/O Pins belegt sind.
    - Beschriftung der Platine wird leserlicher ;)

  • "USV" mit automatischem Shutdown des RasPi bei Stromabschaltung oder Stromausfall? Schau mal ob du hier fündig wirst!

  • Version 2

    Da sich niemand gemeldet hat, um weitere Vorschläge zu machen, habe ich meine eigenen Ideen umgesetzt. Wie im obigen Beitrag (am Ende) zu lesen, sind soweit alle Ideen umgesetzt worden. Die Überwachung der Akkuspannung und Ladung des Akkus wird autark von einem ATtiny13 in Verbindung mit einem TLC271 übernommen. Die restlichen Aufgaben übernimmt ein ATtiny84.

    Zu beachten ist, dass es durch die Änderung eines Widerstandswertes möglich ist, den Ladestrom individuell einzustellen. Es gibt allerdings keine Funktion zur Erkennung "Akku voll". Die Akkuladung wird aktiviert, sobald der Akku einen vorgegebenen Wert unterschritten hat. Ab dann wird zeitgesteuert geladen. Wird das Gerät in der Zwischenzeit abgestellt, "merkt" sich die Ladeschaltung dies nicht. Beim nächsten Start wird die Akkuspannung als ausreichend erkannt, obwohl nur zum Teil geladen wurde und der Akku wird erst wieder geladen, wenn die eingestellte Schwelle unterschritten wird. Läuft das Gerät länger als der Akku geladen wird, wird die Ladung nach der voreingestellten Zeit automatisch beendet und der Akku ist nahezu voll.

    An den Ausgängen wurde jeweils eine LED vorgesehen. Es kann sowohl eine bedrahtete LED als auch eine 0805 SMD LED genutzt werden. Über einen Jumper ist es möglich, alle LED zu aktivieren oder zu deaktivieren, sollte man sie nur während der Testphase nutzen wollen. Auch die 5V Versorgung wurde mit einer LED versehen. Ebenfalls ist eine LED "Akku wird geladen" eingefügt worden, so wie eine Dual-LED, die den Akkuzustand anzeigt.

    Durch den Einsatz von zwei weiteren Relais ist der Akku komplett von der Schaltung getrennt, so dass keine Last angeschlossen ist, die ihn entladen könnte, wenn das Gerät abgeschaltet ist.

    Es wurden zwei 2x3 Steckerwannen installiert, um die beiden ATtiny bequem programmieren zu können.

    Jeder Eingang und Ausgang läuft jetzt über einen eigenen I/O Pin. Somit ist es möglich, die Schaltung für diverse Zwecke zu nutzen, auch wenn die Beschriftung dann nicht mehr ganz passt. Abgesehen von der Ladefunktion des ATtiny13 stehen somit zwei MosFET Ausgänge, drei Relais Ausgänge wo wie ein digitaler Ausgang zur Verfügung. Als Eingänge stehen ein Taster und ein Spannungsteiler zur Verfügung.

    Die Platine ist beidseitig SMD bestückt und daher nur um etwa 2cm größer geworden. Die Maße sind aktuell etwa 50x70mm. An jeder Ecke ist eine Befestigungsbohrung vorgesehen.

    Sollte doch noch jemand eine Idee habe, kann ich gerne versuchen diese zu berücksichtigen.

    edit 13.08.2015: Die Platinen wurden geliefert. Ich werde sie die Tage bestücken und hier berichten

  • Gibt es schon Neuigkeiten?
    Ich hätte auf jeden Fall Interesse an der Platine. Mit einem Lötkolben kann ich umgehen (kein SMD) falls noch etwas zu bestücken ist.
    Den Tiny programmieren könnte ich nicht da ich nicht die Nötige HW habe. Und extra nur dafür anschaffen lohnt sich nicht.

  • Willkommen im Forum!

    Ich habe die Platine in der Version 2.0 etwa zur Hälfte bestückt hier liegen. Aber im Moment liegen noch so viele andere Projekte an, dass ich nicht dazu komme, die Platine fertig zu stellen und zu testen. Aber das ist nur eine Frage der Zeit. Sobald es Neuigkeiten gibt, werde ich das hier berichten. Du könntest Den Thread auf "beobachten" stellen, dann bekommst Du eine Info, wenn es hier weiter geht.

  • Hallo,
    nach genau so einer Lösung suche ich schon einige Tage.
    Ich habe den Rasp am TV laufen und möchte gern, dass er mit Einschalten des TV's hochfährt und mit ausschalten des TV's sauber runterfährt.
    Die Spannungsversorgung des TV's wird abgeschaltet.
    Ein Problem an der ganzen Sache ist nur, dass der gelieferte Strom aus dem UBS Port des TV's in einigen Situationen etwas mager ausfällt, sodass es Kodi auch meldet.
    Daher wäre es vielleicht sinnvoll die Spannung des TV's nur als Signal zu nutzen.
    Oder habe ich das nun falsch in deiner Anleitung verstanden und du hast es genau so beschrieben?
    LG

  • Ich bin mit diesem Projekt noch nicht wirklich weiter gekommen. Die Platine ist zwar zwischenzeitlich komplett bestückt, aber um sie zu testen, muss ich mich mit der Software herumschlagen. Da das nicht zu meinen Stärken gehört zieht es sich ein wenig in die Länge...

    Aber Deine Problemstellung könnte vielleicht anders gelöst werden. Schau doch mal hier vorbei: Gelöst: Raspberry Pi nach Shutdown einschalten wenn TV eingeschaltet wird
    Dazu habe ich noch ein paar Platinen hier rumliegen - und die müssen auch nicht programmiert werden :lol:

Jetzt mitmachen!

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