Kabellose Datenübertragung gehört für mich zu den spannendsten Gebieten in der Welt der Microcontroller. Im Wesentlichen gibt es die folgenden Techniken:
- Bluetooth
- W-Lan
- Infrarot
- Funk (433 MHz, 868 MHz, 2.4 GHz)
Genau genommen sind Bluetooth und W-Lan natürlich auch Funktechniken. Diese genießen aber eine Sonderstellung aufgrund ihrer speziellen Übertragungsprotokolle. In diesem Beitrag geht es um die 433 MHz Funktechnik. Dabei werde ich mich auf die „One-Way“ Technik beschränken, also einfache Transmitter / Receiver Systeme. Im Einzelnen wird behandelt:
- die benötigten Module
- Antennen
- die Einrichtung einer geeigneten Bibliothek
- ein Minimal Setup
- Erfahrung mit verschiedenen Receivermodulen
Besonders einfach ist die Übertragung mit den HC-12 Modulen, die ich hier separat vorstelle. Darüber hinaus sind die HC-12 Module Empfänger und Sender, d.h. eine Übertragung ist in beide Richtungen möglich. Der Nachteil der HC-12 Module ist, dass sie nicht mit Handsendern oder Funksteckdosen kommunizieren können.
Gängige Module
Was braucht man für den 433 MHz Funk mit dem Arduino? Zunächst einmal geeignete Funkmodule. Wer z.B. bei Amazon danach sucht, wird vor allem auf die folgende Kombination von Receiver und Transmitter treffen. Sie wird ohne nähere Typenbezeichnung in vielen Shops angeboten:
Diese Teile sind ausgesprochen günstig und meiner (neueren) Erfahrung nach besser als ihr Ruf. Ich hatte auch mal welche gekauft bei denen die Receivermodule kaum einsetzbar waren. Maximal zwei Meter Übertragung. Danach waren die Dinger für mich erst einmal gestorben. Inzwischen habe ich zweimal wieder welche gekauft um die Transmitter davon zu verwenden. Und siehe da: nun funktionierten auch die Receivermodule wunderbar. Viele negative Kommentare findet aber auch man von Leuten die keine Antenne verwendet haben, aber dazu gleich noch mehr.
In der Haustechnik gibt es eine Reihe weiterer Transmitter und Receiver auf 433 MHz Basis, wie z.B. Fenstersensoren und Funksteckdosen. Auf Letztere werde ich in einem späteren Beitrag eingehen.
Antenne
Ohne Antenne geht (fast) nichts. Kauft man ein Transmitter – Receiver Duo wie oben abgebildet und setzt es ohne Antenne ein, dann wird man sehr enttäuscht sein. Man bekommt gerade so Funkstrecken quer über den Schreibtisch hin. Darüber hinaus ist Schluss. Es müssen also Antennen angebastelt werden. Meiner Erfahrung nach vor allem am Transmittermodul, aber besser noch an beiden Modulen.
Die Länge der Antenne sollte ein Viertel der Wellenlänge betragen. Die Wellenlänge ist Lichtgeschwindigkeit durch Frequenz. Das Ergebnis noch durch 4, macht 17,3 cm. Es gibt lauter Anleitungen im Netz zum Selbstbau guter Antennen, z.B. hier. Nach meiner Erfahrung kommt man aber auch schon dann auf gute Reichweiten, wenn man einen einfachen Draht anlötet. Man muss also keine Wissenschaft daraus machen. Etwas anderes ist es wenn man wirklich an die Reichweitegrenzen stößt.
Es werden auch kleine Spiralantennen angeboten bzw. Module, die diese schon angelötet haben. Dazu kann ich nur bedingt raten. Die Übertragung ist besser als ohne, aber ein langer Draht ist einfach besser. Wenn man solche Spiralantennen verwendet und Probleme mit der Reichweite hat, kann man sie auch auseinanderziehen und damit nach meiner Erfahrung ein besseres Ergebnis erzielen. Hier also ein paar – zugegebenermaßen nicht schöne – aber pragmatische und funktionierende Lösungen:
Die Ansteuerung
Es gibt eine Reihe von Bibliotheken zur Ansteuerung von Funkmodulen mittels Arduino. Ich hatte lange Zeit die VirtualWire Bibliothek benutzt, aber anscheinend ist das ein Auslaufmodell, das nicht mehr gepflegt wird. Empfehlen möchte ich die Bibliothek RadioHead von Paul Stoffregen, da sie mit vielen verschiedenen Funkmodulen kompatibel ist. Wie man sein eigenes Funkprotokoll strickt, werde ich in einem anderen Beitrag erklären.
Installation der RadioHead Bibliothek
Für die weniger Erfahrenen: Dem o. a. Link folgen, auf „Clone oder Download“ gehen, „Download ZIP“ wählen und die Zip Datei im Verzeichnis „Arduino\libraries“ entpacken. Es sollte dann ein Ordner „RadioHead-master“ vorhanden sein. Die Zip Datei kann man nun löschen. Ein Blick in das „RadioHead-master“ Verzeichnis zeigt, dass es sich um eine ganze Sammlung von Bibliotheken handelt.
Anpassung der Beispielsketche
Für die hier verwendeten, einfachen Funkmodule ist die „RH_Ask“ Bibliothek geeignet. Am einfachsten startet man, indem man die mitgelieferten Beispielsketche nimmt und ggf. modifiziert. Für den Transmitter ist das die Datei „RadioHead-master\examples\ask\ask_transmitter\ask_transmitter.pde“, die man direkt über die Arduino IDE aufruft, ggf. bearbeitet und bei seinen Sketchen speichert. Für den Receiver wählt man das Beispiel „ask_receiver.de“.
Hier meine Anpassung des Transmittersketches:
Die Beispielsketche sind eigentlich selbsterklärend, nur fehlte im Original ein Hinweis auf die Bedeutung der Parameter bei der Objektinitialisierung:
- speed: Datenübertragung in bits/s
- rxPin: Datenpin für den Receiver
- txPin: Datenpin für den Transmitter
- pttPin: „Enable“ Pin für den Transmitter (brauchen wir für unsere schlichten Module nicht)
- pttInverted: optionaler Parameter für die pttPin Logik, Standard: false
In meiner Anpassung des Transmittersketches habe ich also den txPin auf 8 festgelegt. rxPin und pttPin sind hier bedeutungslos, speed bleibt unverändert. Im Receiversketch legt man entsprechend den rxPin fest.
Die Verkabelung
Anschlüsse
Der Transmitter kann mit 3.3 bis 12 V betrieben werden, der Reveiver braucht 5 V. In meinem Versuchsaufbau betreibe ich beide mit 5V. Auf der Transmitterseite habe ich einen Arduino Nano (ProMini nehme ich alternativ auch gerne) eingesetzt, auf der Receiverseite einen Arduino UNO. Stellvertretend ist hier nur die Transmitterseite abgebildet:
Entsprechend verfährt man auf der Receiverseite. Und dann kann es losgehen. Wenn alles geklappt hat sollte man nun auf der Receiverseite mittels seriellem Monitor seine Nachricht lesen können. Man kann eigentlich nicht viel verkehrt machen, deswegen spare ich mir hier einen Troubleshooting Abschnitt.
Erfahrung mit alternativen Receivermodulen
Zum Schluss noch ein Erfahrungsbericht zu verschiedenen Receivermodulen. Ich habe die unten abgebildeten Receivermodule mit der Bezeichnung „RXB6“, „RXB8“ und „RXB12“ gegen das Modul aus dem Kombipack antreten lassen. Auch diese Module sind für wenige Euro zu haben.
Der Versuch
Zunächst habe ich allen Receivermodulen die gleiche Antenne verpasst. Die Spiralantenne am RXB12 habe ich dazu entfernt. Das zu testende Receivermodul habe ich mit dem Arduino UNO am PC gehabt. Das Transmittermodul (aus dem Kombipack) hatte ich am Arduino Nano auf dem Breadboard (Akkubetrieb). Dann habe ich den Transmitter an unterschiedlichen Orten im Haus platziert und geprüft ob am Receiver etwas ankommt.
Das Ergebnis
- Im selben Raum (ca. 6m) kein Problem für alle Module
- Im Nachbarzimmer (geschlossene Tür, massive Wand) hatten der RXB6 und RXB12 an einigen Stellen schon Probleme.
- Das Modul aus dem Kombipack und der RXB8 hatten quer durchs Haus durch mehrere Wände und über ein Stockwerk hinweg eine gute Verbindung. Für meinen Router brauche ich schon auf einem kürzeren Stück einen Repeater.
- Die große Überraschung war, dass der RXB8 das auch ohne Antenne packte(!).
Auf einer Skala von 0 bis 10 würde ich folgende Bewertung geben:
- RXB12: 2
- RXB6: 3
- Kompipackmodul: 7
- RXB8: 10+
Da der RXB8 einen so guten Empfang ohne Antenne hat, kann man ihn besonders gut in kleine Gehäuse einbauen.
Und wie ist Eure Erfahrung mit verschiedenen Modulen? Über Kommentare würde ich mich freuen.
Hallo Wolfgang,
erstmal ein großes Kompliment für Deinen Blog, der mir schon bei vielen Fragestellungen geholfen hat.
Nun habe ich ein Problemchen und finde dazu nicht wirklich Angaben oder Informationen im Netz. Es geht natürlich um das Thema Transmitter / Empfänger und Arduino. Für ein kleines Testprojekt habe ich mir rx480e Sender / Empfänger beschafft. Ich würde nun gerne nicht den Arduino etwas ansteuern lassen, sondern einen Schaltimpuls per Transmitter an den Arduino (Eingang) übertragen, um das Signal wie bei einem normalen Schalter auswerten zu lassen und dann einen entsprechenden Ausgangsimpuls zu erzeugen. Ist das prinzipiell möglich? Bei IR-Transmittern / Receivern finde ich hier haufenweise Referenzen, nicht aber für Funk – komischerweise (vielleicht fehlt mir aber auch das nötige Fachwissen, um die Informationen richtig zu lesen XD ).
Herzlichen Dank schon einmal und viele Grüße!
Alex
Hallo Alex,
das geht nicht ganz so einfach, wie du es vielleicht möchtest. Das Problem ist, dass du ziemlich viel störende Signale empfängst, wenn du einfach nur mal einen Receivermodul an einen Arduino hängst und per digitalRead prüfst, was da so ankommt. Ich habe das in diesem Beitrag untersucht:
https://wolles-elektronikkiste.de/eigene-funkprotolle
Ich weiß nicht genau, wie die Receivermodule funktionieren, aber meine Theorie ist, dass sie eine variable Verstärkung haben, die sie, wenn sie nichts empfangen, hochdrehen bis sie etwas „hören“ – nämlich Rauschen. Wenn man dann ein Signal sendet, ist eine Weile Ruhe. Man muss also vor dem eigentlichen Signal eine Art Signal „zum Einhören senden“. Die Störsignale waren bei mir zwischen wenigen Mikrosekunden und einigen hundert Mikrosekunden lang. Klingt jetzt erst einmal etwas verwirrend. Wenn du den Beitrag liest, dann sollte es klarer werden.
Vielleicht bekommst du die kurzen Störsignale auch mit einem RC Glied eliminiert. Da müsste man mal ein bisschen mit den Größen von Kondensator und Widerstand spielen.
VG, Wolfgang
Hi,
da gibt es auch was Fertiges, mal nach L24YK-RX4 L24YK-TXH suchen.
Es wird ein Sender und ein Empfänger benötigt, die müssen gesyct werden, und anschließend kann man 6 Taster einzeln auswerten: https://www.abcelectronique.com/forum/attachment.php?attachmentid=78477
Ich persönlich ziehe selber bauen vor: https://www.arduinoforum.de/arduino-Thread-Door-Sens-Low-Power-Funk-ReedSensor
Gruß André
I am have a bunch of 433Mhz door sensors and looking for a 433Mhz board that is supported by openmqttgateway to build a 433Mhz to MQTT gateway. Could you advise such a board ? In other words, among all the boards you have tested, which ones are supported by openmqttgateway ? openmqttgateway lists the chips they support (https://docs.openmqttgateway.com/prerequisites/parts.html#main-parts), but I don’t know if XRB or HC have such chips.
Thank you
John
Sorry, I don’t have experience with openmqttgateway and therefore I don’t know if these simple 433 mhz devices that I have used are compatible.
I am have a bunch of 433Mhz door sensors and looking for a 433Mhz board that is supported by openmqttgateway to build a 433Mhz to MQTT gateway. Could you advise such a board ? In other words, among all the boards you have tested, which ones are supported by openmqttgateway ? openmqttgateway lists the chips they support (https://docs.openmqttgateway.com/prerequisites/parts.html#main-parts), but I don’t know if XRB or HC have such chips
Hallo Wolfgang,
ich habe den Wald gefunden. Trotzdem danke und bis demnächst.
Uwe
Hallo Wolfgang,
Deine Seite ist für mich eine Art Referenz. Ich arbeite gerade mit den fs1000a Modulen. Läuft alles
gut. Meine Problem ist, dass sich der Receiver immer den letzten empfangenen State merkt.
Ich schalte den Sender ab und erhalte trotzdem immer noch den letzten empfangenen Wert.
mySwitch.resetAvailable();
oder
receive_value = 0;
hilft nicht. Vielleicht sehe ich den Wald vor lauter Bäumen nicht. Deshalb dieser Hilferuf.
Vielen Dank
Uwe
Hallo Ewald,
ich möchte diesen Sender mit einem esp32 gerne mit einer 9-Volt Batterie betreiben.
Mit einem 5-Volt Netzteile geht es wunderbar. Mit dem 9-Volt Block geht’s gar nicht.
Ich habe schon versucht, mit einem Spannungsteiler das Level anzupassen, Geht leider
auch nicht 🙁 Kannst Du mir da vielleicht weiterhelfen?
Gruß Rainer
Hallo Rainer,
hier drei Möglichkeiten:
1) Spannungsregler LM7805 für den Anschluss an 5 V, siehe auch hier:
https://wolles-elektronikkiste.de/spannungsversorgung-linear-und-schaltregler#Anker_3
2) Spannungsregeler AMS1117, entweder für 3.3 oder 5 Volt, gibt’s auch als Modul:
https://www.amazon.de/AZDelivery-AMS1117-Stromversorgungsmodul-Arduino-Raspberry/dp/B072FTMS89/ref=sr_1_1?keywords=ams1117&qid=1703525578&sr=8-1&th=1
3) Step-Down Konverter:
https://wolles-elektronikkiste.de/spannungsversorgung-linear-und-schaltregler#Anker_6
VG, Wolfgang
Moin Wolfgang,
erst einmal Danke und ein riesen Lob an dich für diese Webseite/Blog. Ich bewundere immer wieder Menschen, wie du die Zeit und Lust haben, anderen User/Amateuren das Programmieren und Entwickeln.
Nun zu meinem Problem. Ich versuche mich gerade an einer funkvernetzten Wetterstation. Die Vernetzung basiert auf 433Hz Modulen. Jeder Sensor (Wind, Temperatur, Bodenfeuchtigkeit, Wassertankstand…etc.) bekommt ein Modul, diese senden ihre Messwerte an ein Master Modul, an dem ein Display angeschlossen ist, wo die Werte angezeigt werden. Jedes Modul bekommt eine Adresse, jede Sensorart bekommt eine Adresse und dann der Wert 4. Stellig. Um es dann codiert zu versenden, sieht das Ganze dann so aus: 99000000(Moduladr.)+990000(Sensorart)+9999 (Wert).
Wenn ich dann den Code 99999999 sende, kommt aber beim Empfänger was anderes an.
Wenn ich aber z.B. den Code 12201500 sende, dann kommt beim Empfänger auch 12201500 an.
12000000(Moduladr.)+200000(Sensorart)+1500(Wert).
Kannst du mir sagen, warum hohe Wert nicht richtig übertragen werden? Wo ist überhaupt die Grenze?
Gruß
Marco
Hallo Marco,
nutzt du die Bibliothek RadioHead/RH_ASK? Dann ist die eingehende Nachricht definiert als:
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
Und RH_ASK_MAX_MESSAGE_LEN wiederum ist in RH_ASK.h definiert als 60. Ich habe nicht ausprobiert, ob das stabil funktioniert.
Allerdings liegt das Problem vielleicht woanders. Wie lässt du dir das Ergebnis anzeigen? Als das übertragene Array oder zerlegst du das Array in Zahlen? Da kann man ein paar Dinge falsch machen.
Du könntest mir mal deinen Sender- und Receiversketch zusenden (wolfgang.ewald@wolles-elektronikkiste.de). Vielleicht finde ich ja das Problem.
VG, Wolfgang
Hallo Wolfgang,
danke für deine schnelle Antwort, damit habe ich jetzt nicht gerechnet. Ich sende dir meine Sketch´s per Mail. Ich benutze tatsächlich eine Andere Bibliothek. aber schau selber.
Ich weiß nicht, ob du meine e-mail schon lesen konntest. Vielleicht ist das auch für andere interessant, deshalb auch noch einmal hier: Die von dir verwendete RCSwitch Bibliothek versendet normalerweise 24 Bit Codes. Deswegen findet man in den Beispielen die Funktion: send(Zahl, 24). Du versendest long integers mit einer Größe von 32 Bit. Anscheinend werden die oberen 8 Bit abgeschnitten. Das passt hervorragend zu deiner Beobachtung, dass 99999999 nicht funktioniert, wohl aber 12201500, 2^24 = 16777216, denn 99999999 ist größer und 12201500 ist kleiner. Mit send(Zahl, 32) sollte es funktionieren, probiert habe ich es allerdings nicht.
Hallo Wolfgang,
ich bin auf der Suche nach einer Lösung für ein Problem und habe dabei keinen Blog gefunden, der so ausführlich, übersichtlich und freundlich ist wie Deiner. Ein Forum kommt für mich nicht in Frage, weil da oft recht unfreundlich nachgefragt wird, ohne zielgerichtet eine Lösung anzustreben.
Ich hatte bis vor einer Woche ein funktionierendes System. In einem Schaufenster steht eine kleine Truhe mit einem Arduino, einem Servo und einem Receiver. Draußen, vor dem Schaufenster ein Transmitter mit einem 9v Block und einem Taster, ohne arduino Steuerung. Wenn ich den Taster drücke, empfängt der Arduino innen ein Signal und öffnet den Servo.
Leider hat ein Kind den Aufbau im Schaufenster etwas demoliert und ich habe den Servo austauschen wollen. Danach habe ich es nie wieder zum Laufen bekommen. Auf dem Arduino habe ich den Receiver mit einer LED verbunden und ich stelle fest, daß der Receiver dauernd öffnet und schließt. Auch in meinem Keller ohne ein Störsignal blinkt die LED. Mittlerweile habe ich den arduino nur noch zur Stromversorgung dran. Am Receiver am Data Port eine LED. Müsste die nicht leuchten wenn ich den Transmitter schließe ? Die LED blinkt aber dauerhaft. Das führt dazu, daß bei meinem Aufbau der Servo immer wieder öffnet und schließt weil der Receiver immer wieder ein Signal über den Data Port sendet. Ich habe bereits drei Receiver angeschlossen, alle öffnen und schließen von selbst. Sind alle defekt?
Über einen Tipp würde ich mich wirklich sehr freuen denn ich möchte die kleine Kiste wieder in das Schaufenster stellen.
Gruß
Ralf
Hallo Ralf,
wenn ich einfach nur einen Receiver mit Strom versorge und eine LED an den Data Pin hänge, dann blinkt sie mal ein bisschen, geht wieder aus oder leuchtet dauerhaft mit geringer Helligkeit. Das ist normal und liegt daran, wie die Dinger funktionieren. Die Receiver verstärken, was sie „hören“ und sie verstärken umso mehr je weniger sie hören, bis zum Rauschen, dass du dann an der LED sichtbar machst. Deswegen wird bei der Datenübertragung normalerweise vom Transmitter erst einmal ein Vorabsignal gesendet, damit sich der Receiver auf die richtige Verstärkung einstellt. Details habe ich hier beschrieben, falls es dich interessiert:
https://wolles-elektronikkiste.de/eigene-funkprotolle
Oder blinkt deine LED in einem regelmäßigen Takt?
Also gehe ich davon aus, dass der Receiver nicht das Problem ist. Auf der Transmitterseite verwendest du nur ein Transmittermodul + Batterie + Taster? Eigentlich kann das nicht funktionieren. Wenn ich das so nachbaue und den Data Pin dauerhaft auf HIGH setze, dann leuchtet die LED kurz hell auf und geht dann in einen undefinierten Modus über. Ebenso, wenn ich wieder auf LOW gehe. Ganz kurze Zei ist die LED aus, dann rauscht es wieder. Das ist so, weil das Modul nur sich ändernde Signale verarbeitet. Ich frage mich nur, wie das jemals funktionieren konnte?! Oder ist der Transmitter ein Handsender?
Das ist ein bisschen schwer aus der Entfernung zu lösen. Vielleicht kanns du mir erst einmal sagen, was das für ein Transmitter ist, den du benutzt. Du kannst mir auch gerne Fotos zusenden (wolfgang.ewald@wolles-elektronikkiste.de).
VG, Wolfgang
Hallo Wolfgang,
Spannende Website!
Ich habe diese billigen Bundle Sender und Empfänger (FS1000A), wie im ersten Bild dieser Seite.
An beiden habe ich einen 17,3 cm Draht angelötet und komme damit von der Terrasse ins Wohnzimmer durch die geschlossene Tür, wenn ich Sender und Empfänger mit Arduinos (Nano/Uno) betreibe.
Den Empfänger an einem ESP32 angeschlossen (An VIN mit Spannungsteiler 5V > 3V vor dem GPIO) bekomme ich zwar auch das korrekte Signal, aber nach ca. 1 m ohne Hindernis ist Schluss.
Kann es sein, dass der ESP32 so stark stört? Kann man etwas dagegen machen?
Kann es sinnvoll sein, am Abstimmkern des Empfängers zu drehen? Gibt es Tipps dazu?
Danke!
Hallo Aldo,
ob der ESP32 stört, kann ich nicht beantworten. Ich müsste das selber mal ausprobieren. Auszuschließen ist das nicht. Du könntest mal probieren, das Funkmodul oder den ESP32 abzuschirmen. Pragmatisch: einfach bisschen Plastikfolie oder Stoff zum Isolieren drum uns dann Alufolie. Oder einfach mal eine anderes Modul ausprobieren, denn ich glaube, da ist auch viel Schrott im Umlauf.
Wenn du eine größere Entfernung abdecken willst, dann empfehle ich das HC-12 Modul:
https://wolles-elektronikkiste.de/hc-12-funkmodul
Hohe Reichweiten soll man auch mit LoRa erreichen, das habe ich aber selbst noch nicht ausprobiert. Steht noch auf der To-Do Liste. Hier ein Link:
https://randomnerdtutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/
Die Random Nerd Tutorials Seiten sind auch immer sehr zuverlässig.
VG, Wolfgang
Hallo Wolfgang,
Danke für die Antwort.
Den ESP32 abschirmen ist für mich leider keine Option, da ich gleichzeitig WLAN benutzen möchte.
Ich habe mal als einfache Maßnahme am Abstimmkern gedreht.
Erst ca. 20 Grad im Uhrzeigersinn, dann ging gar nichts mehr.
Dann dasselbe im Gegenuhrzeigersinn (vom markierten Ursprung aus) und siehe da: Mit dem Uno kann ich jetzt durch alle Wände hindurch empfangen und der ESP32 kommt wenigstens 5 Meter weit.
Und das war jetzt nur mal ein Zufalls-Versuch, vielleicht geht’s noch besser.
Für die optimale Einstellung fehlen mir Messgeräte und Wissen. Aber: Versuch macht klug! 😉
Vielleicht könntest du in deinem Artikel erwähnen, dass das Drehen an dem Abstimmkern den Empfang massiv verbessern kann. Vielleicht sind die Teile gar nicht Schrott, sondern nur schlecht eingestellt.
Meiner hatte aber keinen Schutzlack drauf, wie auf Deinem Bild zu sehen ist.
Ich meine, bevor man die Module wegschmeißt, kann man es ja versuchen.
LG Aldo
Hallo Aldo,
ich hatte auch das Problem mit der geringen Reichweite und habe ebenfalls am Abstimmkern gedreht (ca. 1/2 Umdrehung entgegen dem Uhrzeigersinn). Jetzt konnte ich mit 5V Versorgungsspannung durch 2 Wände ca. 10m weit senden (oder besser: empfangen).
Ich habe das mal näher untersucht, weil ich dieselbe Reichweite (10m durch 2 Wände) im nicht-eingebauten Zustand des Senders (also freie Verdrahtung, 20cm entfernt von der eigentlichen Schaltung) ohne Verstellung des Abstimmkerns erreicht hatte. Nur nach dem Einlöten des FS1000A auf die Platine gab es Schwierigkeiten.
Ergebnis:
Nach dem Einlöten auf die Platine hatte sich die Sendefrequenz von 433,92MHz auf 419MHz verschoben. Damit passt der Empfänger mit seiner 433,92MHz Empfangsfrequenz natürlich nicht mehr zur Sendefrequenz. Erst nach dem Verstellen des Abstimmkerns auf die neue Frequenz 419MHz konnte der Empfänger wieder gut empfangen.
Problem dabei:
Die Frequenz von 419MHz liegt außerhalb des zulässigen Frequenzbereichs (433,05 – 434,79 MHz).
Ich habe dann die Spule auf dem Sender FS1000A ganz weit auseinandergezogen und kam so auf eine Sendefrequenz von 432MHz. Auch noch nicht so toll.
Da ich mit einem Empfänger mehrere Sender empfangen möchte (ohne die Sender jedesmal an die Umgebung anzupassen), bin ich dann auf den HC12 umgestiegen. Diese haben keine „großen“ Spulen auf der Platine und lassen sich durch Metall, Hände oder sonstiges nicht in der Frequenz beeinflussen. Sie sind zwar teurer als das FS1000A-Bundle, dafür tun sie, was ich will und ich kann in beide Richtungen senden (wenn ich das brauche).
Es gibt neben dem FS1000A auch andere „einfach“ aufgebaute 433,92MHz-Sender, ohne große Spulen (also alles in SMD). Die habe ich hier auch liegen, aber noch nicht probiert.
Zur Info: Mein Empfänger hat auch keinen Schutzlack auf dem Abstimmkern.
Gruß
Torsten
Hi Wofgang,
Super Artikel!
Ich habe paar Fragen zu den Receivern bzw zu deren Antenne.
Braucht der Receiver auch so eine 17,3 cm lange Antenne?
Muss der Draht da auch immer so dick sein, wie man ihn auf den Fotos sieht?
Ist es generell möglich, ein Signal über 400 oder 500 Meter zu übertragen?
Kann man die 433 MHz irgendwie abschirmen?
Danke und Liebe Grüße!
Hi Philipp,
du kannst auch einen dünnen Draht nehmen. Der dicke Draht hatte den Vorteil, dass er von alleine Stand. Am besten ist, wenn Receiver und Transmitter eine Antenne haben. Aber nach meiner Erfahrung ist die Antenne am Sender wichtiger. 400-500 Meter geht mit den hier beschriebenen Modulen nicht. Für die Entfernung würde ich ein HC-12 Modul empfehlen:
https://wolles-elektronikkiste.de/hc-12-funkmodul
Damit habe ich Reichweiten von 1000 m erreicht. Diese hier sollen auch immerhin bis 800 m erreichen, ich habe sie aber nicht getestet:
https://smile.amazon.de/nRF24L01-Antenne-kabellos-Transceiver-Arduino/dp/B07TYVSSBZ/ref=sr_1_2?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=MZD0LVSD1KCC&keywords=2%2C5+ghz+funkmodul+arduino&qid=1658689344&sprefix=2+5+ghz+funkmodule+arduino%2Caps%2C56&sr=8-2
Und sonst gibt es noch LoRa – das habe ich aber auch noch nicht probiert:
https://randomnerdtutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/
Viele Erfolg und vor allem viel Spaß!
LG, Wolfgang
Danke für die super schnelle Antwort!!
Hallo, ich habe eine Frage
Ich habe die RX-TX Module vom Funduino Shop.
Der TX hat bei mir keine Spule (die mit 2 1/2 Windungen)
Notwendih / Nachbauen ?
Für was ist die (Verlängerungsspule?)
Danke Erich
Hallo, sind das Module wie hier?:
https://funduino.de/nr-03-433mhz-funkverbindung
Dann lautet die Antwort ja. Nach meiner Erfahrung sollte eine Antenne dran. Aber ich bin auch immer der Meinung: Versuch macht klug. Und wenn es die Reichweite nicht OK ist, dann bastelt man eine Antenne dran. Einfach ein Stück Draht ist gut genug. VG, Wolfgang
Habe eine Funkübertragung mit XY-MK-5V Empfänger und XY-FST (FS1000A) Sender aufgebaut. Folgende Erfahrungen möchte ich hier mitteilen:
Eine Antennen ist notwendig, Die Elektronik befinden sich in einem kleinen Metallgehäuse. Antennenstäbe sind
3/8 x Lamta ( s. Antennenbuch Rothammel). Mit Antennenanalyser nachgemessen – super Werte. Nach Aufbau nur Funktion in ca. 1cm Antennenabstand. Auf dem Empfänger befindet sich eine Spule mit Abstimmkern. Diesen muß man einstellen (drehen) und auf die Frequenz des Senders abstimmen. Die Feineinstellung bekommt man indem Sender und Empfänger weiter voneinander entfernt werden. Der Wert lag bei mir in der Mitte bei etwa einem Drehwinkel von 30°.
Besten Dank!
Hallo Wolfgang,
nach langer Suche ohne richtige Antwort bin ich hier gelandet und endlich etwas aussagekräftiges gefunden, vielen lieben Dank.
Erst das vorhandene Konstrukt :
ich verwende mehrere China- Funkrelais zur Steuerung von Garage , Licht, etc. Diesr haben (natürlich) ein Billig-Funkmodul, das pinkompatibel ist zum RXB12.
Dieses möchte ich ersetzen, habe mir auch ein RXB12 bestellt und korrekt verlötet – funktioniert gut, aber nur OHNE Antenne…. mit Antenne schaltet nix mehr, unabhängig ob es die billige Spiralantenne ist, ein Draht oder ein Dipol.
Nun zu den Fragen 🙂
– Was kann die Ursache dafür sein, dass es ohne Antenne funktioniert und mit Antenne nicht?
– kann ich das Rxb12 durch ein RXB ersetzen, da es ja einen Daten Pin weniger hat als das RXB12? (die Pins kann ich sicher soweit biegen, dass sie in die Relais Platine passen)
Ich danke für’s freundliche Feedback!
Also dafür, dass ein Modul besser ohne Antenne arbeitet als mit Antenne, habe ich erstmal keine Erklärung. Sachen gibt’s?!
Was das Ersetzen des Moduls angeht: Was meinst du mit RXB? RXB6 oder RXB8? Da ist es von der Funktion her egal, welches du nimmst. Oder habe ich die Frage falsch verstanden?
Upps, Tippfehler, ich meinte das von Dir empfohlene RXB8.
Das „Billig- RXB12 12“ ist rechtwinklig auf der Relais-Platine angelötet, daher ist die Pin-Kompatibilität natürlich wichtig und hier fehlt beim RXB8 ein Daten-Pin. Wie ich gelesen habe, ist dieser nach „innen“ verlegt worden?!
Den GND-Pin kann ich sicher soweit nach außen biegen, dass er ins vierte (statt dritte) Lötauge passt
Warum der RXB12 überhaupt 2 Datenpins hat, das weiß ich nicht. Ich meine bei beiden „kommt dasselbe raus“. Also wenn du irgendwie den Datenpin des RXB8 mit dem Dateneingang deiner Relaisplatine verbinden kannst, dann sollte es gehen.
Aber ich denke immer noch an das Antennenphänomen und kann mir keinen Reim drauf machen….
Danke für die Info, das mit dem Pin sollte kein Problem sein.
Was mir noch eingefallen ist: dad RXB12 hat, wenn man sich Produktbilder ansieht, zwei Lötaugen für die Antenne und GND…bei meinem Modul waren die beidseitig durchverbunden, also keine einzelnen augen, sondern ein „silbernes Rechteck“ mit zwei angedeuteten „löchern. Hab dann nur den Draht/Spiralantenne angelötet bzw. bei dem Dipol Masse weggelassen – kein Erkennen des Senders. Abgelötet, ging wieder, aber besch.. eidene Reichweite. Nach etlichen Versuchen löste sich dies ganze Rechteck ab- Modul hinüber ?
Was macht man wenn ich über Funk nur ein Relais schalten will ?
Dann würde ich so ein Funkrelais kaufen:
https://smile.amazon.de/OWSOO-Empf%C3%A4nger-Fernbedienung-Fernschalter-Fernbedienungen/dp/B076Q4HDNG/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=funk+relais+arduino&qid=1612990015&sr=8-3
Wie du den Sender mit deinem Arduino (oder anderem MCU) und einem Funkmodul simulierst, steht hier:
https://wolles-elektronikkiste.de/funksteckdosen-und-handsender
Hallo Wolfgang,
machst dir ja viel Arbeit mit der WebSeite.
Mir ist es wie dem Kai gegangen.
Mit den beschreibenen Modulen hatte ich Probleme.
Ich bin dann auf die bidirektionalen Module HC-12 umgestiegen.
Diese hängt man einfach an die serielle Schnittstelle mit 9600 Baud.
Vorsicht es gibt alte und neue, die sich über Kreuz nicht vertragen.
Mit #include darfst Du beim Nano nicht mehr als 60% Ram brauchen.
Ich betreibe einen Smart-Home-Master und aktuell 4 Slaves.
Die Slaves antworten, wenn der Master Sie aufruft, wie in der Schule.
Einer meiner Slaves tastet, mittels IR-Reflektions-Lichtschranke, die Scheibe eines alten Stromzählers ab.
Weiter viel Spaß im Legen.
VG Ignaz
Hi Ignaz, vielen Dank! Ich wollte immer mal eine Fortsetzung machen und habe dazu auch schon ein paar HC-12 hier (unausgepackt) herumliegen. Danke für die Hinweise, die werden mir sicherlich helfen! VG, Wolfgang
Hallo Wolle,
Weißt du, ob es die Möglichkeit gibt, die Trägerfrequenz von 433.xx Mhz etwas nach links oder rechts zu verschieben?
Gruß
Max
Hallo Max, die Frequenz „macht“ der Oszillator auf den Modulen. Also lässt sich die Frequenz nur mit einem anderen Oszillator variieren. Ob es da Alternativen gibt knapp neben 433 MHz, weiß ich nicht. Interessanterweise ist auf dem rxb8 Modul ein Oszillator mit der Aufschrift 423.22, also vielleicht gibt es da etwas. VG, Wolle
Hallo Wolfgang,
ein sehr guter Artikel. Ich hatte mir darauf hin ein Empfänger Modul RX8B gekauft und meine Empfangsprobleme waren vorbei.
Ich betreibe ein Sendemodul mit 3.3V und schalte einen Digital Ausgang des ATMEGA328 für den Sendezeitraum auf HIGH um das 433 Mhz Sendemodul mit Strom zu versorgen. Nach dem senden wird der Ausgang wieder LOW geschaltet und das Modul stromlos. Der Strombedarf beim Senden ist sehr gering ( > 5mA) und der ATMEGA328 scheint damit keine Probleme zu haben. Allerdings war die Reichweite mit 3.3V trotz Antenne deutlich geringer als bei einer 5 V Versorgungsspannung. Dank dem besseren Empfänger klappt in meinem Setup nun alles.
In den Sendepausen (Sleepmode) werden lediglich 0.02 mA Strom verbraucht. Versorgt wird das über ein 0.50 Euro Step Up Booster und zwei AA Zellen in Reihe. Ich bin gespannt wie lange die Batterien halten. Theoretisch sollten die 3.3V so lange vorhanden sein bis jede Zelle weniger als 0.4V Spannung liefert. Dann wären diese schon sehr leer und der ATMEGA328 schaltet vorher nicht wegen zu geringer Spannung ab.
Eine Frage habe ich an Dich. Ist Dir zu dem Thema Kollisionen etwas aufgefallen? Wenn also mehrere 433 Mhz Module zeitgleich senden. Ich möchte gerne 4-5 gleichzeitig betreiben.
Gruß Christian
Hallo Christian,
bei den Funkmodulen stellt sich in der Tat die Frage, wie man dem Empfänger, der gemeint ist mitteilt, dass er gemeint ist bzw. den anderen, dass sie nicht gemeint sind. Dieselbe Frage stellt sich bei mehreren Sendern und einem Empfänger. Ich würde dazu individuelle Kennungen vergeben, diese mitsenden und auf der Empfängerseite prüfen, ob die Nachricht die richtige Kennung enthält bzw. von welchem Sender die Nachricht stammt. Was passiert, wenn zwei Sender genau gleichzeitig senden oder ein 433MHz Störsender dazwischen funkt, kann ich sagen. Aber wahrscheinlich wird die empfangene Nachricht keinen Sinn ergeben. Dazu würde ich irgendeine Art von Plausibilitätscheck einbauen. Das Vorhandensein der Kennung ist ja schon mal ein Anfang. Man könnte die Kennung am Ende der Nachricht nochmal schicken. Oder so etwas wie eine Checksumme (z.B. Anzahl Zeichen). Oder grundsätzlich zweimal senden und auf Identität prüfen. Viel Erfolg!
VG, Wolfgang
Hallo Wolfgang,
vielen Dank für Deine Antwort. So wie Du es beschreibst halte ich das auch für sinnvoll. Eine ID beim Sender und eine Art Check ob das Paket sinnvoll ist. Wie soll es anders sein gibt es so etwas schon. Eine kleine/schlanke Bibliothek mit Sender ID und CRC Check. Ich werde damit mal „spielen“ und Erfahrung sammeln.
Falls es klappt super und falls nicht kann man diese Bibliothek als Starthilfe nehmen und davon lernen.
Diese Bibliotheken sind auf GitHub zu finden:
https://github.com/zeitgeist87/RFReceiver
https://github.com/zeitgeist87/RFTransmitter
Liebe Grüße
Christian
Hallo Christian, diese Bibliotheken muss ich mir auch mal anschauen. Vielen Dank für die Links. VG, Wolfgang
Hallo Wolfgang und Christian,
zuerst mal danke für den interessanten Artikel und die Links!
Falls das Kollisionsthema noch nicht gelöst oder trotzdem noch interessant ist …
Mir ist ein Artikel von Nick Gammon eingefallen, der sich überlegt hat, wie er mehrere Arduinos gemeinsam an einem RS485-Bus ohne Kollisionen betreiben kann. Jeder kann mit allen anderen Busteilnehmern in beiden Richtungen kommunizieren:
http://www.gammon.com.au/forum/?id=11428&reply=2#reply2
Seine Idee „Rolling Master“ kurz zusammengefasst: Alle Busteilnehmer bekommen eine eindeutige ID und reichen eine gedachte „Lizenz um Senden“ reihum weiter. Jeder Arduino hört also zu bis er an die Reihe kommt.
Das funktioniert sehr gut, auch wenn einzelne Busteilnehmer ausfallen sollten.
Diese Idee müsste auch für den Funkbetrieb anwendbar sein.
Viele Grüße
Franz
Hallo Franz, vielen Dank dafür. Dass muss ich mal ausprobieren. Aber abgesehen davon, dass man das auf dieses Problem übertragen könnte, ist das ein wirklich guter Artikel auf den du da verlinkst. Ich bin schon öfter nach kabelbasierter Vernetzung über längere Strecken gefragt worden und das sieht wirklich gut aus. VG, Wolfgang
Einen sehr schönen Blog hast du… 🙂
Ich habe auch die Erfahrung gemacht, dass die XY-MK-5V Empfänger die im Bundle mit den XY-FST (FS1000A) Sendern vertrieben werden, absolut nichts taugen (auch mit Antenne nicht). Ich habe einen Empfänger für ein Wettersensormodul gebraucht. Nach einem Wechsel auf einen RXB6 klappt der Empfang aus dem Garten auch durch Hauswände hindurch einwandfrei (mit Antenne).
Das Empfänermodul habe ich, wie auf dieser Seite (http://www.rflink.nl/blog2/wiring) beschrieben, mit drei Kondensatoren versehen.
Die FS100A Sender funktionieren aber gut.
Gruß Kai
Vielen Dank für’s Feedback und die Hinweise!
Erstaunlich finde dich das das RX8B bei mir auch wunderbar mit 3.3V an einem ESP läuft.
Obwohl doch dick 5V drauf steht !
Ulli
Hi Ulli,
was die Logik Level angeht, ist es nicht so überraschend, da bei 5V TTL Technik alles über 2.7 Volt als HIGH erkannt wird. Aber dass 3.3V ausreichen um die Teile überhaupt zu betreiben, ist schon interessant. Macht in der ESP Welt die Dinge einfacher. Danke für den Hinweis. Vielleicht gibt es Einbußen in der Reichweite (?).
Wolfgang