Raspberry Pi – USV selber bauen (Unterbrechungsfreie Stromversorgung)

7. April 2017
2999 Views
20 Comments

In einigen Anwendungen ist es wichtig, dass der Pi auch bei einem Stromausfall weiter mit Strom versorgt wird. Wird im Moment der Stromunterbrechung auf der SD Karte geschrieben ist es möglich, dass das Image korrupt und damit unbrauchbar wird.
Eine USV (Unterbrechungsfreie Stromversorgung) stellt sicher, dass bei einer Stromunterbrechung ein Akku / andere Stromquelle einspringt, ohne dass das Gerät beeinträchtigt wird.

Eine solche USV kann sehr einfach mit ein paar Bauteilen erstellt werden und im Notfall kann mittels eines Skripts darauf reagiert werden und der Pi ordnungsgemäß heruntergefahren werden.

Zubehör

  • Powerbank mit 2.1A Output (wichtig: muss gleichzeitig auf- und entladbar sein)
  • USB Hub (andernfalls müsste ein Kabel aufgeschnitten werden)
  • Relais
  • 10kΩ Widerstand
  • 2 Micro USB Kabel
  • Jumper Kabel

Zwar gibt es bereits fertige USV für den Raspberry Pi zu kaufen, aber diese sind entweder recht teuer (Link) oder nicht sehr gut bewertet (Link). Eine andere Variante (die allerdings Löt- und Elektronikkentnisse voraussetzt), wäre die Speisung zweier Stromquellen – zum einen über die Steckdose und zum anderen über die Powerbank.

Aufbau

 

USB Buchse
1 – VCC (5V)
4 – GND
© hardwarelabs.de

 

Es werden zwei USB Ports des Hubs benötigt. An den ersten wird die Powerbank angeschlossen, die wiederum dem Pi als Stromquelle dient. Der zweite USB Anschluss wird als An/Aus Schalter des Relais verwendet. Ich habe die Kabel, die das Relais steuern, einfach unter die Halterungen geklemmt. Auf der rechten Seite siehst du wo 5V und GND an einer USB Buchse liegen.

Der mittlere OUT Pin des Relais kommt an GPIO27 (Pin 13) des Pi’s. Der rechte OUT Pin über einen 10kΩ Widerstand an Pin 2 (5V) des Pi’s, der rechte an Pin 6 (GND).

 

Software

Angenommen es kommt nun zu einem Stromausfall. Zum einen würde der Pi noch einige Stunden (je nach Powerbank Modell) laufen. Danach wäre aber Schluss. Damit der Pi nun mitgeteilt bekommt, dass er grade auf „Notstrom“ läuft, schaltet das Relais um und an GPIO23 liegen nun 0V an. Davor gab es einen HIGH Pegel, da durch die USB Hub Stromversorgung auch das Relais geöffnet war.

In meinem Beispiel möchte ich zeigen, wie man auf die Änderung reagiert und den Pi sachgemäß herunter fährt. Natürlich können auch andere Aktionen ausgeführt werden (Email versenden, Daten speichern, erst nach einer Weile herunter fahren, usw.).

Für dieses Beispiel musst du wiringPi installiert haben (eine ähnliche Umsetzung mit Python sollte sicher auch möglich sein). Der wiringPi Pin 2 entspricht GPIO27 (siehe wiringPi Pin Belegung).

Wir erstellen eine neue Datei

sudo nano /usr/local/etc/USV.sh

mit folgendem Inhalt:

Statt meinem Code kann auch jeder beliebige andere Shell-Befehl eingetragen werden.

Damit das Skript nun bei jedem Reboot auch mitstartet, tragen wir es noch als crontab ein:

sudo crontab -e

Am Ende der Datei wird nun folgende Zeile eingefügt:

@reboot bash /usr/local/etc/USV.sh &

 

 

Das von mir verwendete Powerbank Modell schaltet seine Aufladung ab, sobald es voll ist. Bei Interesse kann ich auch noch eine Schaltung präsentieren, womit man alle X Stunden die Powerbank aufladen lässt (was im Grunde nur ein zusätzliches Relais ist). Dazu kannst du auch ggf. diesen Artikel lesen.

20 Kommentare

  1. Hallo !

    Nicht schlecht die Anleitung. Ich verstehe nur noch nicht so richtig, wo die „offizielle“ Stromversorgung angeschlossen wird. Also die, die evtl. ausfallen könnte. Kommt die per Micro-USB an den Raspberry oder an den 2. USB von dem Hub ?
    Danke,
    Gruß
    der_chefkoch

    Antworten
  2. Hallo nochmal !
    Schönen Dank für die schnelle Antwort.
    Jetzt ist mir leider nur noch nicht klar, wo der Raspbery seinen Strom herbekommt… ?
    Und wie muss ich den USB Hub weiter anschließen ? O.K. 1. Buchse: Power Pack. 2. Buchse wie oben beschrieben an das Relais. Und das einzelne Kabel von dem USB Hub kommt an den Raspberry ? Sorry, aber ich würde die USV gerne nachbauen, hab auch alles hier, nur mit der Verkabelung tu ich mich etwas schwer…. Ansonsten: Lob, Lob, Lob für die Seite. Freue mich immer wieder über neue Beiträge/Tutorials…
    Weiter so !

    Danke,
    Gruß
    Der_Chefkoch

    Antworten
    • Die Powerbank / Akku Pack Das Akku Pack hat einen Input, worüber es läd und einen Output, worüber angeschlossene Geräte geladen werden. Der USB Hub hat ebenfalls einen Input und mehrere Outputs. Nun schließt du den USB Hub direkt an die Stromquelle an (über einen USB Adapter o.ä.), sodass dieser geladen wird. Weiterhin schließt du den Pi an die Powerbank an. Das Relais wird über den Hub verbunden. Sobald die Stromverbindung unterbricht, liefert der uSB Hub keinen Strom und das Relais schaltet. Die Powerbank wird auch nicht weiter geladen, hat aber noch restliche Kapazität, um den Pi weiter zu versorgen. Wichtig ist, dass die Powerbank gleichzeitig geladen und entladen werden kann.
      Ist es damit etwas verständlicher?

      Antworten
  3. Ich denke, ich habs so langsam. Kann aber erst am WE weiter machen. Werde Erfolge vermelden ! Danke !

    Antworten
  4. Auf der Suche nach einer unterbrechungsfreien Versorgung für den RPi bin ich hier gelandet und habe die Schaltung nur zufällig gesehen. Ich finde sie, ehrlich gesagt, ineffizient und zu aufwändig. Ein Relais einzig dafür abzustellen, dem RPi mitzuteilen dass irgendwo Spannung anliegt? Ich würde die Erkennung umbauen: RPi-GPIO als Input mit Pullup (erspart den 10k-Widerstand), npn-Transistor C an Pin 13 (GPIO), E an GND, Basis über 10k an die zu überwachenden 5V. Über die USB-Buchsen sind sie mit an Sicherheit grenzender Wahrscheinlichkeit sowieso mit GND verbunden.
    Das Batch nun so umbauen, dass es bei 0V die Füße stillhält und auf offenen Eingang reagiert.
    Sauberer wäre ein Optokoppler, C und E wie gehabt, LED mit 3-10k von 5V speisen. Das ist kleiner, kostet 1/10 und verbraucht 250 mW weniger Energie. Kleinvieh macht ja auch Mist…

    Antworten
    • hallo pfriemler.
      kannst du deine variante vielleicht mal ein bisschen genauer beschreiben?
      kenn mich da nich ganz so aus und bin mir über die bauteile auswahl nich ganz so schlüßig.
      ne bezeichnung von den bauteilen wäre gut 😉
      deine idee klingt ja gar nicht so schlecht.

      grüße

      Antworten
  5. Ich habe das Script mal probiert, habe aber das problem daß beim Start des Raspberry am gpio high Signal liegt und dadurch die automatische Anmeldung des Desktop nicht mehr funktioniert.

    Antworten
    • Sorry!
      Da beim probeweisen manuellen Starten die Meldung „Befehl amp nicht gefunden“ kam, habe ich das „amp;“ entfernt, daß war anscheinend mein Fehler.

      Antworten
  6. Hallo,

    vielen Dank für dieses toll geschriebene Tutorial 🙂

    Zuvor muss ich gleich sagen, dass ich mit Elektronik noch nicht so fit bin, also bitte nicht übel nehmen ^^
    Ich frage mich, wenn man schon den USB Hub als „Signalgeber“ für den Stromausfall nutzt, ob es dann nicht evtl. klüger wäre, anstatt ein Relais einen „3.3V – 5V TTL I2C Logic Level Converter“ (wie auf der Sensorseite beschrieben) zu benutzen?

    Ich würde mich über eine Antwort freuen ^^

    Danke,
    Ed

    Antworten
    • Nein, in der Variante wird der Shutdown nicht abgebrochen. Aber du kannst das Skript natürlich nach Belieben ändern (z.B. eine Funktion nach X Sekunden starten, die runter fährt. Innerhalb der Funktion kannst du nochmal prüfen).

      Antworten
  7. Moin, danke für den Artikel und die Idee.
    Puh, ich hab gerade sicher 15 Minuten davor gesessen und versucht nachzuvollziehen wie das funktionieren soll. Erst später ist mir das Licht aufgegangen, dass das Frizing-Verkabelungsbild nicht vollständig, bzw. imho sehr verwirrend ist. Es fehlt die Verkabelung der Regulären Stromversorgung. Dann hat man zwei Relaiskanäle und zwei USB-Buchsen. Der zweite Relaiskanal wird nicht gebraucht (warum ist er in dem Bild?) und über die zweite Buchse soll die reguläre Stromversorgung laufen. Sind nur Kleinigkeiten, aber in Summe verwirrend. Ich dachte erst der Pi wird über die GPIOs mit Stromversorgt, das hat mein Hirn total blockiert. xD Im Nachhinein macht es alles Sinn.

    Ein 100% vollständiges Verkabelungsbild wäre cool, da reicht auch Paint. 😉

    Nichtsdestotrotz dank nochmal.

    Ne andere Sache (ich kenne mich mit ssh-Skripten konkret kaum aus): Letzendlich wird mit dem Skript die ganze Zeit gepollt (aka busy waiting). Belastet das nicht ziemlich die CPU?
    Kann man das evtl. eventbasiert machen, zb über einen Interrupt?

    Antworten
  8. Noch was anderes, wie könnte man es einrichten, dass der Pi automatisch angeht, sowie der Strom wieder da ist?

    Antworten
    • Hallo,
      genau die Frage stelle ich mir auch. Ich komme zu dem Schluss dass es mit dieser Schaltung gar nicht geht.
      Wenn der Pi down ist kann er ja nicht mehr prüfen das der Strom wieder da ist. Wenn die Powerbank entsprechend stark ist das sie auch einen langen Stromausfall überbrücken kann ist das auch kein Problem.
      Alternativ könnte man den Pi extern über ein WakeOnLan Signal starten. Dieses müsste von einem entsprechend robustem Gerät aus gesendet werden, das so konfiguriert ist das es selber nach Stromausfall automatisch bootet und dann nach dem Start das Signal aussendet. Das könnte z.b. ein altes DSL Modem übernehmen auf das man Telnet Zugriff hat.

      Antworten
    • Ich hab mir da etwas überlegt:
      Ein Relais mit 230V-Spule. Über dieses Relais läuft die Stromversorgung vom Akku-Pack zum Raspberry. Das Relais hängt an der gleichen Steckdose, wie der Akku-Pack und zieht an, wenn 230 V anliegen.

      Ein weiteres Relais mit 5V-Spule. Über dieses Relais läuft ebenfalls parallel die Stromversorgung vom Akku-Pack zum Raspberry. Das Relais wird über einen GPIO gesteuert und zieht an, sobald der Raspberry gestartet wird (Aufruf eines entsprechenden Befehls beim Start).

      Jetzt ist der Raspberry vom Akku-Pack über beide Relais mit Strom versorgt. Fallen die 230 V aus, faällt das 230V-Relais ab, die bleibt Versorgung über das andere Relais. Wenn der Raspberry nach der eingestellten Zeit herunter gefahren wird, fällt das 5V-Relais auch ab und der Raspberry ist stromlos.

      Sobald die 230V wieder kommen, zieht das 230V-Relais an, der Raspberry wird mit Strom versorgt und startet. Das 5V-Relais zieht dann ebenfalls an (siehe oben).

      Ich habe es noch nicht ausprobiert, aber es sollte gehen.

      Die USB-Kabel muss man zerschneiden und über die Relais führen.

      Antworten
  9. Hallo Felix,

    welche Powerbank hast du dir gekauft? Hatte mir voreilig eine gekauft die sich nicht aufladen und gleichzeitig entladen lässt.

    Antworten
  10. Zum Thema „An/Aus-Schalten“ der RPI

    Auf der Platine kann man zwei Pins anlöten und diese dann mit einem Taster verbinden.
    Die Bezeichnung der Lötstellen lautet „RUN“.
    Das ist Praktisch der Resetknopf der Pi. Wenn sie aus ist und man drückt den Taster, dann schaltet sie an. Wenn sie sich aufhängt und man drückt den Taster startet sie neu.

    Bei der RPi2 sitzen die Lötstellen neben dem Display-Port
    Bei der RPi3 sitzen die Lötstellen hinter dem USB-Port am GPIO

    Grüße

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!