Funksteckdose mit Atmel AVR steuern

In diesem Beitrag zeige ich euch wie ihr Funksteckdosen mit einem Atmel AVR Mikrocontroller steuert.
Inhalt
- Einführung Funksteckdose
- Aufbau des Steuersignals
- Schaltung
- Source Code in C
- Nachfolge Projekte: WLAN<>433MHz, LAN<>433MHz
Einführung Funksteckdose
Ich werde es euch an dem Beispiel meiner Funksteckdose erklären. Für andere Hersteller kann es zu Abweichungen bei der Ansteuerung kommen. Bei dem von mir verwendetem Funksteckdosen System handelt es sich um einen unbekannten Hersteller mit der Typenbezeichnung 0655.
Mein System arbeitet auf einer Funkfrequenz von 433 MHz. Also habe ich mir ein günstiges 433 MHz Sender/Empfänger Modul besorgt.
Jetzt habe ich die Möglichkeit das Sendesignal meiner Steckdosen Fernsteuerung abzufangen und auszuwerten. Der Aufbau des Sender Signals findest du unter dem Punkt „Aufbau des Steuersignals“. Nach dem das Signal relativ banal aufgebaut ist verwende ich einen Atmega 328P um das Signal nach zu bilden. Ihr könnt dafür aber auch jeden anderen Prozessor nehmen ein ATtiny würde auch gehen. Zur Ausgabe wird ein I/O Pin am AVR Mikrocontroller mit dem Daten(IN) Pin am Sendemodul verbunden.
Aufbau des Steuersignals
Das Steuersignal beginnt mit einem 25 Bit langem Sync Paket das aus 16 mal 1 Bit und 9 mal 0 Bits besteht. Danach folgt das Gerät das angesprochen werden soll. Die letzten 4 Bits teilen dem angesprochenem Gerät mit ob es Ein oder Ausgeschaltet werden soll.
Jede Steckdose hat eine eigene Adresse hier mit Gerät 1 – 4 bezeichnet.
Mit der Bitfolge 1010 in dem Funktionsteil wird dem Gerät mitgeteilt das es sich einschalten soll. Mit der Bitfolge 0110 wird das Gerät aufgefordert sich auszuschalten.
So viele 1 und 0 doch was bedeuten sie überhaupt. Um eine 0 bei diesem System auf 433 MHz zu übertragen musst du, wie im Bild zu erkennen, für 265us ein High und für 960us ein Low auf die Datenleitung des Senders legen. Dementsprechend für eine 1 für 800us ein High und für 400us ein Low. Auf diese Werte bin ich durch Auswerten der Fernsteuerung durch ein Oszilloskop gekommen.
Schaltung
Hier eine sehr vereinfachte Schaltung da der Aufbau wie zu erwarten sehr simple ist.
Source Code in C
/* * Funksteckdose.c * * Created: 18.10.2013 19:54:09 * Author: Nico Heß * * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * Nico Heß, www.redlabs.de wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return Nico Heß * ---------------------------------------------------------------------------- */ // DEFINES #define F_CPU 8000000 // 8 Mhz #define DATA_ON PORTC |= (1<<5) // PIN C 5 #define DATA_OFF PORTC &= ~(1<<5) // PIN C 5 // INCLUDES #include <avr/io.h> #include <util/delay.h> // FUNCTION DECLARATION void send_bit0(); void send_bit1(); void send_command(char data); void send_device_function(char data); void send_sync(); // FUNCTIONS int main(void) { DDRC = 0xFF; while(1) { // Gerät 1110 einschalten send_command(0b01010111); _delay_ms(5000); // Gerät 1110 ausschalten send_command(0b01100111); _delay_ms(5000); } } void send_command(char data) { for (int i = 0; i < 50; i++) { send_sync(); send_device_function(data); _delay_ms(10); } } void send_device_function(char data) { for(int i = 0; i < 8; i++) { if (data & (1 << i)) send_bit1(); else send_bit0(); } } void send_sync() { //16 hi for (int i = 0; i < 16; i++) { send_bit1(); } //9 low for (int i = 0; i < 9; i++) { send_bit0(); } } void send_bit1() { DATA_ON; _delay_us(860); DATA_OFF; _delay_us(380); } void send_bit0() { DATA_ON; _delay_us(310); DATA_OFF; _delay_us(930); }
Der Quellcode steht unter der Beerware Lizenz!
Tags: atmega, atmel, avr, funk, funksteckdose, mikrocontroller, powersocket, steckdose, type 0655
Veröffentlicht am: 20. Oktober 2013Geschrieben von: Nico
Hallo Nico,
wir wollten mit dem obergenannten Sender (MX-FS-03V), den dazugehörigen Empfänger ansteuern (MX-05V). Dazu haben wir 2 x Atmega32 (einen für die Funktion und einen zum Encodieren) auf dem RN-Control V1.4 Board und ein Steckbrett. Auf dem Steckbrett wollten wir ganz einfach über eine Taster eine LED auf der Empfängerseite ansteuern.
Leider kommen wir gerade überhaupt nicht weiter. Kannst du uns vielleicht dabei helfen?
Vielen Dank im Voraus.
Viele Grüße,
Max und Tim
Hallo Nico,
ich habe eine ziemliche Dummy-Frage. Mein Funkschalter für 4 Steckdosen ist kaputt gegangen. Eigentlich ist nur der Deckel des Batteriefachs zerbrochen, was aber nervt, weil ich die Batterien immer mit der Hand hineindrücken muss, damit der Schalter funktioniert. Außerdem fallen sie ständig raus. Auf der Suche nach einem neuen bzw. gebrauchten Funkschalter im Internet (denn die Steckdosen sind alt, noch von meinem Vater), habe ich hier ein Foto gefunden, dass meinem Funkschalter genau gleicht. Die Typenbezeichnung bei mir ist auch 0655, wie oben beschrieben. Ich finde im Netz dazu absolut nichts Kaufbares. Nun meine Frage: Wenn überhaupt ein Funkschalter solo angeboten wird, worauf muss ich dann achten, damit er mit meinen 4 Steckdosen kommunizieren kann? Ist die oben erwähnte Funkfrequenz von 433 MHz Merkmal genug? Ich möchte ungern alles neu kaufen, die Steckdosen sind ja völlig in Ordnung. Danke vorab für eine Antwort!
Gruß Brigitte
Vielen Dank für deine Arbeit. Sie hat mir sehr geholfen, diese Steckdosen über ein Brennenstuhl Brematic Gateway und PowerSwitch zum Laufen zu bekommen: https://forum.power-switch.eu/viewtopic.php?f=12&t=486&p=7293#p7292
Super! Freut mich, dass ich dir helfen konnte.
Hi,
ich habe ein Arduino uno mit Clock Speed 16 MHz und das funktioniert bei mir nicht.
Was macht Linie 34?
Danke für den Artikel!
Hi Lepdev,
sollte soweit eigentlich laufen. Linie 34 schaltet das Direction Register von PortBank C als Ausgang.
Weite Infos findest du im Manual von deinem Prozessor.
Danke für den Artikel! Habe es gerade geschafft meine Steckdosen über meine RasPi zu schalten.
Funktioniert die Schaltung bei dir auch so „wackelig“? Selbst mit Original-FB klappt das irgendwie oft nicht …
Hi, ich bin auf der Suche nach einer schlichten Anleitung wie man die Steckdosen dieses Typs kodiert, da ich meine Anleitung verlegt habe. Mit dem Quellcode kann ich leider nichts anfängen, da ich technisch wenig bewandert bin. Können Sie mit weiterhelfen? Vielen Dank im vorraus.
Peter Schaller
Hi Peter,
wenn du eine Steckdose neu kodieren möchtest musst du einfach den Knopf „Kodierung“ einmal drücken dann leuchtet die Led darüber auf. Jetzt wartet die Steckdose (ca. 30 Sekunden) auf einen Kanal den du ihr zuweisen möchtest. Dazu kannst du einfach eine der vier Kanäle (ob AN oder AUS ist egal) auf der Original Fernsteuerung drücken oder den Aufbau wie oben beschrieben verwenden. Wenn die Led kurz an und wieder aus geht ist der Kodiervorgang abgeschlossen.
Hoffe ich konnte dir Helfen!
Beste Grüße
Nico
[…] hier hab ich noch eine sinnvolle Erweiterung für das Funksteckdose mit Atmel AVR steuern Projekt. Mein Ziel? Funksteckdosen einfach über den Browser steuern. Damit ist eine Steuerung von […]