XBMC++
mit Einschaltknopf und Abschaltautomatik
Eigenschaften
Primär für das Betrachten von Fotos habe ich auf einem Raspberry Pi Model B das XBMC Media Center auf Basis OpenELEC installiert. Da das Gerät im Wohnzimmer neben dem Fernseher platziert werden sollte, habe ich mir für dieses Projekt ein besonders wohnzimmertaugliches Gehäuse gegönnt: das „Short Crust“.
Der Raspberry Pi verfügt bekanntlich nicht über einen Ein-/Ausschalter. Um zum Betrieb des Gerätes nicht immer den Stecker des Netzteils stecken zu müssen, wollte ich einen Einschaltknopf und eine Abschaltautomatik einbauen. Neben dem schicken Aussehen besteht ein weiterer Vorteil des gewählten Gehäuses darin, dass die Stromversorgung zum Raspberry Pi innerhalb des Gehäuses aufgetrennt werden kann, und dass es hinreichend Platz für eine kleine Zusatzplatine bietet, was meinen Plänen sehr entgegen kam.
Ein- und Ausschalten
Im „Short Crust“-Gehäuse wurde aus Designgründen der 5-Volt-Anschluss auf die Rückseite – neben die großen USB-Buchsen – verlegt. Von der dort eingebauten zusätzlichen Mikro-USB-Buchse führt im Gehäuseboden eine zweiadrige Litze zu der auf der gegenüberliegenden Seite liegenden Mikro-USB-Buchse des Raspberry Pi. Dieses Kabel habe ich aufgetrennt und eine kleine Platine mit einem Relais dazwischen geschaltet. Die Verbindung zwischen der Mikro-USB-Buchse im Gehäuse und der am Raspberry Pi kann nun durch das Relais hergestellt und wieder getrennt werden.
Einschaltknopf und Abschaltautomatik
Zum Einschalten wird ein Knopf (Taster) betätigt, der das Relais anziehen lässt und so den Raspberry Pi mit Spannung versorgt. Das Relais bleibt durch eine Art „Selbsthaltung“ in diesem Zustand, bis diese – nach dem Shutdown – automatisch gelöst wird. Die Stromversorgung wird damit unterbrochen und das Gerät ist ausgeschaltet.
Schaltung
Im ausgeschalteten Zustand ist der Kondensator entladen, der Transistor sperrt und das Relais ist stromlos. Die Verbindung zwischen dem Steckernetzteil an der Mikro-USB-Buchse im Gehäuse (im Bild links) und der Mikro-USB-Buchse im Raspberry Pi (rechts) ist unterbrochen.
Wird nun der Taster betätigt, wird der Kondensator schlagartig geladen und der Transistor erhält über den 47K-Widerstand Basisstrom. Er schaltet das Relais ein, das wiederum über den nun geschlossenen Relaiskontakt den Raspberry Pi mit Strom versorgt. Sobald der Raspberry Pi bootet, geht der TxD-Anschluss an der seriellen Schnittstelle (GPIO 14, Pin 8 am Pfostenstecker P1) auf 3,3 Volt. Über den 1K2-Widerstand hält er die Ladung des Kondensators aufrecht, so dass auch nach Loslassen des Tasters ein Basisstrom fließt und das Relais eingeschaltet bleibt. (Auf diese Weise ist hier die „Selbsthaltung“ realisiert.)
Nach einem Shutdown (und zwar bereits vor dem 10-maligen Blinken der grünen Status-LED) geht die Spannung an TxD wieder auf 0 Volt zurück und der Kondenstator beginnt, sich über den 47K-Widerstand zu entladen. Wenn der Basisstrom zu gering wird, sperrt der Transistor, das Relais fällt ab und das System ist ausgeschaltet. Die rote Power-LED erlischt so erst einige Sekunden, nachdem die grüne Status-LED aufgehört hat, zu blinken.
Bauelemente
Als Relais habe ich ein sehr kleines Printrelais gewählt, auf hinreichende Belastbarkeit der Kontakte (der Raspberry Pi zieht bis zu 800 mA) ist natürlich zu achten. Der Transistor ist ein Darlington-Transistor, der bereits bei sehr geringem Basisstrom das Relais schalten kann. Der Kondensator überbrückt das kurze Aussetzen der Spannung an TxD beim Booten und während des Shutdown. Die Diode parallel zum Relais ist die obligatorische Freilaufdiode, die Diode am TxD-Anschluss entkoppelt den GPIO-Pin von der 5-Volt-Spannung, die an dem Taster anliegt, wenn dieser geschlossen ist. Der 1M-Widerstand soll als Pull-Down-Widerstand die Basis des Transistors auf ein definiertes Potenzial legen, wenn der Taster und der TxD-Pin offen sind.
(Siehe auch: Mögliche Verbesserungen.)
Zusammenbau
Als Einschaltknopf habe ich einen Miniatur-Drucktaster gewählt und diesen in das abnehmbare Gehäuseteil eingeklebt, das die nicht benötigten Audio- und Videobuchsen verdeckt. Den Betätigungsstift des Tasters habe ich dazu passend gekürzt und durch eine 4 mm Bohrung gesteckt.
Die Schaltung habe ich auf einer Streifenrasterplatine aufgebaut, die in den hinteren Gehäuseteil über das Fach für die SD-Speicherkarte passt. Das Bild oben zeigt die Verkabelung: oben rechts über der Platine der zum Gehäuse gehörende Mikro-USB-Stecker für den Anschluss des Raspberry Pi, links der in das abnehmbare Gehäuseteil eingebaute Einschaltknopf und daneben die zum Gehäuse gehörende Mikro-USB-Buchse. Das kurze orange-farbene Kabel führt zum Pin 8 (TxD) des GPIO-Pfostensteckers auf dem Raspberry Pi.
Liste der Komponenten
Komponente | Produkt | Hersteller | Händler |
---|---|---|---|
Raspberry Pi | Raspberry Pi Model B | Raspberry Pi | exp-tech |
Kühlkörper | Raspberry Pi Kühler Set | CSK | Amazon |
Gehäuse | Short Crust | Wilkinson Projects | exp-tech |
HDMI-Kabel, gewinkelt | Delock 82951 | Delock | Amazon |
Drucktaster | Mini pushbutton T604 | Zippy Technology Corp. | Conrad |
Transistor | BC517 (Darlington) | diverse | Conrad |
Relais | FiC FRT5-DC05V | Forward Industrial Co. | Conrad |
WLAN-Adapter | Edimax EW-7811Un | Edimax | Amazon |
Mögliche Verbesserungen
Die nachstehenden Verbesserungen halte ich für interessant und machbar, getestet habe ich sie aber nicht.
- Mir wurde vorgeschlagen, einen Widerstand in Reihe mit dem Taster einzufügen, um zur Schonung seiner Kontakte den sehr hohen Strom zu begrenzen, der bei entladenem Kondensator kurzzeitig über sie fließt.
Known Issues
- Der hier vorgeschlagene Mechanismus für die An- und Abschaltung der Stromversorgung funktioniert nicht, wenn Speichermedien über einen externen USB-Hub angeschossen werden sollen.
- Die hier implementierte „Selbsthaltung“ des Relais beruht darauf, dass der (ungenutzte) TxD-Anschluss der seriellen Schnittstelle des Raspberry Pi auf 3,3 Volt liegt, wenn der Raspberry Pi „up“ ist. Ich habe das experimentell ermittelt (das haben im Übrigen auch andere schon herausgefunden). Ich weiß nicht, warum das so ist, und ich weiß nicht, ob das in späteren Releases so bleiben wird. Sollte sich das ändern, müsste eine Alternative gefunden werden.