usv_Steckplatine

GPIO, Projekte

Raspberry Pi – USV selber bauen (Unterbrechungsfreie Stromversorgung)

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

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).

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.



, , , , ,


16 Kommentare

  1. der_chefkoch sagt:

    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

  2. Der_Chefkoch sagt:

    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

    • Felix sagt:

      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?

  3. DER_CHEFKOCH sagt:

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

  4. Pfriemler sagt:

    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…

    • Christian sagt:

      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

  5. Gerd sagt:

    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.

    • Gerd sagt:

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

  6. Ed sagt:

    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

    • Felix sagt:

      Hi Ed,
      ja das sollte auch funktionieren. Wichtig ist ja nur, dass das Raspberry Pi erkennt, dass die Eingangsspannung weg ist.

  7. krodon sagt:

    Hallo,

    was macht das Script wenn der Strom wieder zurück kommt? Wird der shutdown dann abgebrochen?

    • Felix sagt:

      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).

  8. Hans sagt:

    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?

  9. Hans sagt:

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

    • Stratege-0815 sagt:

      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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

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