Wäre es nicht praktisch, eine LED Leiste bequem vom PC oder Smartphone ein- und auszuschalten? Besitzern eines Raspberry Pi ist dies mit etwas zusätzlicher Elektronik, die sich leicht selber zusammenbauen lässt, einfach möglich. Wie das funktioniert, soll hier umrissen werden.
Ein direktes Betreiben einer LED Leiste an den Anschlüssen des Raspberry Pi ist nicht möglich, da die Vielzahl der LEDs eine zu hohe Leistungsaufnahme haben, die die GPIO-Pins des Raspberry nicht liefern können. Abhilfe schafft hier die Verwendung eines Mosfets (besondere Form eines Transistors), mit der sich große Ströme über einen kleinen Strom (oder Spannung) schalten lassen.
Aber vorher bitte beachten: Sämtliche Bauvorschläge sind auf eigene Gefahr nachzubauen, ebenso erfolgt sämtliche Konfiguration des Raspberry Pi auf eigenes Risiko. Schaltungen und Skripte habe ich als funktionierend befunden, kann eine korrekte Funktionalität jedoch nicht garantieren. Außerdem sollen im Wesentlichen Denkanstöße geliefert werden. Um eine bequeme Funktionalität zu erreichen, sind zumindest softwareseitig deutlich umfangreichere Entwicklungen, als hier geliefert, notwendig.
Bevor es losgehen kann, hier eine Liste von Bauteilen, die man braucht:
Teileliste
- Raspberry Pi (mit installiertem Apache und PHP)
- LED Leiste und passendes Netzteil (hier: 12V DC bei ca. 1 A)
- MOSFET IRL3103 oder vergleichbares (persönlich bevorzuge ich hier das TO-220 Gehäuse)
- 10 kΩ-Widerstand
- Platine mit 1/10-Zoll Lochabstand
- Leitungen und ggf. Stecker, die zur LED-Leiste und ihrem Netzteil passen
- optional Lüsterklemmen
- Lötkolben und Lötzinn
Notwendige Software
Im Folgenden nehme ich an, dass der Raspberry mit einem Debian basierten Betriebssystem läuft, anderes mag auch funktionieren, muss man einfach selber ausprobieren.
Zum einfachen Ansteuern der GPIO-Pins des Raspberry bietet sich WiringPi an. Dies installiert man gemäß der auf der Webseite gegebenen Anleitung. Dann kann man zum Beispiel den GPIO-Pin 18 einfach mit folgenden Befehlen als aktiven Ausgang über die Shell aktivieren:
gpio -g mode 18 out gpio -g write 18 1 |
Pin 18 hat dann eine Spannung von 3,3 V. Und einfach wieder ausschalten:
gpio -g write 18 0 |
Die Hardware
Gemäß dem folgenden Schaltplan sollten die o.g. Bauteile nun auf der Platine verlötet werden. Von einem direkten Anlöten der Leitungen an die GPIOs des Raspberry ist natürlich abzuraten 😉 . Hier kann man am besten Steckverbindungen nehmen.
Die Pinbelegung der GPIOs kann man am besten hier nachschauen. GND ist in der Rev. 2 des Raspberry Pin-Nr. 6 und GPIO 18 ist Pin-Nr. 12. GND des Raspberry wird mit Masse des Netzteils verbunden und mit Source des Mosfets. GPIO 18 kommt an’s Gate. Die Kathode der LED Leiste wird mit dem Drain des Mosfets verbunden und die Anode direkt mit der Versorgungsspannung des Netzteils. Zwischen GPIO 18 und GND des Raspberry kommt dann noch ein 10k-Widerstand, der GPIO 18 im ausgeschalteten Zustand immer sauber auf Masse zieht.
Ist alles fertig, kann man einfach einen Testlauf mit den o.g. Shell-Befehlen starten.
Der Server
Um die LED Leiste nun aus der Ferne an und aus schalten zu können, bietet sich ein einfaches PHP-Skript an:
<?php $pin = 18; $status = trim(preg_replace('/\s+/', '', shell_exec("gpio -g read ". $pin))); if(!is_file('/tmp/gpio_active_'. $pin)) { shell_exec("gpio -g mode ". $pin ." out"); if($file = fopen('/tmp/gpio_active_'. $pin,'w')) fclose($file); } if($status) { shell_exec("gpio -g write ". $pin ." 0"); echo "Ausgeschaltet"; } else { shell_exec("gpio -g write ". $pin ." 1"); echo "Eingeschaltet"; } ?> |
Speichern Sie dies als z.B. toggle.php im Documentroot von Apache (i.d.R. unter /var/www) und rufen Sie es im Webbrowser auf: http://IPdesRaspberry/toggle.php . Dies stellt nur das einfachste Grundgerüst dar, welches bei Aufruf des Skripts die LED Leiste immer umschaltet.
Zeile 3 fragt auf Systemebene den Status des GPIO Pin 18 ab. Ist er „0“, liegt keine Spannung an, die Leiste ist ausgeschaltet. Ist er „1“, liegt Spannung an und die LEDs leuchten.
Zeile 5 prüft das Vorhandensein einer temporären Datei und verhindert im Erfolgsfall das erneute Definieren des Pin 18 als Ausgang. Pin 18 wird somit nur einmal nach jedem Bootvorgang als Ausgang definiert.
Die Zeilen 12 bis 19 schalten Pin 18 nun ab, wenn er zuvor eingeschaltet war, oder umgekehrt.
Zentrales Element ist hier immer das Kommandozeilentool „gpio“, das aus PHP heraus mit shell_exec() aufgerufen wird.
Ausgehend davon lässt sich nun ein mehr oder minder komplexes Userinterface aufbauen. Besonders wichtig ist jedoch eine Absicherung mittels eines Passworts, damit der Pin nicht von beliebigen Personen umgeschaltet werden kann.
Sonstiges
Zum Schluss kann das dann z.B. wie folgt aussehen:
[nggallery id=1]
Der GPIO-Pin 18 kann neben den beiden Zuständen An und Aus auch noch die sog. Pulsweitenmodulation. Das bedeutet, durch sehr schnelles An- und Ausschalten kann die effektive Leistung reguliert werden, oder anders: die LEDs wären dimmbar. Folgender Kommandos sind auf der Shell dafür notwendig:
gpio -g mode 18 pwm gpio -g pwm 18 500 |
Das letzte an gpio übergebene Argument (hier: 500) gibt an, dass der Port 500/1023 der maximalen Leistung liefern soll. Diese letzte Zahl muss also zwischen einschließlich 0 und 1023 liegen, das entspricht keiner, bis voller Leistung.
Die Verträglichkeit der Pulsweitenmodulation (PWM) für das Netzteil und die LEDs sei bitte vor Verwendung zu prüfen, da nicht jedes Netzteil und nicht jede LED mit PWM umgehen kann.
Bevor man nun den Pin mittels gpio -g write 18 1 wieder nur noch an- und ausschalten will, sollte man nicht das gpio -g mode 18 out vergessen.
Jetzt empfiehlt es sich, z.B. eine mobilfähige Webseite mit Passwortsicherung zu entwickeln, die im Hintergrund über die o.g. PHP-Funktionen den GPIO-Port schaltet. Denkbar ist beispielsweise auch ein PHP-Skrip, dass ein POST-Formular entgegennimmt, sodass der Pin auch über ein AutoIt-Skript vom PC mit einem Klick gesteuert werden kann, oder auch eine regelmäßige Standortbestimmung des Smartphones und automatische Abschaltung bei Verlassen der Wohnung (-> Tasker); ebenso lassen sich noch ganz andere eletrische Geräte schalten (im Rahmen der Leistungsfähigkeit des Mosfets; bitte bei hohen Spannungen und Strömem die Sicherheit beachten!) oder, oder, oder…
Ich hoffe, der Artikel konnte die praktische Umsetzung zum Nachbau ausreichend erklären und ein paar Denkanstöße für eigene Projekte liefern