Funksteckdose mit Atmel AVR steuern

In diesem Beitrag zeige ich euch wie ihr Funksteckdosen mit einem Atmel AVR Mikrocontroller steuert.

Inhalt

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.

433 MHz Sende/Empfangsmodulfunksteckdose type 0655

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

signalaufbau

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.

GeraeteAdressen

Jede Steckdose hat eine eigene Adresse hier mit Gerät 1 – 4 bezeichnet.

funktionsaufbau

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.

logic0and1

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.

schaltungsimple

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: , , , , , , , ,

Veröffentlicht am: 20. Oktober 2013
Geschrieben von: Nico

10 Kommentare zu “Funksteckdose mit Atmel AVR steuern

  1. Tim und Max

    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

  2. Brigitte

    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

  3. Norbert

    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

    1. Nico

      Super! Freut mich, dass ich dir helfen konnte.

  4. lepdev

    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!

    1. Nico

      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.

  5. Claus

    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 …

  6. Peter Schaller

    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

    1. Nico

      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

  7. Redlabs - Funksteckdose über Netzwerk steuern

    […] 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 […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.