Logo

PiiP

Raspberry Pi in a Pocket

PiiP - Raspberry Pi in a Pocket

PiiP – Raspberry Pi für die Westentasche

Eigenschaften

PiiP („Pi in a Pocket“), der Raspberry Pi für die Westentasche, ist ein kreditkartengroßer, batteriebetriebener Linux-Computer auf Basis des Einplatinencomputers Raspberry Pi. Er verfügt über Schalter für die Umstellung von Batterie- auf Netzteilbetrieb und über einen Taster, mit dem dafür definierte Funktionen ausgelöst sowie ein Shutdown angestoßen werden können. Die grüne Status-LED wird für die Signalisierung diverser Betriebszustände genutzt. Optional kann man via WLAN auf einen Webserver zugreifen, eine einfache Web-App zeigt dann einen Betriebsstundenzähler und diverse Buttons – darunter einen für den Shutdown. Auch der administrative Zugang mit SSH erfolgt über WLAN.

PiiP - Raspberry Pi in a Pocket

Akku, Zusatzplatine mit Schaltern, Taster und Spannungswandler (oben links)

Anwendung

Aufgrund der geringen Akkulaufzeit von wenigen Stunden ist dieser Computer für ernsthafte Anwendungen freilich weniger geeignet – ich betrachte ihn auch eher als Machbarkeitsstudie. Vorrangiges Entwicklungsziel war, die Außenmaße des Raspberry Pi (Kreditkarte) einzuhalten und insbesondere mit der Bauhöhe einschließlich Akku die Höhe des GPIO-Pfostensteckers nicht zu überschreiten. Nach Demontage der nicht benötigten Audio- und Videobuchsen (s. u.) ist das Resultat damit sogar flacher als der urprüngliche Raspberry Pi.

PiiP - Raspberry Pi in a Pocket

Der gesamte Aufbau ist nicht höher als der GPIO-Pfostenstecker

Allerdings spiele ich mit dem Gedanken, das Platinchen gelegentlich mit Rädern, kleinen Motörchen und Sensoren auszustatten und damit ein Braitenberg-Vehikel zu realisieren; die eingeschränkte Batterielaufzeit wäre für ein solches Vorhaben von untergeordneter Bedeutung.

Stromversorgung

Für die Stromversorgung wollte ich die sehr flachen Lithium-Ionen-Akkus vom Typ „NB-4L“ verwenden, die ich von einer defekten Digitalkamera übrig hatte. Diese Akkus liefern eine Spannung von 3,7 Volt; normalerweise wird der Raspberry Pi über den Mikro-USB-Anschluss mit 5 Volt aus einem Steckernetzteil versorgt. In den Diskussionsforen zum Thema Batteriebetrieb des Raspberry Pi findet man Vorschläge, sich auf eine Einspeisung von 3,3 Volt zu beschränken und auf 5 Volt zu verzichten. Auch werden verschiedene Varianten für den Ort der Einspeisung diskutiert. Ich habe mich entschieden, 5 Volt bereitzustellen. Der von mir verwendete Gleichspannungswandler (S7V8F5 von Pololu) ist ein Step-Up/Step-Down-Typ und kann aus Eingangsspannungen zwischen 2,7 und 11,8 Volt eine Ausgangsspannung von 5 Volt erzeugen. Bei der Wahl der Akkus hat man so größtmögliche Freiheit.

Einspeisung der 5 Volt aus dem Spannungswandler

Als Einspeisungspunkte wählte ich die 5 Volt- und Masse-Anschlüsse der USB-Buchse. Diese sind über hinreichend große Lötaugen auf den Platine (s. o.) zugänglich, sodass ich ein kurzes Stück Litze mit integrierter Steckbuchse anlöten konnte. Ich umgehe damit zwar die unmittelbar hinter dem „offiziellen“ 5-Volt-Anschluss (der Mikro-USB-Buchse) eingebaute Polyfuse-Sicherung, erwarte dadurch aber keine Nachteile.

Akkulaufzeit

Mit den von mir verwendeten Lithium-Ionen-Akkus (3,7 Volt, 760 mAh) läuft der Raspberry Pi ohne WLAN knapp 3 Stunden, mit WLAN etwas mehr als 2 Stunden. NB-4L-Akkus mit vorgeblich doppelter Kapazität (1400 mAh) erbrachten keine längere Laufzeit.

Tests mit AAA-Batterien oder einer 9-Volt-Blockbatterie stehen noch aus.

Schaltung

Schaltbild (B1 ist der Eingabe-Taster)

Um ohne Ausbau des Akkus von Batteriebetrieb auf Betrieb mit Steckernetzteil umschalten zu können, habe ich zwei Schiebeschalter vorgesehen. Mit dem einen (S1) trenne ich den Akku vom Eingang des Spannungswandlers, mit dem anderen (S2) dessen Ausgang von der 5-Volt-Schiene des Raspberry Pi. Dies bedeutet, dass bei Netzteilbetrieb der Schalter S2 offen sein muss, der Raspberry Pi wird durch Stecken bzw. Abziehen des Netzteils ein- bzw. ausgeschaltet. Bei Akkubetrieb bleibt der Schalter S2 dauerhaft geschlossen (ein Steckernetzteil darf dann nicht angeschlossen sein), und der Raspberry Pi wird mit Schalter S1 ein- und ausgeschaltet.

Somit ergeben sich folgende Schalterstellungen:

Betrieb mit Akku Betrieb mit Netzteil
S1S2SteckernetzteilRaspberry Pi
auseinnicht gestecktausgeschaltet
eineinnicht gesteckteingeschaltet
S1S2SteckernetzteilRaspberry Pi
ausausnicht gestecktausgeschaltet
ausausgesteckteingeschaltet

Eingabe-Taster

Als mir durch leidvolle Erfahrung klar wurde, dass auch beim Raspberry Pi auf einen Shutdown vor dem Ausschalten nicht verzichtet werden darf, habe ich einen zusätzlichen Taster (B1 im Schaltplan oben) eingebaut und mit Pin 26 des GPIO-Pfostensteckers (GPIO 7) verdrahtet. Dieser wird als Eingang konfiguriert und durch einen per Software aktivierbaren Pull-Up-Widerstand auf High gehalten; bei Betätigung des Tasters wird der Pin über einen 1-KΩ-Widerstand auf Masse gelegt.

Dieser Taster dient primär dem Auslösen eines Shutdown, er ist aber auch für das Ein- und Ausschalten etwaiger Anwendungen geeignet und ermöglicht so eine eingeschränkte Interaktion mit dem Gerät auch ohne WLAN-Zugang. Mit kurzer Betätigung kann eine Anwendung ein- und ausgeschaltet werden, hält man den Taster dagegen länger als zwei Sekunden gedrückt, wird das System heruntergefahren.

Status-LED

Die auf dem Raspberry Pi bereits vorhandene grüne Status-LED (die normalerweise bei Zugriffen auf die SD-Karte flackert) kann auf einfache Weise für eigene Zwecke genutzt werden. Hier dient sie dazu, unterschiedliche Betriebszustände anzuzeigen:

LED-AnzeigeBedeutung
1-Hertz-BlinkenKontakt zu WLAN-Router hergestellt
2-Hertz-BlinkenBetrieb als WLAN-Access-Point
an (alle 2 Sekunden kurz aus)Anwendung „ein“
aus (alle 2 Sekunden kurz an)Anwendung „aus“
10-Hertz-FlackernShutdown im Gange
10 mal BlinkenFertig zum Ausschalten

(Das zehnmalige Blinken nach dem Shutdown ist das normale Verhalten.)

Aufbau

Raspberry Pi Model A

Da weder ein LAN-Anschluss noch ein zweiter USB-Port benötigt werden, ist das abgespeckte Modell A des Raspberry Pi eine geeignete Basis. Es verbraucht weniger Strom als das Modell B, und an der Stelle, an der beim Modell B die LAN-Buchse sitzt, ist hier nicht nur Platz für eine kleine Zusatzplatine, sondern es gibt dort praktischerweise auch zwei Bohrlöcher für deren Befestigung.

Um die Außenmaße einhalten zu können, setze ich einen Micro-SD-Card-Adapter von Quilix ein. Dieser ragt – anders als andere Modelle – nur etwa einen halben Millimeter über die Platine hinaus.

Platz für den Akku

Um PLatz für den Akku zu schaffen, habe ich die nicht benötigten Audio- und Video-Buchsen „ausgebaut“. (Da es mir nicht gelang, sie auszulöten, habe ich sie mit roher Gewalt und einer Zange zertrümmert und die Anschlussbleche mit einem Seitenschneider abgekniffen. Ich bin aber sicher, das geht besser ;-)

Connectors after removal

nach dem „Ausbau“ der Audio- und Video-Buchsen ;-)

Nach Entfernung der Buchsen ist ausreichend Platz für typische Digitalkamera-Akkus. Die CPU wird dann zwar vom Akku überdeckt, thermische Probleme habe ich bisher aber nicht feststellen können. Würde man den DSI-Display-Konnektor entfernen, wäre es auch möglich, zwei AAA-Batterien im Halter oder eine 9-Volt-Blockbatterie unterzubringen – bei dann allerdings deutlich größerer Bauhöhe.

Akkukabel

Kabel ohne Akku Kabel mit Akku

Selbstbau-Akkukabel

Die Akkus haben an einer ihrer Stirnseiten elektrische Kontakte, die in der Kamera und im Ladegerät gegen Kontaktfedern gedrückt werden. Eine Möglichkeit, die Akkus im Raspberry Pi zu laden, habe ich nicht vorgesehen. Da ich das vorhandene Ladegerät weiternutzen wollte, kam nicht in Frage, Anschlusslitzen an diese Kontaktflächen zu löten. Ich habe daher ein abnehmbares Akkukabel selbst gebastelt. Dazu habe ich um einen Zahnstocher zwei Ösen aus Kupferdraht (Seele einer 220-Volt-Stegleitung) gebogen und Litzen mit integrierter Steckbuchse angelötet. Die Lötstellen habe ich mit Schrumpfschlauch fixiert. Ein zwischen den Ösen am Zahnstocher anliegendes Gummiband wird nun um den Akku gelegt und drückt über den Zahnstocher die Ösen gegen die Kontaktflächen. (Dass das Gummiband vor dem Anlöten der zweiten Litze eingelegt werden muss, habe ich beim ersten Versuch gemerkt, als es zu spät war ;-)

Zusatzplatine

Platine vorn Platine hinten

Zusatzplatine (rechts Lötseite, noch ohne Eingabe-Taster)

Den Spannungswandler und die beiden Schiebeschalter habe ich auf einer kleinen Zusatzplatine aufgebaut, die ich an der Stelle platziert habe, an der beim Modell B die LAN-Buchse sitzt. Nachdem ich auf der Unterseite des Platinchens zwei Schrauben angeklebt hatte, konnte ich diese dort dank der bereits vorhandenen Bohrlöcher auch festschrauben. Der Anschluss des Akkus und die Verbindung zur 5-Volt-Schiene des Raspberry Pi erfolgt mit Pfostensteckern. (Einen fünften Pfostenstecker, an dem die geschaltete Akkuspannung anliegt, habe ich für spätere Erweiterungen vorgesehen.)

Zusätzlich habe ich einen Mikro-Drucktaster unterhalb der Schiebeschalter angeklebt und auf der Unterseite des Raspberry Pi mit GPIO 7 (P1-Header Pin 26) verdrahtet. So bleibt der Pfostenstecker für Erweiterungen frei.

Rückseite: Verkabelung Eingabe-Taster, Micro-SD-Card-Adapter (rechts)

WLAN

Edimax wifi dongle

Edimax-Dongle

Der Zugang zum Raspberry Pi (SSH oder Web-Server) erfolgt via WLAN. Dazu wird der WLAN-Adapter im USB-Port des Raspberry Pi im Access-Point-Modus betrieben, sofern er sich nicht in Reichweite des heimatlichen WLAN-Routers befindet. Ein einfaches Skript prüft nach dem Booten mit Ping, ob der Router erreichbar ist. Ist dies nicht der Fall, wird der WLAN-Adapter in den Access-Point-Modus umkonfiguriert. Dazu wird die Datei /etc/network/interfaces modifiziert, anschließend werden der Access-Point-Daemon hostapd und der DHCP-Server udhcpd gestartet. Eine Anleitung für den Betrieb eines Access-Points auf dem Raspberry Pi gibt es bei elinux.org.

Der von mir wegen seiner Performance und seiner geringen Maße präferierte Edimax-WLAN-Adapter EW-7811Un eignet sich – entgegen landläufiger Meinung – bestens für den Betrieb als Access-Point, allerdings nur mit einem speziellen Ersatz für das hostapd-Binary, den Dave Conroy freundlicherweise zum Download anbietet.

Software

Ansteuerung der Status-LED

led0 – Ansteuerung der Status-LED

Die Steuerung der im Raspberry Pi bereits vorhandenen grünen Status-LED (die normalerweise beim Zugriff auf die SD-Karte flackert) kann einfach über das virtuelle sysfs-Filesystem erfolgen. Dazu schreibt man bestimmte Steuerworte in virtuelle Dateien im Verzeichnis /sys/class/leds/led0 – am simpelsten in der Shell mit „echo“ und Ausgabeumlenkung. Ggf. muss zuvor mit „modprobe“ ein Kernel-Modul geladen werden, um bestimmte LED-Anzeigefunktionen (wie Blinken oder den so genannten „Heartbeat“) bereitzustellen.

Das Bash-Skript „led0“ unterstützt die Funktionen „an“, „aus“, „Blinken“ mit variabler Frequenz und Pulsweite, sowie „Heartbeat“ – ein Rhythmus ähnlich dem eines schlagenden Herzens. Außerdem kann auf die normale Funktion (Anzeige der SD-Karten-Aktivität) wieder zurückgesetzt werden.

Das Skript ist als root auszuführen, beispielsweise mit sudo:

$ sudo /home/pi/io/led0 on

Die möglichen Aufrufoptionen werden angezeigt, wenn man das Skript ohne Argumente aufruft – oder mit „led0 --help“ ;-)

Eingabe-Taster

button.py – Abfrage des Eingabe-Tasters

Der Eingabe-Taster ist mit Pin 26 des Pfostensteckers (GPIO 7) verbunden und schaltet diesen bei Betätigung auf Masse, während ein per Software aktivierbarer Pull-Up-Widerstand den Pin bei offenem Taster auf High-Pegel hält. Das Python-Modul RPi.GPIO ist für die Ansteuerung der GPIO-Pins bestens geeignet, ab der Version 0.5.0a ist es auch in der Lage, Interrupts zu verarbeiten. Ich nutze dies hier, um den Taster nicht in einer Schleife permanent abfragen zu müssen, sondern erst bei Betätigung des Tasters und einen dadurch ausgelösten Interrupt die Funktion für die weitere Verarbeitung der Benutzereingabe anzuspringen.

Das Python-Skript „button.py“ definiert zunächst GPIO 7 als Input und aktiviert den internen Pull-Up-Widerstand. In der Hauptschleife wird dann ein Wartezustand eingeleitet, der erst durch einen Interrupt wieder beendet wird. Ausgelöst wird dieser Interrupt durch eine fallende Flanke an GPIO 7 (erzeugt durch Drücken des Tasters). Anschließend wird das Tastenprellen durch eine 0,2 Sekunden lange Pause überbrückt und geprüft, ob der Tasters nach mehr als 2 Sekunden noch immer gedrückt ist. Ist dies der Fall, wird mit dem Skript led0 (s. o.) ein Flackern der Status-LED erzeugt und danach ein Shutdown ausgelöst. Andernfalls wird die Variable „status“ umgeschaltet und ihr jeweiliger Wert (0 oder 1) durch ein entsprechendes LED-Signal angezeigt. An dieser Stelle könnte man nun eine beliebige Anwendung starten und stoppen. Danach geht das Skript wieder in den Schlafzustand über und wartet auf den nächsten Interrupt.

Das Skript wird nach dem Booten in /etc/rc.local als Daemon in den Hintergrund gestartet:

/home/pi/io/button.py <&- >/dev/null 2>&1 &

Liste der Komponenten

Komponente Produkt Hersteller Händler
Raspberry Pi Raspberry Pi Model A Raspberry Pi exp-tech
SD-Card-Adapter MicroSD Card Adapter Quilix ModMyPi
WLAN-Adapter Edimax EW-7811Un Edimax Amazon
Akku NB-4L – 3.7 Volt – 760 mAh Canon et. al. Amazon
Akku-Ladegerät Canon CB-2LVE Canon Amazon
Spannungswandler Pololu S7V8F5 Pololu exp-tech
Schiebeschalter Hartmann SX254L Hartmann Electronic Conrad
Drucktaster Namae JTP-1243 Namae Electronics Conrad
Anschlusslitzen Steckbuchse mit Litze Conrad Conrad
Gehäuse (optional) Clear Transparent Case SB-Component Amazon

Komponenten

Mögliche Verbesserungen

Die nachstehenden Verbesserungen halte ich für interessant und machbar, getestet habe ich sie aber nicht.

  • Andreas van der Locht schlägt vor, den Raspberry Pi ausschließlich über den Ausgang des Spannungswandlers mit Strom zu versorgen, und dessen Eingang über einen Umschalter wahlweise mit dem Akku oder mit dem Steckernetzteil zu verbinden. Damit könnte einer der beiden Schalter eingespart werden, und es wäre die Gefahr gebannt, dass versehentlich der Ausgang des Spannungswandlers durch S2 mit dem Ausgang des Steckernetzteils kurzgeschlossen wird. Mit einem zusätzlichen Kondensators am Eingang des Spannungswandlers könnte dann u. U. sogar im laufenden Betrieb zwischen Netzteil und Akku umgeschaltet werden. Allerdings müsste dann eine zweite Mikro-USB-Buchse untergebracht werden.

Known Issues

  • Da das Absinken der Akkuspannung nicht überwacht wird, erfolgt der Zusammenbruch der Ausgangsspannung des Spannungswandlers ohne jede Vorankündigung. Wenn nicht rechtzeitig ein Shutdown ausgelöst wird, kann das zu einer Beschädigung des Dateisystems (nur der Software – nicht der Hardware) führen.
  • Wenn ein Steckernetzteil angeschlossen und Schalter S2 geschlossen ist, sind die Ausgänge von Steckernetzteil und Spannungswandler kurzgeschlossen. Letzterer hat keine reverse-voltage protection, dieses Szenario ist daher unbedingt zu vermeiden.
  • Die von mir verwendeten Litzen mit integrierten Pfostenstecker-Steckbuchsen haben keinen Verpolungsgschutz, es ist daher darauf zu achten, dass sie richtig herum auf die Pfostenstecker aufgesteckt werden (siehe Fotos oben).
  • Aufgrund der Modifikationen am Raspberry Pi (Entfernung der Audio- und Video-Buchsen, Anlöten von Kabeln) verliert man natürlich jegliche Garantieansprüche.

© 2014 – Thomas Schochwww.retas.de

Valid HTML 4.01 Transitional