Licht per Raspberry PI steuern

tas2580  

Kennt ihr das Problem? Man liegt abends im Bett, schaut fern und dann fällt einem ein das man das Licht noch aus machen muss. Aufstehen ist irgendwie doof da man dann wieder hell wach ist und im dunklen zurück ins Bett muss. Schön wäre also wenn man das Licht per Computer/Smartphone schalten könnte. Dazu gibt es zwar fertige Lösungen aber damit funktioniert dann der normale Lichtschalter oft nicht mehr, außerdem macht selber bauen viel mehr Spaß. Da ich eh schon ein Raspberry PI zum steuern meiner Homeserver habe hab ich nach einer Lösung gesucht um mit dem Raspberry PI das Licht zu schalten.


Der Plan ist folgender: Das Rasberry PI schaltet per Webinterface ein Relais das per Wechselschaltung mit dem normalen Lichtschalter verbunden ist. So könnte man das Licht per Software schalten und der Lichtschalter funktioniert weiterhin ganz normal. Man muss dazu nur irgendwie ein 3 Poliges Kabel zum Lichtschalter legen.

Die Hardware

Da ich eine Lichtschalter/Steckdosen Kombination habe wurde die Steckdose dazu missbraucht um an den Lichtschalter zu kommen. Eine normale Schoko Steckdose ist zwar 3 Polig und würde somit ausreichen, hat aber den Nachteil das man sie umpolen muss und Strom auf der Erdung hätte, das fand ich dann doch etwas riskant, also habe ich die Schoko Steckdose durch eine XLR Dose ausgetauscht. Damit ist dann sicher gestellt das niemand aus versehn einen Staubsauger dort einsteckt. Der Elektriker würde jetzt zwar wahrscheinlich sagen das man keine 230V über eine XLR Verbindung laufen lassen sollte, aber der Querschnitt ist groß genug und wenn man eine Buchse in der Wand verwendet ist auch alles ausreichend isoliert. Alternativ könnte man auch irgend einen Stecker aus einem anderen Land, z.B. USA, verwenden.

Raspberry PI
Schaltplan einer Wechselschaltung

Das 3 Polige Kabel muss jetzt an ein Wechselrelais angeschlossen werden so das man eine Wechselschaltung mit dem Lichtschalter hat, siehe Bild links. Man kann das Licht nun also unabhängig mit dem Lichtschalter oder mit dem Relais ein und aus schalten. Ich habe als Relais ein 4 Kanal 5V Relais Module verwendet, so habe ich noch 3 Kanäle frei falls ich nochmal irgendwas anderes schalten möchte.


ACHTUNG! 230V können tödlich sein, man sollte also auf jeden fall vor dem Umbau die Sicherung raus machen oder einen Elektriker damit beauftragen!

Jetzt muss das Relais nur noch per GPIO an das Raspberry PI angeschlossen werden. Dazu benötigt man 3 Jumper Kabel, ich habe gleich mal ein 40er Set bestellt damit ich für zukünftige Basteleien etwas Reserve habe. Der Anschluss am Relais ist sehr einfach da dort alles sehr gut beschriftet ist. GND muss ganz nach rechts, VCC ganz nach links. Die Pins in der Mitte schalten die einzelnen Relais.

Raspberry PI
GPIO Pins am Raspberry PI

Am Raspberry PI muss VCC an Pin1 und GND an Pin9, je nach dem welches GPIO man verwenden möchte muss das 3. Kabel an den entrechenden GPIO Port. Ich verwende bei mir GPIO 8 was Pin3 ist.

Auf dem Bild ist das Lila Kabel VCC, das weise Kabel GND und das graue Kabel GPIO zum schalten des Relais. Wenn man die anderen 3 Relais auch schalten möchte muss man einfach weitere Kabel an die anderen GPIO Pins anschließen und mit dem Relais verbinden.

Die Hardware ist jetzt so weit betriebsbereit. Die Platine mit den Relais habe ich in eine Verteilerdose gesteckt damit sie gut isoliert ist.


Benötigte Hardware

Zusätzlich wird noch 3 Poliges Kabel mit 1,5 Querschnitt benötigt um das Relais mit dem XLR Stecker zu verbinden. Die Länge hängt also davon ab wie weit das Raspberry PI später vom Lichtschalter entfernt ist.

Die Software

Damit man die GPIO Ports per Software schalten kann benötigt man ein Programm das man auf https://projects.drogon.net/ bekommt. Am einfachsten installiert man es per Git, dazu muss man falls noch nicht eh schon erledigt Git installieren.

apt-get update
apt-get upgrade
apt-get install git-core

Jetzt kann man das Repository clonen und den Quellcode compilieren.

git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

Damit man ein GPIO schalten kann muss man es erst mal auf out umschalten, dazu benutzt man den Befehl gpio mode 8 out, die 8 gibt hier den Port an den man verwenden möchte. Mit gpio readall kann man sich den Status aller Ports anzeigen lassen. Port 8 sollte jetzt auf Mode out stehen. Mit gpio read 8 kann man den Status von Port 8 auslesen und mit gpio write 8 0 oder gpio write 8 1 lässt sich der Status von Port 8 ändern.

Ich habe ein kleines Shellscript geschrieben das den Status ausliest und zum jeweils anderen Status wechselt. Jedes mal wenn das Script aufgerufen wird ändert man also den Status des GPIO Ports und schaltet somit das Licht ein oder aus. Am Anfang des Scripts wird der Port jedes mal auf out geändert. Das ist zwar nur einmal nach jedem neustart des Systems nötig und könnte auch per init Script gemacht werden, so habe ich aber alles in einer Datei was das ganze etwas übersichtlicher macht. Schaden tut es auf jeden Fall nicht wenn man den Status jedes mal neu setzt.

#!/bin/bash

`gpio mode 8 out`

status=`gpio read 8`
if (( $status == 1 ))
then
	`gpio write 8 0`
else
	`gpio write 8 1`
fi

Ich habe bei mir noch eine Sprachausgabe dazu eingebaut, einfach weil es cooler ist ;)

Da man nicht weiß wie der Lichtschalter geschaltet ist kann man nicht ohne weiteres per Software bestimmen ob das Licht an oder aus ist. Um das zu ermöglichen müsste man entweder auf den Lichtschalter verzichten oder per Lichtsensor prüfen ob das Licht gerade an ist. Dazu müsste man allerdings noch das Lichtspektrum einschränken um Sonnenlicht vom Kunstlicht unterscheiden zu können. Für meine Zwecke reicht das aber erst mal so, ich rufe das Schellscript per PHP (shell_exec) auf und kann so per Webinterface den Status des Lichts ändern. So kann ich jetzt im Bett liegen bleiben und das Licht ganz einfach per Laptop oder Smartphone schalten.


Ähnliche Beiträge


Kommentare


Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha