Ich möchte mein Funksteckdosenset (433Mhz) aus dem Baumarkt gerne mit dem Arduino (Nano) ansteuern. Zum Senden und Empfangen habe ich ein paar kleine günstige Module aus China bestellt (baugleich mit diesen hier: http://www.exp-tech.de/Shields/433MHz-RF-Link-Kit.html)
Die Codes der Fernbedienung habe ich mit einem kleinen Beispielprogramm welches bei der RCSwitch-Library dabei ist ausgelesen. Soweit so gut. Die Codes (+Protokollversion) habe ich notiert. Dann habe ich versucht die Codes mit der RCSwitch-Library zu senden um damit die Steckdose zu schalten. Leider reagiert die Steckdose aber gar nicht auf das simulierte RC Signal.
Zur Überprüfung habe ich mal einen zweiten Arduino programmiert, so dass er in einer Dauerschleife den Code zum ein- und ausschalten ständig sendet (mit 2 Sekunden Wartezeit dazwischen). Dieses Signal sehe ich auch wieder am ersten Arduino mit dem ich die Signale der Fernbedienung ausgelesen habe. Von der Ausgabe in der Logkonsole stimmen die beiden Signale überein, also gleicher Code und gleiches Protokoll), trotzdem schaltet die Steckdose nur um wenn die Fernbedienung das Signal sendet.
Hat jemand eine Idee woran das liegen könnte? Das Steckdosenset (3 Funksteckdosen + 1 Fernbedienung) ist von der Firma CMI. Die Empfänger sind nicht per Jumper konfigurierbar sondern haben eine feste Nummer.
Bin für jede Idee dankbar. Habe leider keinerlei Messintrumente außer ein Multimeter.
ich habe vor kurzem ein ähnliches Projekt durchgeführt.
Mein Problem war, dass die Funksteckdose nen 32-Bit Code mit Protokoll 3 erwartete. Standardmäßig sendet die RCSwitch Libary aber mit Protokoll 1.
Kannst Du evtl. einen Versuchsaufbau machen, mit dem Du den von Dir gesendetem Code nochmal mit nem Receiver-Modul abgreifst und dort die Codes und Protokolle nochmal vergleichst?
Wenn dann tatsächlich auch ein anderes Protokoll verwendet wird, kann Du das mit der setProtocol-Methode anpassen:
Hi
Vielleicht war das oben bisschen schlecht beschrieben, aber ich habe bereits sowohl Protokoll als auch Tastencode exakt so eingestellt wie es von der Fernbedienung kommt. Deshalb bin ich ja so verwirrt und kann mir nicht erklären wie die Funksteckdose das simulierte Signal von dem der Fernbedienung unterscheidet. Protokoll und Tastencode werden von dem empfangenden Arduino genau gleich angezeigt.
Ich habe auch schon versucht die Codes mehrfach zu wiederholen weil ich dachte, dass die Fernbedienung evtl. auch die Codes mehrfach sendet. Aber das hat die Steckdosen auch nicht zum Umschalten bewegt.
Kann es evtl. mit der Amplitude des Signals zusammenhängen? Die Fernbedienung hat so eine kleine 12 V Batterie und der sendende Arduino läuft mit 5 V. Kann ich mir aber nicht vorstellen. Sender und Empfänger liegen auch nur wenige Zentimeter voneinander entfernt auf dem Boden, so dass ich nicht von einem Reichweitenproblem ausgehe.
Jarny:
Sender und Empfänger liegen auch nur wenige Zentimeter voneinander entfernt auf dem Boden, so dass ich nicht von einem Reichweitenproblem ausgehe.
Billige Empfänger ("Super-Regenerativempfänger") benötigen einen Mindestabstand vom Sender, um überhaupt zu funktionieren. Wenn der Sender zu dicht am Empfänger liegt, funktionieren die Empfänger nicht, sondern geraten bei sehr starken Empfangsfeldstärken unter Umständen selbst ins Schwingen und werden selbst zu Sendern, die hochfrequente Signale abstrahlen.
Versuch's mal mit einem Meter Mindestabstand zwischen Sender und Empfänger!
Hmmm, das wars leider auch nicht :(. Hab alle Entfernungen bis zu 10m mal ausprobiert. Die Steckdose zeigt einfach keine Reaktion wenn der Arduino sendet. Die Fernbedienung schaltet die Dose übrigens bei allen Entfernungen also auch wenn man sie nur wenige mm von der Steckdose bedient.
Immer her mit weiteren Vorschlägen.
Gruß
Jarny
PS: Ich hab auch schon mal den kleinen 433Mhz-Sender getauscht weil ich mehrere von den Dingern hier liegen habe. Hat auch nichts gebracht. Ich dachte evtl. sendet einer auf einer Frequenz die etwas knapp ausserhalb der Toleranz liegt.
Jarny:
PS: Ich hab auch schon mal den kleinen 433Mhz-Sender getauscht weil ich mehrere von den Dingern hier liegen habe. Hat auch nichts gebracht. Ich dachte evtl. sendet einer auf einer Frequenz die etwas knapp ausserhalb der Toleranz liegt.
jurs:
Diese Sender-Kits gibt es für den amerikanischen/japanischen Markt auch in 315 MHz: http://www.exp-tech.de/Shields/315MHz-RF-Link-Kit.html
Hast Du mal auf den kleinen silbernen Baustein auf der Senderplatine draufgeschaut, ob da wirklich 433,92 draufsteht?
Ja, bei mir steht R433A drauf. Der Arduino der zur Überprüfung zum Empfang geschaltet ist kann das Signal ja auch korrekt decodieren. Also ich sehe sowohl das zyklische Testsignal vom sendenden Arduino als auch das Signal von der Fernbedienung in der Log-Konsole. Ich hab ja extra dafür einen zweiten Arduino aufgebaut um so ein Fehler auszuschließen.
Jarny:
Ja, bei mir steht R433A drauf. Der Arduino der zur Überprüfung zum Empfang geschaltet ist kann das Signal ja auch korrekt decodieren. Also ich sehe sowohl das zyklische Testsignal vom sendenden Arduino als auch das Signal von der Fernbedienung in der Log-Konsole. Ich hab ja extra dafür einen zweiten Arduino aufgebaut um so ein Fehler auszuschließen.
Wie sieht das Sendeprotokoll aus? Irgendwas in der Richtung "ein langer Startimpuls, gefolgt von einer Serie von Bit-Impulsen, bei denen die 1-Bit Impulse ungefähr doppelt so lang sind wie die 0-Bit Impulse?
Habe in letzter Zeit viel mit Funksteckdosen von Intertechno und der RC-Switch Library gespielt. Bei mir haben die Steckdosen mit dem ausgelesen Code der Fernbedienung zu Beginn auch nicht funktioniert. Ich hab es dann so gelöst, dass ich die Steckdosen mit dem Arduino angelernt habe. Weiß nicht ob das Anlernen auf einen neuen Code bei deinen Steckdosen aus m Baumarkt auch geht.
@Simon12
Leider ist das Anlernen mit dem Billigfunksteckdosenset bei mir nicht möglich. Die Teile sind fest eingestellt auf einen Code.
@jurs
Mit dem Testprogramm von dir bekomme ich keine Ausgabe auf der Konsole, weder von der Fernbedienung noch von dem emulierenden Arduino (Aber ich kann das Funksignal meines Temperatursensors für die Wetterstation endlich sehen XD. Aber das gehört hier nicht zum Thema). Das erwartete Protokoll scheint also gar nicht zu passen.
Die RCSwitch-Library gibt mir übrigens Protokollversion 1 aus. Ich habe von den Protokollen aber leider nicht viel Ahnung.
Gibts evtl. eine Möglichkeit bei der RCSwitch Library ein bisschen am Timing zu drehen? Vielleicht sind die emulierten Signale timingmäßig gerade so ausserhalb der Toleranz für die Steckdose.
Oder gibts irgendwo ein Sketch mit dem man die empfangenen Rohdaten ausgeben kann. Unabhängig von irgendwelchen Protokollen einfach nur die jeweiligen Impulslängen von den Hi/Low Impulsen. Vielleicht kann ich darüber dann ein Hinweis finden wo das Problem liegt.
Nachtrag
Ich habe gerade mal mit der Methode setPulseLength(int microseconds) aus der RCSwitch-Lib rumgespielt. Habe Werte von 100 bis 1000 getestet und der empfangende Arduino hat unabhängig von der eingestellten Pulslänge den Code und das Protokoll immer richtig erkannt. Das kommt mir schon etwas komisch vor. Sehr tolerant diese Library. Die Funksteckdosen sind wahrscheinlich nicht so tolerant bei den Pulselängen. Wenn ich nur wüsste in welcher Größenordnung deren Pulselänge so liegt?
Lösung
So, ich habs nun rausgefunden. Es lag tatsächlich an dem Parameter für die PulseLength.
Vorhin in meinem ersten Testprogramm für die Pulselänge hatte ich noch einen kleinen (aber fatalen) Fehler: Habe die setProtocol-Methode nach der setPulsLength-Methode aufgerufen, so dass immer wieder die Standardpulselänge von 350 µs eingestellt war. Das sieht man nur wenn man sich den Source von der RCSwitch-Library anschaut.
Hatte jetzt mal in einer Schleife die Pulsezeit in 50µs-Schritten hochzählen lassen und mit 2 Sekündiger Pause umschalten lassen und siehe da, die Funksteckdose reagierte irgendwann endlich XD
Hab dann mal näher eingekreist und rausgefunden, dass die Teile bis zu einer Pulselänge von 250 µs arbeiten, bei längeren Pulsen reagieren die nicht mehr.
Also als Tipp für alle die ein ähnliches Problem haben: Benutzt die setPulseLength-Methode um unterschiedliche Pulselängen einzustellen (Achtung! Unbedingt nach der setProtocol-Methode aufrufen, sonst wird der Wert überschrieben). Meine Steckdosen haben bei einer Publslänge von 50µs bis 250µs reagiert. Alles darüber funktioniert nicht bei meinen Steckdosen.
ist zwar schon älter der Post, trotzdem wollte ich dir sagen dass dein letzter Tipp goldrichtig war.
Hatte die Pulslänge vor dem Protokol im Sketch und keine Reaktion der Funksteckdosen.
Nachdem ich die Pulslänge nach dem Protokol plaziert habe funktioniert alles ohne Probleme.
Eigentlich hätte ich mir erwartet dass der Beispiel Sketch für's Senden der bei der Bibliothek(RCSwitch) mitgeliefert wird korrekt arbeitet, so kann man sich täuschen.
Man hat schon Mal munkeln gehört, daß es mehr als einen Hersteller und mehr als eine Art Funksteckdosen geben mag.
Ob Da was dran ist?
Wahrscheinlich, sonst würde ja das Beispiel der Bibliothek funktionieren ... seltsam.
Du darfst davon ausgehen, daß der Macher der Bibliothek durchaus ein oder zwei Stunden an Seinen Funksteckdosen rum'gespielt' hat, bevor Er sich überhaupt wagte daran zu denken, diese Kreation zu veröffentlichen.
... vll. aber wollte Er auch nur die Leute zum Narren halten und das Teil hat nie funktioniert ... wir werden Es nicht erfahren ...
Trotzdem schön zu Lesen, daß auch bei Dir ein Tip aus dem Forum zum Erfolg führte!