Hallo liebe Leserinnen und Leser!
Vor Kurzem habe ich ein neues Projekt gestartet: Einen DIY-Lichtwecker mit Hilfe eines Arduinos und eines Raspberry/Banana Pis. Dieses Projekt ist noch nicht vollständig abgeschlossen, technisch allerdings schon lauffähig, weshalb ich mich entschlossen habe, heute einen ersten Artikel darüber zu veröffentlichen. Weitere Artikel mit Bildern des fertigen Projekts folgen (hoffentlich) in Kürze.
Dieses Projekt wird im Tutorial-Stil verfasst, es werden also alle Schritte genau beschrieben. Auf Grund der Vielzahl an Komponentenvariationen (Arduinos, LEDs etc.) kann es zu kleineren Differenzen mit meinen Schaltungen oder dem Code kommen. Die meisten Probleme dabei sollten sich allerdings recht einfach durch Lesen von Tutorials auf der Arduino-Seite oder andere Recherche lösen lassen.
Kommen wir nun zum Projekt selbst.

 

1. Benötigte Komponenten

  • einen Arduino (z.B. Leonardo oder Pro Micro [wesentlich kleiner])
  • einen Raspberry oder Banana Pi mit Debian-Betriebssystem (Raspbian, Bananian, etc.)
  • ein 433 MHz Sender-/Empfänger-Set
  • mehrere helle LEDs + passende Widerstände (ich habe 5 LEDs verwendet)
  • Kabel, Schrumpfschläuche, Lötzinn, Lötkolben (optional könnt ihr natürlich ein Breadboard verwenden, für eine permanente Lösung ist allerdings ein Verlöten vorzuziehen)

 

2. Funktionsweise

Für die Funktionsweise habe ich mal ein kleines Diagramm erstellt:flow chart LichtweckerDer Raspberry/Banana Pi sendet also einen bestimmten Befehl über den an ihm angeschlossenen 433 MHz-Sender. Am Arduino befindet sich der 433 MHz-Receiver, der diesen Befehl empfängt und den der Arduino dann auswertet. Je nach Befehl sollen die LEDs langsam eingeschalten werden (fade), direkt eingeschalten werden oder ausgeschalten werden. Natürlich sind auch noch andere Szenarien möglich (auch in Kombination mit RGB-LEDs), aber ich möchte mich hier auf diese Grundfunktionen beschränken.

 

3. Verbinden der Hardware

Den Anschluss der 433 MHz-Sender an den Raspberry/Banana Pi habe ich hier im Blog ja schon skizziert, trotzdem hier noch einmal die Grafiken für den Anschluss der Sender:

Am Raspberry Pi:Raspberry Pi 433MHz-Transmitter

Am Banana Pi:Banana Pi 433MHz-Transmitter

Dieser Teil muss nicht unbedingt verlötet werden, hier tun es passende Jumper-Kabel und/oder ein Breadboard genauso.

Kommen wir zum neuen Teil: Der Anschluss des 433 MHz-Empfangsmoduls an den Arduino. Hierzu habe ich passende Grafiken für den Leonardo und den Pro Micro erstellt (inkl. einer LED für Testzwecke).

Arduino Leonardo:Lichtwecker Leonardo Steckplatine

Arduino Pro Micro:Lichtwecker Pro Micro SteckplatineAm Besten verlötet ihr die Teile erst einmal noch nicht, sondern steckt sie nur, um die Funktionsfähigkeit zu überprüfen (siehe nächster Schritt: Software). Letztendlich sollte der Aufbau mit allen LEDs und dem Empfänger am Arduino Pro Micro so aussehen:Lichtwecker Pro MicroIn zusammengelöteter Form sieht das bei mir wie auf folgenden Fotos aus:Arduino Pro Micro verlötetet 1

Arduino Pro Micro verlötetet 2


Leider hat sich mein eigentlich angedachtes „Gehäuse“ für den Lichtwecker (ein Windlichthalter mit Milchglas) als zu klein für den Arduino mit angeschlossenen Komponenten herausgestellt, sodass ich momentan noch auf der Suche nach einem passenderem Gehäuse bin. Fotos des fertigen Weckers kann ich daher zum aktuellen Zeitpunkt noch nicht zur Verfügung stellen.

Wer Tipps hat, kann mir diese gerne zukommen lassen, über Anregungen hierzu würde ich mich sehr freuen! :)


 

4.Benötigte Software-Grundlagen

4.1 Am Raspberry/Banana Pi

Voraussetzung für die folgenden Schritte ist, dass WiringPi auf eurem Raspberry oder Banana Pi funktionsfähig installiert ist. Wie das geht habe ich in diesem Artikel für den Raspberry Pi und hier

für den Banana Pi bereits beschrieben, sodass ich an dieser Stelle auf die verlinkten Artikel verweise.

Nun könnt ihr euch 433Utils herunterladen und installieren (Achtung: Git muss hierzu auf eurem Raspberry/Banana Pi installiert sein sudo apt-get install git-core ):

Das Tool, das wir hier verwenden, nennt sich „codesend“ und kann folgendermaßen installiert werden (hierfür müssen die Werzeuge zum Kompilieren natürlich auf dem Gerät installiert sein sudo apt-get install gcc g++ make ):

Falls es hier Probleme gibt, hilft es oft, den kompletten Pfad für WiringPi anzugeben.

Die Installation auf dem Raspberry/Banana Pi ist damit schon fertig und wir können auf dem Arduino weitermachen.

4.2 Am Arduino

Dazu benötigt ihr eine Bibliothek namens RCSwitch, welche ihr hier ) herunterladen könnt. Damit sie von der Arduino-IDE erkannt wird, muss sie extrahiert werden (wenn ihr euch das Archiv heruntergeladen habt) und in den Libraries-Ordner von Arduino auf eurem PC oder Mac gelegt werden. Für weitere Informationen hierzu verweise ich auf die entsprechende Arduino-Seite.

Ihr könnt nun einen Sketch entwerfen, der euch die später vom Raspberry/Banana Pi gesendeten Werte auf der Konsole anzeigt. Hierzu folgendes Beispiel:

4.3 Test der Kommunikation zwischen Raspberry/Banana Pi und Arduino

Um nun zu testen, ob eure Funkverbindung klappt, könnt ihr den obigen Sketch auf euren Arduino übertragen und Codes von eurem Raspberry/Banana Pi aus senden (übertragt erst den Sketch auf den Arduino und öffnet die serielle Konsole in der IDE, um etwas zu sehen):

Auf der Konsole des Arduinos sollte nun so etwas kommen:

Klappt das nicht, prüft nochmal die Verkabelung, schaut, ob der Code auf den Arduino übertragen werden konnte oder bringt eine Antenne an Sender und/oder Empfänger an. Erfahrungsgemäß funktioniert die Übertragung relativ problemlos.

 

5. Lichtwecker-Funktionalität

Bisher haben wir nur Codes vom Raspberry/Bananan Pi an den Arduino gesendet. Wir erweitern nun diesen Code, um die LED, welche in den Grafiken oben zu sehen ist, zu steuern:

Über sudo ./codesend 666 sollte die LED nun langsam eingeschaltet werden, über  sudo ./codesend 777 direkt auf hellster Stufe eingeschalten werden und über  sudo ./codesend 888ausgeschalten werden.

Klappt das, könnt ihr auch die restlichen LEDs an den Arduino anschließen und mit dem Löten beginnen. Hier nochmal die Grafik zum Aufbau:Lichtwecker Pro MicroDer Arduino-Sketch muss nun natürlich erweitert werden, damit alle LEDs synchron geschalten werden können:

Damit wurden alle gewünschten Funktionen des Lichtweckers implementiert und der Arduino kann nun vom Raspberry/Banana Pi aus geschalten werden.

 

6. Weitere Schaltmöglichkeiten vom Raspberry/Banana Pi

Bisher werden die LEDs am Arduino nur über die Konsole geschalten. Um die LEDs auch über ein Webinterface steuern zu können, habe ich in Python einen kleinen Socket-Server geschrieben, der als Daemon auf dem Raspberry/Banana Pi ausgeführt werden kann und mit dem sich analog zu den Funksteckdosen auch ein Webinterface umsetzen lässt.

Das Script für den Daemon ist relativ klein und simpel:

Speichert euch das Python-Script unter z.B. „socket_server_codesend.py“ auf dem Raspberry/Banana Pi und führt es via sudo python socket_server_codesend.py bzw. sudo python socket_server_codesend.py& (im Hintergrund) aus. Achtung! Der Pfad zu codesend muss eventuell angepasst werden! Das Script kann auch einfach erweitert werden, um z.B. auch die Funksteckdosen damit zu schalten.

Wir können uns nun mit diesem Socket-Server von einem anderen Gerät im Netzwerk aus verbinden, um Befehle über codesend abzusetzen und damit die LEDs am Arduino zu steuern. Hier mal ein schnelles Beispiel in Python (Socket-Client):

Damit würde z.B. der Status abgefragt werden.

Jetzt können wir uns noch ein kleines Webinterface basteln, über das wir die LEDs am Arduino ganz einfach einschalten, dimmen oder ausschalten können. Ich habe hier mal ein einfaches Interface erstellt, das ihr hier herunterladen könnt:

Download

Das Webinterface benötigt PHP sowie einen laufenden Daemon des Socket-Servers. Es kann im aktuellen Stadium die LEDs am Arduino nur an- und ausschalten und sieht so aus:Webinterface Arduino-Lichtwecker (1)Es handelt sich dabei um das abgewandelte Webinterface, das ich für meine Funksteckdosen bereits im Einsatz habe (siehe hier).


Das ist der aktuelle Stand des Projekts. Bitte beachtet, dass das Projekt in einem eher frühen Stadium ist und daher noch der eine oder andere Fehler enthalten sein kann. Wenn ihr einen findet, wäre ich über eine kurze Info sehr dankbar!

Was noch angedacht ist:

  • Erweiterung des Webinterfaces um eine Dimmfunktion (da muss ich mir noch überlegen, wie ich das am übersichtlichsten gestalte)
  • Möglichkeit, den Wecker über das Webinterface zu programmieren (momentan erfolgt die Programmierung noch über einen manuellen Eintrag in cron)
  • schönes Gehäuse, in dem der Arduino samt angeschlossender Komponenten untergebracht werden kann

Die entsprechenden Artikel zu den einzelnen Punkten werde ich in Zukunft noch nachreichen. Gerne dürft ihr euch aber auch an dem Projekt beteiligen, neue Ideen und/oder Lösungsvorschläge sind sehr willkommen!
Bei Fragen, Anregungen, Problemen usw. könnt ihr natürlich wie immer das Kommentarfeld unten benutzen.