433MHz und RFID Sniffer auf Arduino Basis

sniffer_1
Ich habe in diesem Projekt zwei „Sniffer“ auf Arduino-Basis in einem Gerät zusammengebaut:

  • einen Sniffer für 433MHz Funksteckdosen / Funkschalter Signale
  • einen Sniffer für RFID Tags

Wer nur eine der beiden Funktionen benötigt, kann einfach den 433MHz Empfänger oder das RFID Modul weglassen. Der Arduino merkt’s nicht und dem Code ist es auch egal.

Ziel des 433MHz Sniffers:

  • 433MHz Signale von Handsender & Wandsendern für Funksteckdosen und Unterputzfunkmodulen empfangen
  • den empfangenen Code anzeigen
  • falls möglich eine Kodierung für Elro AB440 Steckdosen (DIP Schalter) errechnen und die DIP-Schalter Einstellung anzeigen

Da die meisten Sender für lernfähige Empfänger keinen einstellbaren Code haben, ist der Code nicht bekannt. Er wurde werksseitig festgelegt (Beispiel: Elro AB600M). Wenn man diese Schaltcodes mit einer Heimautomatisierungslösung (z.B. auf Raspberry Pi Basis mit fhem) nutzen möchte, braucht man einen solchen Sniffer.
Weiterhin habe ich mit dem Sniffer festgestellt, dass diese werksseitig kodierten Sender Codes senden, die man auf einer Elro AB440 Funksteckdose einstellen kann. Dies muss nicht universell gelten, stimmt aber für die Sender, die mir bisher unter gekommen sind. Konkret kann man also die weit verbreiteten und günstigen Baumarkt Funksteckdosen mit 10-poligen DIP Schalter (Elro AB440 und baugleich) mit Sender von lernfähigen Komponenten koppeln.

Ziel des RFID Sniffers:

  • Einlesen von 125kHz RFID Tags (EM4100/4102)
  • Ausgabe des Facility- und Card-Codes

Ich nutze dies, um die RFID Tag Daten für die Kodierung des RFID-Codeschlosses an unserer Haustüre zu nutzen.

Verwendete Hardware Komponenten:

  • Arduino Pro Mini Clone (ca. 2,50€); es geht natürlich auch ein Nano o.ä.
  • RFID Empfänger RDM630 (ca. 6,50€)
  • 433MHz Empfänger MX-05V (ca. 1€)
  • 2×16 Zeichen LCD Display, HD44780 kompatibel (ca. 2,50€)
  • Aufputzdose aus dem Baumarkt als Gehäuse (ca. 4€)
  • 9V Batterie aus dem Supermarkt (ca. 1,60€)
  • 10kOhm Trimmer, 470Ohm Widerstand, Lochrasterplatine, Schalter, Clip für 9V Batterie aus der Restekiste

Gesamte Materialkosten somit: 18,10€

Schaltung:
Die Schaltung ist ganz einfach und an den im Netz verfügbaren Referenzeinbindungen orientiert.

Im Detail:

  • Der 433MHz Emfänger ist am D2 Pin des Arduino angeschlossen; die für das Auslesen des Signale verwendete RCSwitch Bibliothek fordert einen interruptfähigen Pin; somit kommen nur D2 und D3 in Frage.
  • Der RFID Leser wird an eine serielle Schnittstelle. Da nur Daten vom Empfänger an den Arduino gesendet werden, ist ein Pin ausreichend. Man könnte den RFID Leser an die normale serielle Schnittstelle des Arduino klemmen. Ich habe Pin D3 und die Softserial Bibliothek verwendet. Dies hat den Vorteil, dass man den Arduino weiterhin normal programmieren kann und über die serielle Schnittstelle auch Debug-Ausgaben bekommen kann.
  • Das HD44780 Display habe ich an die Pins 4,5,6,7 sowie 11 und 12 angeschlossen und die LiquidCrystal Bibliothek entsprechend konfiguriert. Weiterhin war bei meiner Display-Version ein Anschluss der Hintergrundbeleuchtung über den A und K Anschluss nötig. Ansonsten entspricht die Schaltung den üblichen Vorschlägen.

Der gesamte Schaltplan sieht so aus:
sniffer_schaltplan
Der Aufbau ist auf einer Lochrasterplatine erfolgt.

Für den Einbau in das Gehäuse habe ich ein paar Reste von Holzleisten im Heißkleber fixiert. Die Platine (auf den Fotos noch ohne RFID Empfänger) ist mit einer Schraube fixiert. Geht bestimmt schöner, tut aber seinen Zweck.
Die Antennenspule des RDM630 Moduls habe ich mit Heißkleber an der Wand des Gehäuses festgeklebt und die Stelle außen markiert. Das ca. 1,5mm starke Plastik behindert das Einlesen der RFID Tags nicht.

Die Software:
Der fertige Arduino Code ist hier zum Download verfügbar: rf433_rfid_sniffer_display
Der Code ist aufgrund der Kürze einfach als „Spaghetticode“ hintereinander geschreiben. In der loop() Routine wird zunächst der 433MHz Code und dann der RFID Code durchlaufen. Was auch immer empfangen wird, kommt zur Anzeige. Wird ein weiterer RFID Tag gescannt oder ein 433MHz Code empfangen, wird das Display überschrieben. Der Code sollte soweit selbsterklärend sein. Falls nicht, einfach fragen.

Das fertige Gerät sieht so aus. Das Display sieht in der Realität sehr klar aus. Das kommt auf den Fotos nicht gut rüber.
sniffer_1

sniffer_2

sniffer_3

sniffer_4

46 Gedanken zu „433MHz und RFID Sniffer auf Arduino Basis

  1. ST Beitragsautor

    Ich habe den Hinweis bekommen, dass im Schaltplan die Pins 1 & 2 am Display vertauscht sind. Da ist mir tatsächlich ein Fehler in den Schaltplan geflutscht. Also bitte Vss auf GND und Vdd auf +5V.
    Ich werde den Schaltplan korrigieren und hier vermerken, wenn das geschehen ist.

    Antworten
  2. Frank

    Ein tolles Projekt. Ist es vorgesehen, zusätzlich einen Leser für 13,56Mhz RFID zu integrieren? Oder kann man ein Lesegerät wie das RC522 einfach gegen das vorhandene austauschen?

    Antworten
    1. ST Beitragsautor

      Bisher habe ich das nicht vorgehabt, weil ich keine Mifare Anwendungen habe. Der RC522 hat wohl auch ein serielles Interface. Also sollte es elektisch gleich / sehr ähnlich gehen. Allerdings wirst Du den Code wohl etwas anpassen müssen. Auf einem Mifare RFID sind auch prinzipiell mehr Daten speicherbar. Da müßtest Du überlegen, wie Du das anzeigen willst.

      Antworten
  3. Hans Sauer

    Hallo,

    bei mir tut sich garnichts, im Display wird nur
    Sniffer for RF 433MHz & RFID – S. Thesen 01/2015
    angezeigt, sonst keine Reaktion auf Fernbedienungen und RFID Karten.

    Woran könnnte das liegen?

    Gruß Sauer

    Antworten
    1. ST Beitragsautor

      Schwierig zu sagen. Das Display hast Du korrekt angeschlossen. Der Code ist auf dem Arduino. Soviel ist sicher.
      Kommt auf der seriellen Konsole etwas raus? – Was hast Du für einen Arduino genommen?

      Gruss Stefan

      Antworten
      1. Hans Sauer

        Arduino Uno, da ich es nur einmalig brauche habe ich kein Display angeschlossen sonder habe auf den Seriellen Monitor gehofft.

        Gruß Hans

        Antworten
  4. ST

    Hallo Hans,

    der Code sollte eigentlich auch ohne Display klappen. Der Uno hat auch den selben Chip wie der Micro, den ich verwendet habe. Auf der seriellen Schnittstelle werden die Infos auch ausgegeben.
    Somit bin ich ob der Fehlermeldung „kommt gar nix“ etwas ratlos. Hast Du die Empfänger mit den Standard Democodes probiert? – Bist Du sicher, dass der Uno iO ist?

    Gruss Stefan

    Antworten
  5. Frank

    Hast Du die Möglichkeit, ein Foto von Deinem Aufbau zu machen und zu verlinken? Sind alle Massen zusammen gelegt? Hast Du mal gemessen, ob die Sensoren auch mit der passenden Spannung versorgt sind?

    Ich hatte das Problem, dass mein erster RFID Leser im Neuzustand schon defekt war. Erst, nachdem ich ihn ausgetauscht und das neue Gerät exakt gleich verkabelt habe, wurden auch RFID Codes angezeigt.

    Frank

    Antworten
  6. Ralf

    Hallo Stefan,
    danke für diese nette Anleitung.
    Bin leider weder Arduino IDE noch C Experte…
    Bekomme allerdings beim Compilieren Deines Beispielcodes mir nicht verständliche Fehlermeldungen.
    Zudem vermisse ich im Code die Hauptprogrammschleife (main() oder so ewas…) -Aber vllt. braucht man das ja für „sketches“ nicht?.

    Kannst Du mit den Fehlermeldungen etwas anfangen?
    Danke & Gruß,
    Ralf

    Arduino: 1.6.3 (Windows 7), Board: „Arduino Nano, ATmega328“
    Build options changed, rebuilding all
    Using library LiquidCrystal in folder: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal
    Using library RCSwitch in folder: C:\Program Files (x86)\Arduino\libraries\RCSwitch (legacy)
    Using library SoftwareSerial in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial

    rf433_rfid_sniffer_display.ino: In function ‚void setup()‘:
    rf433_rfid_sniffer_display.ino:24:6: error: redefinition of ‚void setup()‘
    sketch_oct26a.ino:1:6: error: ‚void setup()‘ previously defined here
    rf433_rfid_sniffer_display.ino: In function ‚void loop()‘:
    rf433_rfid_sniffer_display.ino:44:6: error: redefinition of ‚void loop()‘
    sketch_oct26a.ino:6:6: error: ‚void loop()‘ previously defined here
    Error compiling.

    Antworten
  7. Ralf

    O.K., O.K:, habe jetzt zumindest gefunden, dass es kein „main()“ geben muss, sondern offensichtlich setup() und loop() – das macht aber die Fehlermeldungen leider nicht verständlicher…
    Ideen?

    Danke & Sorry für die Verwirrung.
    Gruß,
    Ralf

    Antworten
  8. Ralf

    Und jetzt ist Schluss, gehe jetzt schlafen..

    Klaare Fall von DAU, sorry, alles ignorieren.
    Hatte ein zweites Fenster offen.
    Das Problem sitzt vor dem Bildschirm…
    Gruß,
    Ralf

    Antworten
    1. ST Beitragsautor

      🙂
      Erholsamen Schlaf. Den Effekt kennt wohl jeder der programmiert: Man sitzt davor und sieht es einfach nicht. Und wenn man es gefunden hat, fragt man sich wie man es nicht sehen konnte.

      Antworten
  9. Ralf

    Hallo lieber Stefan,

    ich bin’s schon wieder…
    Bin jetzt einen Riesen Schritt weiter.
    Habe ein Stück Software gefunden, dass PHP Seiten erzeugt und aus den generierten HTML Pages heraus über einen daemon die Codes versendet.
    Soweit, so prima.
    Dein Sniffer Code auf dem Arduino liess sich problemlos compilieren und hochladen. (VIELEN DANK!)
    Bedauerlicherweise allerdings wird das Display nicht angesteuert.
    Strom hat es (Hintergrundlicht ist an), es erscheint allerdings kein Text.
    Jetzt habe ich die Hoffnung (Verkabelung fünfmal geprüft), dass Dein Hinweis auf „LiquidCrystal Bibliothek entsprechend konfiguriert“ die Lösung des Rätsels sein könnte.
    Programm läuft, ich kann den Konsolenoutput im Seriellen Monitor sehen…
    Hast Du eine Idee?
    Und noch eine Frage: Ich habe mit Interesse Deinen Artikel über den Accesspoint auf dem Microcontroller gelesen…
    Könnte der dazu dienen, über WLAN mein Smartphone mit dem Pi zu verbinden, wenn ich unterwegs offroad bin und keinen echten AP habe?

    DANKE vielmals!
    Gruß,
    Ralf

    Antworten
    1. ST Beitragsautor

      Hallo Ralf,

      die Diagnose mit dem Display ist aus der Ferne schwer. Es klingt nach eine defekten Display. Hast Du das Display mit dem Tutorial auf arduino.cc getestet? – Klappt das?
      https://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

      Wegen der Frage mit dem Pi und dem Smartphone: Ich verstehe die Frage nicht wirklich. Der ESP8266 ist kein Router. Wenn Du unterwegs bist und einen Pi dabei hast (?), richte doch den Rechner als Virtuellen Access Point ein (Virtual Router o.ä.).

      Gruss Stefan

      Antworten
      1. Ralf

        Hallo Stefan,
        danke für die wie immer sehr schnelle Antwort…
        Das Display *könnte* kaputt sein, glaube ich aber nicht, da ich ein zweites ebenso erfolglos probiert habe.
        Aber Deiner Antwort entnehme ich, dass Du nichts an der LiquidCrystal.h etwas geändert hast (so nämlich hatte ich Deine Bemerkung „„LiquidCrystal Bibliothek entsprechend konfiguriert“ interpretiert.
        Das genannte Beispiel habe ich noch nicht ausprobiert, mache ich im Laufe der nächsten Woche und melde mich.

        Bezüglich des ESP8266 habe ich den Artikel „HTTP 1.1 Webserver für ESP8266 als Accesspoint“ gemeint.
        Wenn ich es richtig verstanden habe, dient dann der IC als Verbindungsstation.
        Ich möchte ja nur den RasPi über die WLAN Schnittstelle mit dem iPhone verwenden.
        Dafür scheint ein Accesspoint geeignet.
        (oder habe ich einen Denkfehler)
        Der Raspi soll in der Endausbaustufe mit einem Touchscreen in einem Koffer eingebaut werden, der als Sendezentrale für eine Funkzündanlage dient. Dies also auch gern mal auf weiter Wiese, also ohne WLAN Infrastruktur.
        Ich wollte ursprünglich den PI als Accesspoint einrichten. Nachdem ich darüber nachgelesen habe, muss ich dafür wohl komplett alle Network Bindings manuell anpassen und verliere dabei die Möglichkeit, dass der Pi selbst über WLAN einen anderen Accesspoint erreicht, also nicht mehr internetfähig ist.
        Virtueller Router muss ich mir angucken. Schmeiße ich mal Dr. Google an.
        Aber ich dachte, die Idee mit dem ESP8266 ist einfach und smart – wenn sie denn funktioniert.

        Danke für jede Idee.- und vor allem für eine so prompte, freundliche und kompetente Unterstützung.
        Gruß,
        Ralf

        Antworten
  10. Ralf

    Hallo Stefan,

    kurze Rückmeldung…
    Habe heute nochmals alle Verbindungen durchsehen und auch durchge“wackelt“.
    Offensichtlich hat da im Breadboard ein Stecker nicht richtig gesessen und keinen Kontakt gehabt – mit unverändertem Layout funktioniert nun alles tadellos.

    Habe jetzt auf einem Raspberry einen Webserver laufen, der mir über PHP dynamisch Webseiten anzeigt, mit denen ich beliebig viele Boxen schalten kann. Pro Box verbaue ich einen Arduino, einen Display für Funktionsprüfung und ein Achterrelaisbaustein, der entsprechend der Anforderung ein Relais oder bei Gruppenbefehl mehrere Relais schaltet.
    Habe noch eine externe Antenne für den Raspi und den Arduino spendiert und komme auf über 150 Meter ohne Sichtverbindung.
    Der Raspi bekommt ein 7´´ Touchscreen und wird in eine Art Funkfernsteuerungsgehäuse eingebaut, die Arduinos kommen in einen 30*22*10 Alukoffer, der neben den elektronischen Bauteilen Verlängerungskabel und Zünder enthält.
    Insgesamt also eine sehr schöne Lösung – die sich als Nebeneffekt des Webservers sogar über ein Smartphone fernbedienen lässt.
    Danke für Deine Ursprungsideen, die Information über den besseren Empfängerbaustein und vor allem Deine schnelle und unkomplizierte Direktunterstützung bei meinen komischen Fragen.
    Das Outdoorproblem (WLAN ohne heimische Routerbasis) versuche ich gerade, über einen zweiten RasPI zu lösen.

    Gruß,
    Ralf

    Antworten
  11. Ralf

    Hallo Stefan,

    ich brauche doch nochmals Deine Unterstützung.
    Habe jetzt alles zusammen auf eine Platine gelötet.
    Hat initial wunderbar und reproduzierbar funktioniert.
    Jetzt wollte ich mich an verschiedene Spannungen herantasten und habe mit 12V experimentiert.
    Auch das hat prima (initial) funktioniert.
    Dann habe ich mehrfach die Spannungen gewechselt (von 12V auf 9V dann auf 5V).
    Dann ging auf einmal keinerlei Anzeige mehr auf dem Display.
    Mehrfach Strom ab- und eingeschaltet.
    Dann am regelbaren Widerstand geschraubt. Da kam dann „Buchstabensalat“.
    Dann einmal Strom ab- und angesteckt, ging wieder perfekt.
    Dann wieder 12 V, seit dem geht nix mehr.
    Die erste Displayzeile zeigt Blöcke.
    Der Arduino funktioniert prima – die Relais werden korrekt geschaltet, Wenn ich den seriellen Monitor einschalte, wird alles korrekt ausgegeben.
    Jetzt habe ich mich den Vormittag über zu Tode gesucht und gelesen und bin genauso schlau wie vorher.
    Eine einzige Quelle beschreibt, dass im genutzten 4-Byte Modus die ungenutzten Datenpins auf Ground geschaltet werden sollten.
    Zwei Quellen behaupten, Strom „Noise“ zu vermeiden, indem alle Datenleitungen mit einem „PullUp“ Widerstand beschaltet werden sollen…
    Da das Problem leider nicht „reproduzierbar“ ist (momentan geht halt gar nix, aber vielleicht wieder beim nächsten Vollmond…), bin ich echt ratlos.
    Hast Du noch eine Idee?
    Was hältst Du von den o.a. Hinweisen?
    Wie groß müsste ein „PullUp Resistor“ sein?
    DANKE für jede Idee…
    Gruß,
    Ralf

    Antworten
    1. ST Beitragsautor

      Wenn Du die Schaltung wie beschrieben aufgebaut hast, wird das Display über den Festspannungsregler des Nano mit 5V versorgt.
      Zwei Möglichkeiten sehe ich:
      A) du hast das Display nicht an den 5V Pin des Arduino gehangen, sondern an Vin. Damit hat das Display die 12V abbekommen und das wohl nicht gemocht.
      B) Du hast das Display am 5V Pin angeschlossen. Aber die Verlustleistung ist für den Festspannungsregler des Nano zu gross geworden. Offenbar (hab es nicht nachgemessen) kann die Hintergrundbeleuchtung schon 80-100mA ziehen. Bei 7V Regeldifferenz kommen dann 700mW Verlustleistung zusammen. Das dürfte auf Dauer zuviel sein. Symptom: der Arduino geht nur noch, wenn man ihn auf dem 5V Pin direkt mit 5V versorgt.

      Gruss Stefan

      P. S. Pullup Widerstände sind nach meiner Erfahrung nicht nötig. Falls Du es ausprobieren willst, nimm zB 100k.

      Antworten
  12. Ralf

    Hallo Stefan,

    wie immer, eine gute Antwort, danke.

    Ich habe eben etwas gefunden und könnte mich so richtig mit dem Schädel an die Wand hauen …
    Ich habe – um bei HW Schäden nicht löten zu müssen – alle mehrpoligen Bauteile über eine Steckbrücke in den Schaltkreis eingebracht.
    Dafür aber bequemer- damit aber dämlicherweise fertige Breadboardstecker benutzt….
    Inclusive der wackeligen Verbindungen in den netten, rastermaßkompatiblen Buchsen und Steckern.

    Sorry .

    Deine Antwort auf meine „dumme“ (!) Frage ergibt für mich allerdings als Elektroniklaie eine sehr interessante Idee für ein weiteres Problem, dass ich mit den Schaltkreisen habe…
    („Verlustleistung ist für den Festspannungsregler „)
    Ich kann das Ganze hervorragend betreiben, wenn ich 5 oder 9 V anschließe.
    Sobald ich eine 12 V Versorgung anlege, bricht mit ab dem vierten Relais das Ganze zusammen.
    Das Display wird dunkel, der Arduino reagiert dann auch nicht oder nur gelegentlich auf Funkinput.
    Meine naive Erklärung war, dass (ich habe ungeregelten 12 V Input aus einem Auto-Notstart-Akkupack) der Arduino mit so hoher ungeregelter Spannung nicht korrekt umgehen kann und habe daher versucht, die 12 V auf 9 oder 5 herunter zu transformieren (versuchsweise erstmal mit Widerständen).

    Hat das Ganze eher mit dem von Dir erwähnten Festspannungsregler zu tun und es gibt eine ganz andere Lösung?

    Danke!

    (Was eigentlich trinkst Du gern und wo kann ich Dir was hinschicken ???
    PN diesbezüglich an meine Dir bekannt sein müssende EMail)

    Ralf

    Antworten
  13. ST

    Manchmal sind die trivialen Erklärungen die besten 🙂 – Ein Wackelkontakt.

    Das Relais-Problem könnte an einer Überlastung der Festspannungsreglers liegen. Es gibt da verschiedene Modelle. Die besseren Versionen schalten ab, wenn eine Temperaturschwelle überschritten wird. Auf den Arduinos ist ein kleiner Festspannungsregler. Der kann bei 12V gerade so etwas mehr, als den Arduino selbst „verarzten“. Das Datenblatt des Arduino Nano empfiehlt deshalb auch mehr als 12V nicht als Dauerspannung.
    Die Lösung wäre dann einen eigenen Festspannungsregler zu nehmen und einen Kühlkörper dranzuschrauben. Schau mal nach einem 78S05 (das S steht für 2A und den Abschaltschutz). Dazu nimmst Du einen Kühlkörper, der auf ein TO 220 Gehäuse passt. Die Schaltung um den 78S05 ist simpel und per google leicht zu finden. Der Arduino wird dann bei einem eigenen Festspannungsregler nicht mehr über Vin sondern über den 5V Pin versorgt (Vin bleibt offen).
    Eine Alternative wären sogenannte Step-Down Regler. Diese heizen die Leistung nicht weg, sondern Wandeln (über Wechselstrom und eine kleine Spule). Da gibt es für einen kleinen Euro auch Module bei den üblichen Elektronikversendern.

    Ansonsten sind meine Kommentare hier kostenlos (hoffentlich nicht umsonst); ich möchte nichts dafür und deshalb schalte ich auch keine Werbung. Dennoch bedanke ich mich für das Angebot. Wer Mail und Location sucht, kann ins Impressum schauen 🙂

    Gruss Stefan

    Antworten
  14. Martin

    Hallo!
    Wie bei Hans erscheint auch bei mir nichts 🙁
    Lediglich der Initialtext „Sniffer for RF 433MHz & RFID – S. Thesen 01/2015“

    Ich habe den Aufbau mit einem SainSmart UNO R3 gemacht und nutze Pin D2

    Als 433Mhz Empfänger nutze ich eine RF-5V 3715
    http://i.stack.imgur.com/4mYOy.jpg
    http://i.stack.imgur.com/eACWR.jpg
    Ich habe 5 von denen getestet – kann doch nicht sein das alle 5 defekt sind :-}
    Nutze ich Pin D3 (eigentlich für den RFID Leser) bekomme ich die RFID Ausgabe
    mit Sonderzeichen wenn ich den 433 Sender drücke – also kommt was via 433 an…

    FacilityCode = 0 CardCode = 0
    Full input from reader = À
    FacilityCode = 0 CardCode = 0
    Full input from reader = ÿÿÿÿä
    FacilityCode = 0 CardCode = 0
    Full input from reader = ÀÀÀÀ

    Was könnte ich testen um das richtig in Gang zu bekommen?
    Danke schon mal für ein Feedback!

    Gruss
    Martin

    Antworten
    1. ST Beitragsautor

      Hallo Martin,

      das Ganze klingt plausibel, wenn wir annehmen, dass Pin2 Deines Uno ggf von Vorexperimenten geschädigt ist. Der Uno (also der ATmega 328) unterstützt auf zwei Pins Interrupts: Pin 2 & 3. Beide Pins sind in der Schaltung in Gebrauch, aber wir können sie vertauschen. Dazu musst Du zwei Codezeilen ändern.

      1. Die Initialisierung der Softserial-Schnittstelle auf Pin 2 & 9, damit Pin 3 verfügbar wird:
      SoftwareSerial RFID = SoftwareSerial(2,9);

      2. Die RCSwitch Lib auf Pin 3 legen:
      mySwitch.enableReceive(1);

      Nun musst Du den 433MHz Empfänger mit dem Data Pin an Pin 3 anschließen. Wenn es jetzt geht, hat der Uno auf Pin 2 einen „abbekommen“.

      Viel Erfolg
      Stefan

      Antworten
      1. Martin

        Danke für die rasche Antwort!
        Gute Idee aber leider gleicher Effekt 🙁
        Ich hab nu mal einen Nano und ein neues, etwas anderes 433 Paar bestellt.
        Eventuell ist doch die 5er Charge des 433 Set defekt? Wer weiß was da aus dem Data Port
        rauskommt und beim Testen mit dem RFID PIN Daten auswirft :-}
        Schade das ich schon bei den ersten Gehversuchen mit dem Arduino ins Wackeln gerate =:-)

        Gruss
        Martin

        Antworten
  15. ST

    Schade, weil wir es noch nicht gefunden haben. Und gut, weil’s nicht der Uno ist. An 5 defekte Empfänger am Stück glaube ich nicht so recht. Es könnte natürlich sein, dass man Dir die US Version mit 330MHz geschicht hat. Du bist Dir aber sicher, dass der Sender geht?

    Der Empfängertyp den Du da verwendest ist sehr simpel aufgebaut und macht deshalb auch ab und zu Ärger, weil er eigentlich sämtlichen „Dreck“ einsammelt, der im Äther rumschwirrt. In der Nähe von WLAN Sendern hat er massive Probleme oder auch, wenn er zu nahe an Kondensatoren montiert wird. Wenn Du neu bestellst, nimm einen RXB12
    https://blog.thesen.eu/433mhz-empfaenger-fuer-arduino-co-rxb12-vs-xy-mk-5v/

    Gruss Stefan

    Antworten
    1. Martin

      OMG…
      es lag an den 2 Handsendern!
      Nach vielem hin und her hab ich rausgefunden das der Grund warum ich nix empfangen haben an an den 2 Handesnderund lag. Mit einem 433Mhz Funkgong Drücker von Düwi sowie einem 433Mhz Tevion Funksteckdosen Handsender (Modell GT-7000; Code via einmaligem Tastendruck) hat es nicht funktioniert. Warum aber?

      Aber mit einem Funksteckdosen Handesender von Voltomat (Modell 008341; Code via Dipschalter) ! 🙂
      Jetzt muß ich schauen das ich die Reichweite verbessere und dann kann ich den Briefkasten Funkgong auf Arduino migrieren 🙂

      Danke Stefan für deine Tips!

      Gruss
      Martin

      Antworten
      1. Paulaner

        Juhu, noch jemand mit diesem Problem.
        Habe auch ein Quigg Funkfernbedienung, aber kann nichts empfangen…Leider konnte ich bisher nicht ermitteln, welche Eigenheit der Sender hat. Einen ganzen Tag damit die Zeit verbracht…

        Die Funksteckdosen auch anderer Hersteller funktionieren darauf (sprich anlernen und dann an- aus- Funktion nutzen).
        Weiß jemand mehr oder hat jemand eine andere Lösung / Idee?
        Danke euch.

        Antworten
        1. ST Beitragsautor

          Ich kenne die Quigg Dosen nicht. Kurzes googlen führt zu Hinweisen, dass diese ein anderes Protokoll nutzen. Low-level empfängst Du vermutlich was. Die oberen Schichten der Lib sortieren das aber raus, weil es nicht dem bekannten Protokoll entspricht. Du wird wohl eine adaptierte RCSwitch Lib brauchen.

          Antworten
  16. Ralf

    Hallo lieber Stefan,
    ich bin’s schon wieder mal …

    Step-Down Regler hat SUPER funktioniert, meine Stromversorgung funktioniert prächtig.
    Ich habe inzwischen aufmunitioniert und etliche der für das 433MHz Geschäft üblichen Programmbibliotheken aufgebohrt, bewege mich also im Bereich des (sofern überhaupt möglichen) Software-Überblick / Kontroll-Status.
    Verstehe also alle SubModule, habe etliche Routinen für meine Zwecke angepasst und komme damit auf schräge Ideen.
    Eine – für mich im Moment wesentliche – ist die Idee der Kontrolle des Funkverkehrs im Sinne einer Bidirektionalität.
    Ich weiß, in meinem akuten Anwendungsfall (Feuerwerksteuerung) ist das nicht zwingend erforderlich, da ich den Aktor SOFORT wahrnehme 🙂 .
    Für einige Nebeneffekte aber hätte ich gern eine Rückmeldung vom Empfänger.

    Ich habe im Empfängermodul (Arduino Nano) nahezu alle Pins zugebaut, da ich ein LCD ansteuere, einen 433MHz Empfänger betreibe und acht Relais schalte.
    frei sind aktuell D8 und D3 (A6 und A7 auch, aber das wohl eher uninteressant)
    wenn ich das Arduino Nano Datenblatt korrekt verstehe, ist D3 Interrupt-fähig.

    Meine Fragen:
    Bekomme ich (an D3?) auch noch einen Sender angeschlossen?
    Ist dieser dann parallel (oder abwechselnd) mit dem Sender (Daten an D2) betreibbar?
    Funktioniert eine analoge Konfiguration auch auf einem RaspBerry Pi (der bei mir die zentrale Steuereinheit liefert)?
    Ich habe am Arduino – Deinem wertvollen Rat folgend – bereits das RxB12 Modul verbaut. Auf der Raspi Seite ein „übliches“ Sendermodul.
    Ist es sinnvoll, auf ein Transceivermodul umzusteigen, das gleichzeitig sendet und empfängt (welches?) oder ist es besser, auf jeder Seite zwei Module einzusetzen.
    Im Falle von zwei Modulen auf jeder Seite: Kann ich dann die 433MHz Antenne an beide Module anlöten (ich gehe davon aus, dass ein Transceiver per se nur einen Antennenanschluss hat).

    DANKE, DANKE, DANKE!
    Wieder einmal für jeden Input.

    Gruß,
    Ralf

    Antworten
  17. ST

    Hallo Ralf,

    freut mich wenn es klappt. Das sind ja eine Menge Fragen; ich versuche mich mal daran 🙂

    Sender an D3?
    Ja, das geht. Für den Sender muss es meines Wissens auch kein interruptfähiger Pin sein. Da wird ja nur ein Bitfolge rausgespielt.

    Sind Sender und Empfänger parallel an einem Arduino betriebsbereit?
    Habe ich nicht probiert. Zweiteilige Antwort:
    1. Digitaler Teil:
    Du solltest den Empfänger deaktivieren, wenn der Sender sendet (rcswitch.disableReceive()) und danach erst wieder aktivieren. Der Empfänger empfängt ja das Signal, dass der Arduino gerade sendet. Das haut Dir dann Interrupts rein, die dann ggf die Ausführung der Sendefunktion unterbricht und Probleme verursachen kann. Deshalb schaltest Du besser den Empfang ab während Du sendest.

    2. Analoger Teil:
    Zunächst solltest Du getrennte Antennen für getrennte Sender und Empfänger nehmen. Wenn man eine Antenne nehmen will, muss man den Empfänger vertunen bzw nicht resonant machen, bevor man den Sender aktiviert. Sonst haut der Sender mit voller Energie in den Empfänger rein. Weiterhin könnte das Zusammenschalten die Schwingkreise ungewollt verstimmen. In einem Transceiver ist das alles geregelt.

    Zuletzt noch ein Vorschlag: Wenn Du jetzt bi-direktionale Kommunikation machen willst, warum dann nicht mit einem ESP8266 und WiFi? – Der ESP-12E hat einige GPIOs und kostet 3-4€. Der Raspberry kann mit einem passenden USB Stick (Edimax EW-7811Un) auch robust Wifi. Alternativ kannst Du auch einen ESP8266-01 mit einem Arduino kombinieren. Ich habe das für meine Markisensteuerung so gemacht. Dann könntest Du die Ansteuerung Deiner Komponenten so belassen wie sie ist und den Sender/Empfänger gegen den ESP auswechseln. Vielleicht ist ein verschlüsseltes WiFi für ein Feuerwerk auch die bessere Variante.

    Gruss Stefan

    Antworten
  18. Ralf

    Hallo Stefan,

    Danke – wie immer – für eine hoch qualifizierte Antwort!

    Mit Deinem Vorschlag hat Du mich allerdings abgehängt….

    Ich habe im Moment folgende Konfiguration:

    [(Beliebiger (WiFi, HTML) Client , fakultativ)] { [WiFi Hotspot vom Raspberry] [WebServer RasPi] [433 Funk Raspberry send] } {[433 Funk Arduino get] — [Verarbeitung] — [GPIO] — [Relais] }

    Der RasPi hat im Moment schon zwei WLANs: Eines, das ihn in meinem Lokalen Netzwerk verfügbar macht und ein zweites, das er selbst als Accesspoint zur Verfügung stellt und unter dem Clients beliebiger Art über ein Web-Interface die Steuerungslogik aufrufen können, und spezifische Codes senden,
    Für das Senden habe ich bisher – da nichts Andres gefunden, die vorhandenen 433 Bibliotheken benutzt.

    Ist hier ein drittes WLAN wirklich hilfreich?
    Und: Wie gestalte ich dann die Kommunikation?

    Da fällt mit im Moment nicht viel ein..

    (Ich bin interessierter Laie, kein Programmierer …)

    433 erscheint mir klar strukturiert, Protokoll etc. ist relativ klar.
    Auf einem generisch WLAN Tunnel hätte ich nicht die geringste Ahnung, wie ich dort eine Kommunikation aufbauen kann.

    Danke und Gruß,
    Ralf

    Antworten
  19. Ralf

    Achso, Transceiver: Wenn der die Sende/Empfangsproblematik selbst löst, ist ein solcher in meiner Konfiguration anschliesssbar und welchen sollte ich nehmen?

    Danke!

    Gruß,
    Ralf

    Antworten
    1. ST Beitragsautor

      Hallo Ralf,

      ich habe selber noch keinen der 433 MHz Transceiver verwendet. Wenn ich z.B. hier reinschaue
      http://www.seeedstudio.com/wiki/images/b/b0/HC-12_User_Manual.pdf
      dann wird schnell klar, dass das Ding komplett anders zu programmieren ist. Auf die Schnelle konnte ich keine OOK Transceiver Module mit Datenblatt finden. Da müsstest Du mal schauen, ob es etwas passendes. Sonst wäre die Programmierung eh komplett umzustellen.

      Wegen des ESP8266 WiFi Ansatzes: Du hast ja offenbar schon einen Access Point, den der Pi aufspannt. Du könntest die ESPs einfach als Clienten in dieses Netz bringen. Die Verschlüsselung wäre intrinisch WPA2. Die Kommunikation kannst Du dann z.B. über den Telnet Port machen:
      Pi–> ESP: FIRE_ROCKET_1
      ESP –> Pi: LAUNCHED_ROCKET_1
      Der ESP macht dann eigentlich nichts anderes, als das Kommando auf der Seriellen an den Arduino zu geben und umgekehrt. Wenn Du das so löst, hast Du den ESP Code hier schon fertig:
      https://blog.thesen.eu/telnet2serial-telnet-zu-rs232seriell-bruecke-mit-dem-esp8266-microcontroller/

      Gruss Stefan

      Antworten
  20. MA

    Hi, bin hier über das Projekt gestolpert, weil ich mehrere Funksteckdosen habe, deren Fernbedienung nicht mehr mag. Ursprünglich war es ein Set von Conrad (RS-200). Gibt es eine Möglichkeit diese weiter zu benutzen und mit einem Arduino die Steckdosen wieder anzulernen?
    Jede Steckdose musste in einen Lernmodus versetzt werden und die Funke hat dann bei Betätigung den Kanal übermittelt.

    Antworten
    1. ST Beitragsautor

      Hi MA,

      ich kenne die konkreten Funksteckdosen nicht. Es ist so nicht zu sagen, ob diese mit der Arduino RCSwitch Lib anlernbar sind. Kannst Du eigentlich nur ausprobieren. Die RCSwitch Lib unterstützt verschiedene Protokolle und letztlich kann man die nur alle durchprobieren. Es könnte auch ein anderes Protokoll zum Einsatz kommen. Wenn Du noch einen funktionierenden Sender hast, könnte man mit der Sniffer Schaltung hier ausprobieren, ob/wie die RCSwitch Lib helfen kann.

      Gruss Stefan

      Gruss Stefan

      Antworten
  21. xyztestuser

    Hallo, gibt es soetwas auch für 868,3 MHz für z.B. Garagentorsender. Über infos über notwendige Hardware und den Programcode würde ich mich freuen.

    Danke für die Antworten.

    Antworten
    1. ST Beitragsautor

      Es gibt solche Module auch für diesen Frequenzbereich. Ich vermute aber, dass Dein Plan nicht klappt 🙂
      Vermutung : du willst den Garagentor Code mitsniffen, um die Garage dann selbst steuern zu können.
      Geht höchstwahrscheinlich nicht, weil fast alle Garagentore auf einem Wechselcode System beruhen (Keeloq). Das ist zwar mal theoretisch geknackt worden, aber die praktische Implementierung ist sehr schwierig.
      Vorschlag: eigentlich alle Antriebe haben einen Anschluss für einen Taster (auf/zu). Dort schließt Du eine kleine Schaltung an, die den ‚Taster‘ drückt. Habe ich für einen Kumpel mit einem Esp8266 so gemacht. Er kann sein Tor jetzt per Handy öffnen, wenn es im Heim-Wifi ist. Mit einem umgebauten China Sonoff geht das für unter 10€

      Gruss Stefan

      Antworten
      1. xyztestuser

        Ok, danke für die Antwort,

        Ich habe mir für mein Garagentor drei Fernbedienungen 868,3 MHz in der Bucht geholt ( http://www.ebay.de/itm/D302-868-D304-868-868-3Mhz-Kompatibel-Handsender-Klone-NOT-MADE-BY-MARANTEC-/172011948472?hash=item280cb609b8:g:s84AAOSwwE5WWIJW ). Mit denen konnte ich das Signal der Originalfernbedienung auf diese Funkfernbedienung teachen. Deshalb war mein Gedanke, dass das ein starrer Code sein muss, den die Fernbedienung ausgibt und ich diesen ebenfalls mit Hilfe eines Arduinos auslesen kann und dann für spätere Schaltvorgänge nutzen kann.

        Für die Version mit dem Taster:
        Hast du evtl. Links zu den erforderlichen Bauteilen die du empfehlen kannst für mich. Ich steige bei den ganzen Angeboten aus China usw. nicht durch. Wäre schön, danke.

        Also verstehe ich das so: Ich brauche einen Sender (Wifi oder Funk z.b. 433 MHz) mit dem ich auf einen kleinen Arduino sende. An dem Arduino muss dann logischerweise auch ein Wifi-Modul bzw. 433 MHz Empfänger angeschlossen sein. Bei Eingang des Signals schaltet der Arduino z.B. einen Ausgang, wodurch das Garagentor geöffnet / geschlossen werden kann.

        Antworten
        1. ST Beitragsautor

          Hilf mir bitte nochmal mit dem Ziel. Du kommst ja offenbar an Ersatzfernbedienung ran. Somit brauchst Du vermutlich keine weiteren Handsender, oder?

          Antworten
          1. xyztestuser

            Ziel ist es sowohl mit den vorhandenen 868, 3 Mhz Fernbedienungen für das Garagentor als auch mit den vorhandenen 433 Mhz Fernbedienungen für die Steckdosen (Die eine Funkfernbedienung die ich habe arbeitet auf 433,92 MHz. Die Zweite ist in 4 Stufen einstellbar auf 433,05-433,79Mhz) Schaltvorgänge an einem Arduino durchführen zu lassen. Also ich würde gern die 868,3 MHz Fernbedienung die an meinem Schlüsselbund ist verwenden können ( 3 der vier Tasten sind ja unbenutzt) um damit auch z.B. einem Arduino Signale zu schicken, damit dieser dann bestimmte Dinge tun kann. Und anders herum würde ich gern die 433 MHz Teile nehmen und evtl. vom Sofa aus (z.B. mein Schlüsselbund ist nicht greifbar, aber ich hab die Steckdosenfernbedienung vor mir liegen) z.B. nochmal mein Garagentor auf bzw. zufahren zu lassen.

            Des weiteren hab ich eine Eigenbau Alarmanlage mit Arduino realisiert. Hier könnte ich mir auch vorstellen, dass ich diese über Drücken einer bestimmten Abfolge auf den Fernbedienungen scharf bzw. unscharf schalten kann.

            Danke das du antwortest und dir Gedanken machst.

          2. ST Beitragsautor

            Ok, kapiert. Drei Lösungsvorschläge hätte ich:
            1. Du nimmst eine passende Baumarkt Funksteckdose und baust diese zu einem potentialfreien Schaltkontakt um. Beispiel hier:
            https://blog.thesen.eu/reichweite-einer-elro-ab440s-funksteckdose-erhoehen-umbau-auf-einen-potentialfreien-schaltkontakt/
            Diesen potentialfreien Schaltkontakt schließt Du an den Taster Eingang des Garagentormotors an. Musst aber prüfen, ob die Steuerung mit einem Schalter statt einem Taster klar kommt.
            2. Du nimmst einen Arduino, ein Relaisboard und einen 433MHz Empfänger. Dem Text entnehme ich, dass Du mit dem Empfänger & dem Arduino klar kommst. Du musst also nur das Relaisboard schalten (einfach an einen D Pin). Fertig. Das macht dann wieder einen potentialfreien Schaltkontakt – dieses Mal als Taster. Und der kommt wieder an den Motor des Garagentors.
            3. Du nimmst einen Garagentorempfänger auseinander un steuerst mit einem Arduino die Taster auf der Platine. So etwas ähnliches habe ich hier mal gemacht:
            https://blog.thesen.eu/teil-5-rfid-codeschloss-fuer-den-keymatic-eq-3-tuerschlossantrieb/

            In allen Fällen denke bitte daran, dass Du damit das unsichere Protokoll der Baumarktsteckdosen für ein Garagentor anwendest. Ich halte das zwar immer noch für relativ sicher, weil der typische Einbrecher eher mit dem Brecheisen und nicht mit Elektronik Knowhow kommst. Aber Du machst die Funkuübertragung unsicherer als sie aktuell ist. Variante 3 erlaubt Dir ggf die Funkübertragung nicht unsicherer zu machen (je nach dem, wie Du den Arduino ansteuerst).

            Viel Erfolg
            Stefan

  22. xyztestuser

    Danke für die Antwort. Werde vermutlich Vorschlag 2 realisieren. Kannst du mir das mit dem potentialfreien Schaltkontakt etwas genauer erklären. Heißt das, dass ich keine Spannung auf den Anschluss des Garagentorantriebes geben darf?

    So sieht der Antrieb bei mir aus. (siehe nachfolgende Links)
    http://fs5.directupload.net/images/170621/cb8c6ma8.png
    http://fs5.directupload.net/images/170621/f7gqxfq3.png
    So wie ich die Sache sehe muss ich an die Klemme 1 (Impulstaster Sb1). Und jetzt kommt die große Frage für mich als Laie. Wie und was schließe ich da an und was muss ich dem Arduino sagen was er machen soll in dem Moment wenn ich meine Funkfernbedienung betätige?

    Danke für deine Antworten.

    Antworten
    1. ST Beitragsautor

      Das sollte gehen. Und ja, du gibst keine Spannung auf die entsprechenden Klemmen des Antriebs. Normalerweise wird da ein Taster angeschlossen, der die beiden Pins verbindet. Das selbe kannst Du mit einem Relais machen.
      Ein paar Basics zu Relais am Arduino findest Du z.B. hier:
      http://www.instructables.com/id/Controlling-AC-light-using-Arduino-with-relay-modu/

      Im Code machst Du das Relais einfach für 500ms an, wenn Du den passenden Code empfängst. Das ist dann genau so, als ob Du den Garagentortaster für eine halte Sekunde drücken würdest.

      Gruss Stefan

      Antworten
  23. Oli

    Hallo,

    ich möchte das gern mal probieren, habe aber kein Arduino installiert,
    ich mache alles mit Bascom, könnte mit jemand von dem AVR das HEX oder BIN zukommen lassen?
    mit Angabe welcher Controller auf dem Board war, lg Oli

    Antworten
    1. ST Beitragsautor

      Die kannst die Arduino Entwicklungsumgebung kostenfrei auf arduino.cc herunterladen. Da kannst Du Dir für alle unterstützten Zielsysteme binaries erzeugen. Ich kenne Bascom nicht. Das wäre nun eine große Raterei, was Du brauchst und ob das geht. Einen Arduino Nano Clone bekommst Du unter 3€ auf eBay. Das wäre die simpelste Variante.
      Gruss Stefan

      Antworten

Schreibe einen Kommentar

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