Als ich vor ein paar Jahren eine RGB Lichterkette zum Aufkleben bestellt hatte war ich von Anfang an mit der Bedienung nicht zufrieden. Diese erfolgt über eine Infrarot Fernbedienung, deren Empfänger so empfindlich ist, dass die Lichterkette auf meine andere8n Fernbedienungen reagiert hat.
Meine Home Automation
Als ich das erste Mal mit Arduino in Berührung kam wurde ich sofort wieder gepackt von der Faszination der Elektronik (als Kind hatte ich mich immer dafür interessiert, allerdings hat sich das mit der Zeit gelegt). Ich kaufte mir allerlei Sensoren und Elemente und fing an wild zu experimentieren. Bereits damals überlegte ich mir, wie ich diese Entwicklungen in den täglichen Haushalt einbauen könnte. Als mir dann eine Freundin ihre Funkgesteuerten Steckdosen zeigte war die Idee geboren. Ich wollte die Lichter über diese Steckdosen nicht mit einer Fernbedienung steuern, sondern mit etwas das mittlerweile fast jeder Mensch besitzt: Das Smartphone. Da ich noch nie eine App programmiert hatte und das ganze Projekt ständig weiter entwickelt werden soll entschied ich mich für ein responsive Webinterface, welches mit einem Arduino kommuniziert, der die Funk Befehle für die Steckdose sendet. Um möglichst Platform unabhängig zu sein verwendete ich Python, welches die Befehle via USB an den Arduino sendet.
Technologien
Frontend: HTML5, AngularJS und Bootstrap
Backend: Python mit CherryPy
Interface: Arduino mit 433Mhz RF Link Kit
Der erste Wurf funktionierte äusserst zuverlässig und ich entschied mich das Ganze auszubauen. Geräte nur ein- und auszuschalten reichte mir nicht mehr. Zu dieser Zeit hatte ich bereits eine RGB Licherkette im Einsatz um dekoratives Licht zu spenden. Diese wird allerdings mit Infrarot angesteuert, was den Nachteil hat, dass ich nicht von einem Raum aus Ketten in anderen Räumen steuern kann.
Die erste Version war ein Infrarot Emulator, der 433Mhz Codes empfängt und das entsprechende Signal auf den Infrarot Port der Licherkette Steuerung schickt.
<Bild IR EMULATOR>
Dadurch konnte ich die Schaltung der Lichterkette fast vollkommen intakt lassen.
Einige Zeit später fragte mich meine Freundin, ob ich nicht eine hellere Lichterkette in eine Vase die sie gebastelt hat einbauen kann. Die vorhandene war eine mit 2 AA Batterien betriebene 3V Warm White Kette. Kein Problem dachte ich, allerdings wieso muss die Vase nur eine Farbe anzeigen können? Als ich die Schaltung im Geiste bereits zusammen setzte überlegte ich mir, dass ich die gleiche Schaltung auch für die RGB Lichterkette bauen könnte, also einmal eine 5V Variante und eine 12V Variante. Wenig später wurde daraus nur eine Schaltung, bei der mit einem Jumper die Eingangsspannung wahlweise via Spannungsregler 7805 oder direkt auf die Steuerelektronik geführt wird. Dadurch hatte ich ein Modell, das sowohl für 5V wie auch für 12V LEDs ausgelegt geschaffen.
Später habe ich dem Master einen 433 Mhz Empfänger hinzugefügt, um Daten von Sensoren aufzuzeichen.
Der Fade Mode
Attiny84 und 85 Programmer Shield
Da ich bei Projekten häufig den Attiny85 und Attiny84 verwende habe ich mir aus einem Arduino Prototype Shield einen Programmer gebastelt, der bei Bedarf einfach auf einen UNO gesteckt werden kann um so die Attiny’s zu programmieren.
Stückliste:
- 1x Arduino Prototype Shield v.5
- 28x Male Pin Header
- 1x Sockel DIP 8 Pin
- 1x Sockel DIP 14 Pin
- 2x Kondensator 66nF
- 1x Elko 220uF
- 2x Drucktaster
- 1x Led 5mm Grün
- 1x Led 5mm Rot
- 2x Widerstand 560 Ohm
Dies sind die Pin Belegungen der beiden Tiny’s:
Das Schaltbild sieht folgendermassen aus:
Die Einzelteile:
Zusammengebaut:
433Mhz Funkkerzen mit dem Arduino schalten
Viele kennen rc-switch die Arduino Library um Funksteckdosen via 433 Mhz zu schalten.
Nun habe ich kürzlich Kerzen gesehen, die auch mit einem Handsender der auf 433 Mhz sendet an- und ausgeschalten werden können. Leider habe ich nirgendwo eine Dokumentation gefunden, wo die Übertragung nachzulesen ist. Auf dem Handsender steht lediglich Typ QL3957 mit dem ich allerdings auch nicht viel anfangen konnte.
Also entschloss ich mich die Codes vom Handsender selber mit einem billigen 433Mhz Receiver und einem digitalen Speicheroszilloskop auszulesen und einen Arduino Sketch zu schreiben.
Für die an- und ausschalt Funktionen habe ich folgende Codesequenzen aufgezeichnet:


Es lässt sich eine Manchester Codierung vermuten und daraus ergibt sich folgende Bit Folge:
Ausschalt Sequenz: 010101010101010100110000 (24 Bit)
Einschalt Sequenz: 010101010101010100000011 (24 Bit)
Die Pulslängen betragen:
Langer Puls: 500 µS
Kurzer Puls: 200 µS
Am Anfang muss ein Low Signal, dass 4080 µS lang ist gesendet werden und am Schluss nochmals das Bit 0.
Mit folgendem Code lassen sich die Kerzen ein und ausschalten (der Code gewinnt sicher keinen Schönheitswettbewerb 🙂 )
#define longPulse 500 #define shortPulse 200 int senderPin = 10; char* CandleOn = "010101010101010100000011"; char* CandleOff = "010101010101010100110000"; void send0() { // Sends a 0 Bit // _ // Waveform: | |__ digitalWrite(senderPin, HIGH); delayMicroseconds(shortPulse); digitalWrite(senderPin, LOW); delayMicroseconds(longPulse); } void send1() { // Sends a 1 Bit // __ // Waveform: | |_ digitalWrite(senderPin, HIGH); delayMicroseconds(longPulse); digitalWrite(senderPin, LOW); delayMicroseconds(shortPulse); } void sendCandleCode(char* code) { for(int i=0;i<3;i++) // send the code 3 times { delayMicroseconds(4080); //wait a minimum of 4080 uS for(int i=0; i< 24;i++) { if(code[i] == '0') send0(); if(code[i] == '1') send1(); } send0(); } } void setup() { pinMode(senderPin, OUTPUT); } void loop() { sendCandleCode(CandleOn); delay(5000); sendCandleCode(CandleOff); delay(5000); }