Transistor: Simpler Schalter mit Raspberry Pi GPIO

Heute zeige ich als kleines Projekt, wie man mit dem Raspberry Pi, einem Transistor und etwas Kabeln den An / Aus Taster eines PCs ersetzen kann. Somit wäre es möglich, nicht Wake On LAN fähige Geräte trotzdem übers Netzwerk zu starten.

Natürlich kann die Schaltung auch für alles andere genutzt werden, wo ein Stromkreis geschlossen werden soll (für Spannungen >5V sollte ein Relais verwendet werden). Außerdem will ich denen, die mir auf Twitter folgen Entwarnung geben: Nein, was ich da gebaut habe war kein Doomsday Device ;)

Da ich hier nicht sonderlich viele Bauelemente herumliegen habe, denke ich mir aktuell sehr simple Experimente aus. Trotzdem ist es beeindruckend, was mit dem RasPi, ein paar Kabeln, einem Transistor und etwas Zeit machbar ist.

Material

In meinem Versuchsaufbau hatte ich folgende Dinge:

Mainboard, Netzteil, Lüfter, AN/AUS Taster von einem Gehäuse, IDE Kabel, BC327-16 Transistor, Lötkolben, Lötzinn, Isolierband und natürlich den Raspberry Pi.

Natürlich kann auch jedes andere Gerät auseinandergenommen werden um den Transistor als einfachen Schalter zu nutzen, da ich hier relativ viel an alter PC-Hardware habe, hatte ich mich für einen PC-Einschalter entschieden.

Bevor wir wild drauf los löten, sollten wir uns aber erst einmal mit Transistoren beschäftigen:

Transistoren

BC327-16

BC327 – Links: Collector, Mitte: Basis, Rechts: Emitter

Ein Transistor kann man sich am besten als kleinen Schalter vorstellen. Es gibt die zwei Pole, Emitter und Collector genannt, und ein „Signal“-Pin, die Basis. Je nachdem, was für einen Transistor man hat, variiert die Polung von Emitter/Collector. Ich hatte aktuell nur einen PNP-Transistor (BC327-16) hier, für PNP Transistoren gilt:

Ist die Spannung an der Basis negativer als an dem Emitter, fließt ein Strom zum Collector.

Umgekehrt gilt für NPN Transistoren:
Ist die Basis positiver als der Emitter, fließt ein Strom zum Emitter.

Hierbei gilt die technische Stromrichtung von Plus nach Minus. Generell kann man sich merken:

NPN = Strom fließt von Collector (+) zu Emitter (-), ist die Basis positiv, fließt Strom.
PNP = Strom fließt von Emitter (+) zu Collector (-), ist die Basis negativ, fließt Strom.

Die wichtigen Kenndaten stehen für jeden Transistor übrigens im Web bereit, einfach die Modellnummer googeln. Beispiel: Datenblatt für den B327-16 Transistor

Schaltkreis

Es geht darum, den Stromkreis zwischen Plus und Minus der beiden Power-Switch Pins zu schließen. An Plus liegen +3,3V an, an Minus 0V (GND). Beim PNP Transistor ist der Emitter positiv, also liegen am Emitter 3,3V an, am Collector 0V.

Schaltplan für den Gebrauch als Schalter

Schaltplan: +3,3V und GND vom Power-Switch an Emitter bzw. Collector, GPIO_25 an den Raspberry Pi

Ist die Basis nun negativer als der Emitter mit 3,3V, fließt der Strom. Die Basis wird natürlich durch einen GPIO am Raspberry Pi gesteuert – das bedeutet: ist der GPIO eingeschaltet (+3,3V), fließt kein Strom durch den Transistor (Schalter offen), zwischen Emitter und Basis liegt die Spannungsdifferenz bei 0V. Bei Emitter und Collector liegt eine messbare Spannungsdifferenz (Potentialdifferenz) von 3,3V vor.

Ist der GPIO ausgeschaltet, ist die Basis auf 0V und damit negativ gegenüber den 3,3V des Emitters. Die Differenz zwischen Basis und Emitter liegt also bei -3,3V, der Strom fließt. Die Spannungsdifferenz zwischen Emitter und Collector beträgt (ca.) 0V (Schalter geschlossen).

Durchführung

Der Aufbau ist relativ simpel, jedoch gilt wie immer beim Umgang mit Hardware:

Unsachgemäße Behandlung können irreparable Schäden verursachen!

Mit etwas Fingerspitzengefühl und Isolierband sollte das aber kein Problem sein.

Zunächst müssen wir das Plus vom Power-Switch an den Emitter des Transistors Löten, das Minus an den Collector, einen GPIO Pin vom Raspberry Pi an die Basis. Ich habe dazu das Kabel vom Gehäuseschalter und ein IDE-Kabel genutzt. Der Power-Taster wird abgetrennt, die Kabel an die äußeren Pins des Transistors gelötet. Beim IDE-Kabel muss erst die richtige Ader für den entsprechenden Pin gefunden werden. Dann kann diese Ader an die Basis gelötet werden.

BC327-16 Verkabelung

Fertig verkabelt: Das weiße Kabel führt zum Plus des pwr_sw, die Ader vom IDE-Kabel geht an GPIO_25 am RasPi, Schwarz geht zu 0V

Unbedingt auf die Polung achten! Bevor etwas angeschlossen wird, sollte zunächst immer mit einem Multimeter die Spannung und Polarität geprüft werden. Die Arbeit ist nach diesem Schritt schon abgeschlossen, im nächsten Schritt wird alles verbunden und getestet

Ergebnis

Da hier ein PNP-Transistor genutzt wird, sollte zunächst der Raspberry Pi hochgefahren und der GPIO Pin eingeschaltet werden, so fließt beim Anschließen noch kein Strom von Emitter zu Collector. Siehe dazu den Code-Abschnitt unten.

Ich habe den GPIO 25 an die Basis angeschlossen, zu Testzwecken habe ich ein altes Mainboard genommen und einen Lüfter als CPU_FAN angeschlossen (als Indikator dafür, ob der PC an wäre). Natürlich muss ein Netzteil am Mainboard angeschlossen sein. Dann wird der Transistor an die Front-Panel Anschlüsse gesteckt – hier unbedingt in die Anleitung des Mainboards sehen! Auf PWR_SW+ liegen immer 3,3V (sofern das Netzteil angeschlossen ist), daher kann es bei falschem Verbinden zum Kurzschluss kommen!

Ist alles verkabelt, kann am Raspberry Pi der GPIO auf 0 gestellt werden. Der Pin sollte nur kurz 0V anliegen haben, sonst bleibt der „Schalter“ (sinnbildlich für den Transistor) dauerhaft geschlossen – die meisten Mainboards schalten sich nach 3-5 Sekunden dann wieder aus. Daher nur kurz auf 0V stellen, danach den Pin wieder einschalten. Der PC sollte nun starten, in diesem Fall dreht sich der CPU-Lüfter. Ausgeschaltet wird der „PC“, indem der GPIO Pin für ca. 5 Sekunden auf aus gestellt wird.

Der folgende Code wird einfach im Terminal auf dem Raspberry Pi ausgeführt. Er ist für PNP Transistoren, für NPN Transistoren müssen die GPIO-Werte (0 und 1) vertauscht werden.

#root werden, Verzeichnis wechseln
pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi: cd /sys/class/gpio

#GPIO Aktivieren
root@raspberrypi:/sys/class/gpio: echo "25" export
root@raspberrypi:/sys/class/gpio: echo "out" > gpio25/direction

#Für PNP Transistoren: gpio25 an schalten (Schalter offen)
root@raspberrypi:/sys/class/gpio: echo "1" > gpio25/value

#PNP: Schalter schließen
root@raspberrypi:/sys/class/gpio: echo "0" > gpio25/value
# 0,5 - 1sek warten, dann Schalter öffnen
root@raspberrypi:/sys/class/gpio: echo "1" > gpio25/value

#Zum Ausschalten des PCs Schalter schließen:
root@raspberrypi:/sys/class/gpio: echo "0" > gpio25/value
#Warten bis der PC aus ist, dann Schalter öffnen
root@raspberrypi:/sys/class/gpio: echo "1" > gpio25/value

Auswertung

Viel bleibt nicht auszuwerten – das Experiment klappt (bei mir). Dafür haben wir den Umgang mit Transistoren geübt, können nun PCs einschalten, LEDs extern mit Strom versorgen und trotzdem durch den GPIO steuern, uvm. Das Experiment kann natürlich auch mit einem NPN Transistor durchgeführt werden – bei diesem sind nur Polarität von Emitter und Kollektor vertauscht, die Basis sperrt den Stromfluss, wenn keine Spannung anliegt. Für den Anfang wäre es logischer, einen NPN Transistor zu wählen, ich hatte aber nur den PNP hier.

Wake on Lan

Natürlich kann man die Lösung auch dazu einsetzen, Wake On LAN für Geräte, die dies noch nicht unterstützen, zu nutzen. Dazu muss ein kleines Programm auf dem Raspberry Pi laufen, welches Anfragen übers Netzwerk annimmt und basierend darauf den GPIO-Pin ein- oder ausschaltet. Das ganze will ich in Python realisieren – jedoch muss auch ich erst einmal die Sprache lernen. Daher werde ich diesen Teil später nachholen.

Bitte sendet mir auch Feedback zu den Projekten, nutzt einfach die Kommentare oder wendet euch (privat) an damon@tacticalcode.de !

Viel Spaß beim Nachbauen,
Damon Dransfeld

Dieser Eintrag wurde veröffentlicht in RaspberryPi
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.

3 Kommentare

  1. Stefan Tommes
    Erstellt am 8. Januar 2013 um 15:02 | Permalink zum Kommentar

    Wir haben unsere Platine mit einem passenden Flachbandkabel verbunden (oder man steckt seine Komponenten einfach direkt in die Kabel-Slots). Ich glaube wir hatten von einem dieser deutschen Shops welche gekauft:

    Links entfernt

    etc..

    Frohes Basteln allen noch :-)

  2. Sebastian
    Erstellt am 8. Mai 2013 um 18:49 | Permalink zum Kommentar


    bei diesem sind nur Polarität von Emitter und Kollektor vertauscht, die Basis sperrt den Stromfluss, wenn keine Spannung anliegt.

    Das ist umgekehrt.

  3. jmr
    Erstellt am 16. Mai 2013 um 10:50 | Permalink zum Kommentar

    Ich habe mir 2010/2011 ein ganz ähnliches Projekt gebaut. Damals noch ohne Raspberry Pi – den gabs damals nur als Prototyp – dafür mit Arduino. Anstatt eines Transistors habe ich einen Optokoppler benutzt. Der Vorteil ist, dass alles potentialfrei sauber verbunden ist.

Ein Trackback

Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>