Funkstrom: Unterschied zwischen den Versionen
Zeile 51: | Zeile 51: | ||
Um die Kosten dennoch gering zu halten, haben wir einen ATTiny2313 in DIP Bauform programmiert und direkt auf die Fernbedienung inklusive einem 78L05 Spannungswandler geklebt. Dieser bekommt die Daten nun von einem USB-to-serial Wandler und sendet sie dann über einen Timer-Interrupt an den ASK Sender ([https://github.com/krisha/funkstrom/tree/master/microcontroller le code]). | Um die Kosten dennoch gering zu halten, haben wir einen ATTiny2313 in DIP Bauform programmiert und direkt auf die Fernbedienung inklusive einem 78L05 Spannungswandler geklebt. Dieser bekommt die Daten nun von einem USB-to-serial Wandler und sendet sie dann über einen Timer-Interrupt an den ASK Sender ([https://github.com/krisha/funkstrom/tree/master/microcontroller le code]). | ||
+ | |||
+ | Ein Gehäuse für den Sender wird mit unserem 3D Drucker gedruckt | ||
{{clear}} | {{clear}} |
Version vom 7. Februar 2013, 12:38 Uhr
Funkstrom Status: stable | |
---|---|
Beschreibung | Funksteckdosen schaltbar über eine REST-API |
Autor: | schinken, krisha |
Version | 2 |
PayPal |
Schaltsteckdosen
Bei den Funksteckdosen handelt es sich um das ELRO AB440S :: Funk-Steckdosen, 3-er Set bei Reichelt. Die Fernbedienung hat eine Reichweite von ca. 15 Metern, und die Steckdosen können bis zu 1000 Watt schalten.
Die Fernbedienung kann durch wenige Schrauben auf der Rückseite auseinandergenommen werden. Zum Vorschein kommt eine Platine mit Kontakten, die durch die Gummitastenmatte geschalten wird.
Diese Schaltung enthält pro Funktion jeweils 3 Leiterbahnen: Masse, ON/OFF, Steckdose.
Auf der Platine ist ein HX2262-Chip verbaut. Das Äquivalent zu diesen Chip ist der PT2262 (Datenblatt).
Version 2
Für die zweite Version des Funkstrom-Projektes wird nur noch das Funkmodul der Platine verwendet. Der HX2262-Chip wird hierbei komplett ignoriert. Dadurch ist es möglich alle Kombinationen der Funksteckdosen mit einer Platine zu schalten. Die Übertragung besteht aus einem System- und Unit-Code sowie dem "Stop-Bit". Der Systemcode besteht aus 5 DIP-Schaltern welche mit 1-5 nummeriert sind, sowie dem Unitcode mit ebensovielen Schaltern von A-E.
Mit dem Systemcode sind uns 2^5 Kombinationen möglich. Da wir entgegen der normalen Funkfernbedienung auch den Unitcode kombinieren (z.B. A und E zusammen) können und nicht nur einen Schalter zum Kodieren der Steckdose verwenden müssen, sind hier auch 2^5 Kombinationen möglich.
Mit dem jetzigen Aufbau ist es möglich bis zu 1024 Steckdosen zu schalten.
technischer Hintergund
Die Frequenz zur Übertragung der Signale ist 433,92 MHz (ISM-Band). Als Modulation wird eine einfache Amplitudenumtastung mit On-Off-Keying verwendet. Eine Sequenz besteht aus 13 Codes, davon 10 für die Kodierung von System- und Unitcode sowie 2 Codes für die Schaltrichtung und 1 Code als Stopsignal. Es gibt 3 Arten von Codes. Die Sequenz muss mindestens 3x gesendet werden. Um eine gewisse Zuverlässigkeit zu erreichen, empfiehlt es sich die Sequenz wesentlich öfter zu senden. Die Übertragung eines Codes dauert 2,64ms. Weitere Details findet man bei avr.börke.de.
Versuchsaufbau
Arduino
Der erste Versuchsaufbau besteht aus einem Arduino Leonardo sowie 2 Drähten zur Funkfernbedienung. Der PIN2 des Arduinos wurde mit der Signaleingangsleitung des Funkmoduls verbunden. Der zweite Draht ist GND.
Im Normalbetrieb wird die Funkfernbedienung mit 3,3 Volt versorgt, durch unseren Leonardo aber auch ohne Probleme mit 5V. Die Platine wird mit einem 7,5 Volt Schaltnetzteil versorgt.
Der Code für den Versuchsaufbau befindet sich auf github.
seriell direkt
Um den Arduino einzusparen haben wir versucht den ASK Sender direkt an einem USB-to-serial Konverter zu betreiben. Das Problem dabei ist, dass UART high-aktiv ist. Dies lässt sich mit einer simplen Transistorschaltung invertieren. Allerdings kann man nicht ohne weiteres die Start- und Stop-Bits des seriellen Protokolls deaktivieren und die Pausen zwischen den Bytes sind nicht einstellbar. Daher scheidet diese Möglichkeit leider aus.
ATTiny2313
Um die Kosten dennoch gering zu halten, haben wir einen ATTiny2313 in DIP Bauform programmiert und direkt auf die Fernbedienung inklusive einem 78L05 Spannungswandler geklebt. Dieser bekommt die Daten nun von einem USB-to-serial Wandler und sendet sie dann über einen Timer-Interrupt an den ASK Sender (le code).
Ein Gehäuse für den Sender wird mit unserem 3D Drucker gedruckt
Version 1
Ansteuerung
Um eine Steckdose schalten zu können, muss der Chip zuerst wissen, ob es sich um eine Einschalt- oder Ausschaltoperation handelt. Hierzu muss ON (Pin 12) oder OFF (Pin 13) gegen Masse (Vss) geschalten werden.
Darauf folgendend muss A (Pin 6), B (Pin 7) oder C (Pin 8) gegen Masse geschalten werden, um die Steckdose zu schalten.
Schaltung
Da die Fernbedienung auf 12V, und der Prozessor (AtMega32) auf 5V läuft, werden die Pins über Transistoren zu Masse (Vss) geschalten. Hierzu wurde die Masse des AtMega32 und des HX2262 zusammengeführt.
Als Transistor wurde ein BC337-16 verwendet.
Die Transistorschaltung sieht wie folgt aus:
+------ HX2262 Pin _____ |/ AtMega ----[_____] -----| 4k7 |> \------ Vss
Momentaner Aufbau
Die Transistoren (BC337-16), welche zum schalten der Fernbedienung verwendet wurden, werden über das AVR-Net-IO angesteuert.
Dieser Aufbau soll später miniaturisiert werden. Hierzu soll ein kleinerer Prozessor mit mindestens 8 I/O-Pins, UART und 5V Spannungsversorgung verwendet werden.
Kommunikation
Die Ansteuerung des AVR-Net-IO wird über Netzwerk realisiert. Hierbei werden die vorgegebenen Steuerbefehle verwendet. Die IP-Adresse und Netzmaske muss zuvor über die serielle Verbindung konfiguriert werden.
Um die Steckdose "A" einzuschalten, werden folgende Befehle an den AVR gesendet:
SETPORT 1.1 // ON-Mode SETPORT 3.1 // Steckdose A
danach müssen die PINs wieder zurückgesetzt werden:
SETPORT 1.0 SETPORT 3.0
REST-API
Die REST-Api wird genauso wie beim Webrelais implementiert, mit dem Unterschied, das statt einem Parallel-Port ein Serieller-Port wie USB verwendet wird.
HTTP-Befehl | Pfad | Beschreibung |
---|---|---|
GET | / | Simples Webinterface zur Steuerung der Steckdosen |
POST | /power/[0-2]? | Steckdose einschalten |
GET | /power/[0-2]? | Status des Steckdose abfragen |
DELETE | /power/[0-2]? | Steckdose ausschalten |
Wird keine Zahl übergeben, sind alle Steckdosen von der Aktion betroffen