Wie kann ich die Funkübertragung verbessern? 433Mhz

Hallo,

ich möchte gerne per Funk Daten von einem Arduino zum anderen senden, und zwar über eine Entfernung von ca. 10 m mit zwei Holzwänden dazwischen.

Ich habe jetzt 433 Mhz-Module getestet, von denen ich gelesen habe, dass mit denen eine Übertragung über 100 m möglich wäre, aber das habe ich bisher noch nicht geschafft. Bei meinem ersten Versuch konnte ich ohne Antenne ca. 20 cm überbrücken, wobei der Sender mit 5V lief. Mitlerweile habe ich an Sender und Empfänger eine spiralförmige 433Mhz-Antenne angelötet, und den Sender mit 12 V betrieben, was die Reichweite aber nicht merklich erhöht hat. Die Baud-Rate habe ich von ursprünglich 9600 auf 2400 reduziert (ergibt das Sinn?) was aber auch keine Besserung gebracht hat.
Um auszuschließen, dass die Module kaputt sind, habe ich diese auch bereits getauscht. Ich verwende die VirtualWire-Bibliothek, falls das relevant ist…

Wie ich gelesen habe, sollte man idealerweise gerade Antennen verwenden, die parallel zueinander liegen. Sollte ich das in meiner Situation noch testen, oder zeigen die bisherigen Versuche bereits, dass die schlechte Verbindung an der Umgebung (Störeinflüsse) liegen könnte, so dass eine andere Antenne keine wesentliche Verbesserung bringen würde?

Welche Möglichkeiten gäbe es ansonsten noch auszuprobieren? Oder sollte ich einen Wechsel auf andere Module, z.B. mit 868 Mhz (RFM12 oder ähnliches?) in Erwägung ziehen?

Sagamihara: Wie ich gelesen habe, sollte man idealerweise gerade Antennen verwenden, die parallel zueinander liegen. Sollte ich das in meiner Situation noch testen, oder zeigen die bisherigen Versuche bereits, dass die schlechte Verbindung an der Umgebung (Störeinflüsse) liegen könnte, so dass eine andere Antenne keine wesentliche Verbesserung bringen würde?

Spiralförmige Antennen sind mir noch nie begegnet. Zumindest kann ich mich nicht daran erinnern, schon einmal solche Antennen gesehen zu haben.

Das mit den geraden Antennen würde ich jedenfalls unbedingt probieren.

Gruß

Gregor

Schmeiß die billichdinger weg und kauf dir vernünftige, SX1278, RFM69HCW, RFM98

Der Receiver, den Du da einsetzt, der taugt nichts. Das ist ein Superregenerativempfänger.
Damit erreichst Du keinen guten Empfang und schon gar nicht über mehrere Meter.
Kauf Dir einen Superheterodynempfänger (z.B. einen RXB6). Damit betreibe ich meinen Wind- und Regensensor, die über 10 Meter entfernt sind.
Die Spiral-Antennen benutze ich auch. Das funktioniert, wenn man den richtigen Empfänger einsetzt.

Sagamihara:
d3508a27ec36adce3378cbd7ff3d22ba2a5b087b.jpg

Ich kann das auf den Bildern nicht genau erkennen, aber ich glaube das ist nur ein “sehr einfacher” Empfänger.
Kannst du einen Link zu den Modulen posten?
Empfänger mit denen ich gute Erfahrungen gemacht habe sind RXB-12, RXB6 oder RXB8.

Ich verwende immer einen einfachen geraden Draht als Antenne, Länge ca. 17,4 cm.

Auch solltest du Sender und Empfänger nicht so nahe aneinander betreiben sondern mit ca. einen halben bis 1 Meter Abstand.

Übertragungen mit 100m Abstand klingen ziemlich optimistisch finde ich.

Sagamihara: ich möchte gerne per Funk Daten von einem Arduino zum anderen senden, und zwar über eine Entfernung von ca. 10 m mit zwei Holzwänden dazwischen.

Du hast ja alles probiert, was man machen kann.

Das mit den Antennen ist richtig, die sollten aus einem 174 mm langem Draht bestehen. Damit erreichst du die besten Ergebnisse.

100 m kannst du mit optimaler Ausstattung (gute Antenne, besseren Empfänger und optimaler Standort) im freien Feld evtl. erreichen, aber nicht sicher.

Bei mir sind es ca. 20 m durch Betonwände hindurch.

Aber mit bessern Empfängern. Der von slartibartfast vorgeschlagene oder dieser Empfänger. Der von dir verwendete ist def. Müll.

Mit Modulen die eine höhere Frequenz einsetzen, hast du weniger Störeinflüsse aber auch eine geringere Reichweite.

Edit: Noch etwas zu deinem Aufbau. Was du da machst ist "gefährlich". Da zerstörst du leicht mal ein paar Module oder den Arduino. Warum verwendest du kein Steckbrett (Breadboard), ist viel stabiler und sicherer. Musst da nur auf guten Steckkontakt achten.

Noch etwas, das mir auffällt: So wie es auf den Fotos aussieht hängen Sender und Empfänger am selben Arduino. Auch hier könnte ein Problem liegen - je nach verwendetem Code. Ob das "gleichzeitige" Senden und Empfangen funktioniert ist fraglich. Falls möglich würde ich 2 getrennte Arduinos verwenden. Einen mit dem Sender einen mit dem Empfänger.

uxomm: Ich kann das auf den Bildern nicht genau erkennen, aber ich glaube das ist nur ein "sehr einfacher" Empfänger. Kannst du einen Link zu den Modulen posten? Empfänger mit denen ich gute Erfahrungen gemacht habe sind RXB-12, RXB6 oder RXB8.

Ich verwende immer einen einfachen geraden Draht als Antenne, Länge ca. 17,4 cm.

Auch solltest du Sender und Empfänger nicht so nahe aneinander betreiben sondern mit ca. einen halben bis 1 Meter Abstand.

Übertragungen mit 100m Abstand klingen ziemlich optimistisch finde ich.

Genau, ausgestreckte Antenne liefert bessere Ergebnisse. Musst ja auch nicht bei Lambda/4 bleiben. Probiere doch mal bei Sender & Empfänger Lambda/2 (34,8cm) oder Lambda (69cm) falls der Platz reicht.

uxomm:
Auch hier könnte ein Problem liegen - je nach verwendetem Code. Ob das “gleichzeitige” Senden und Empfangen funktioniert ist fraglich.

Nein, gleichzeitig wird nicht funktioieren.
Wenn der Sender sein Signal abgibt, erfolgt keine Abfrage des Empfangsignals.
Da müssen schon 2 Arduino ran.

Danke erstmal @alle für die Antworten!

Die Funkmodule sind solche hier: http://www.ebay.de/itm/5X-433-Mhz-RF-Sender-Empfanger-Receiver-Modul-Wireless-Transmitter-MX-05V-DC5V-/252441619018?hash=item3ac6b16a4a:g:PfEAAOSwZQRYgbr3

und dazu diese Antennen: http://www.ebay.de/itm/251537850853?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Anscheinend sind diese Teile sehr weit verbreitet, denn es gibt auch viele Tutorials, in denen sie verwendet werden. Was mir dabei aufgefallen ist, ist dass die Empfänger, die ich in Youtube-Videos gesehen habe, ein Loch für die Antenne hatten, meine Empfänger hatten aber ein mit Lötzinn gefülltest Loch. Hat das irgendetwas zu bedeuten?

Ich werde mir die vorgeschlagenen Empfänger mal ansehen, aber vorher noch ein paar Antworten zu den anderen Kommentaren:

@uxomm:

Auch solltest du Sender und Empfänger nicht so nahe aneinander betreiben sondern mit ca. einen halben bis 1 Meter Abstand.

Ich habe jeweils einen Empfänger und einen Sender an jedem Arduino angeschlossen, verwendete bei den Tests jeweils den Empfänger eines Arduinos mit dem Empfänger des anderen (Der Empfänger ist auf dem Photo der auf dem Steckbrett am Laptop, der Sender ist der auf der Lego-Kontruktion). Ich habe die nicht benötigten Teile auch vom Strom getrennt, um sicherzugehen, dass dadurch keine Beeinflussung stattfindet.

Übertragungen mit 100m Abstand klingen ziemlich optimistisch finde ich.

Ich habe z.B. diesen Foren-Beitrag gefunden, in dem jemand schreibt, mehrere Hundert Meter wären mit diesem Modulen möglich. https://forum.arduino.cc/index.php?topic=168285.0

Ich hab mit den Teilen schon mehrere hundert Meter überbrückt.

@slartibartfast: Danke für die Stichworte, ich werde mal in die Richtung recherchieren, die Begriffe kannte ich noch gar nicht.

@HotSystems: Bist du denn der Ansicht, dass der Sender okay, und nur der Empfänger das Problem ist? Kann man bei dem verlinkten den selben Sketch verwenden, den ich schon habe, oder wird die Sache dadurch noch komplizierter? Ich habe leider zur Zeit nur ein Steckbrett, aber vielleicht ändere ich das demnächst mal...

Sagamihara: Die Funkmodule sind solche hier: http://www.ebay.de/itm/5X-433-Mhz-RF-Sender-Empfanger-Receiver-Modul-Wireless-Transmitter-MX-05V-DC5V-/252441619018?hash=item3ac6b16a4a:g:PfEAAOSwZQRYgbr3

Naja, solche Empfänger (sehen zumindest genauso aus) habe ich hier auch noch herumliegen (weil zwar vor langer Zeit gekauft, aber dann doch die "besseren" verwendet). Das sind zwar nicht die Besten aber über kurze Distanzen (ein paar Meter) sollte das trotzdem zum Testen funktionieren. Habe also schnell mal dieses Setup aufgebaut: Arduino (UNO) 1: Sender mit VirtualWire-Beispiel-Sketch "Transmitter", Antenne 17.4 cm, gerade Arduino (UNO) 2: Empfänger mit VirtualWire-Beispiel-Sketch "Receiver", Antenne 17.4 cm, gerade Abstand Sender - Empfänger ca. 2 Meter. Funktioniert auf Anhieb und tadellos.

Bei der Empfängerseite entstörkondensatoren anbringen und das Empfängermodul etwas Abstand halten zu anderen Komponenten, insbesondere Netzteile und auch USB Zeug stört (verschlechtert z.B. sofort den Digitalradio Empfang meines Radios)

Das bedeutet, dass ich den Arduino weiter vom Modul entfernen soll? Werde ich gleich mal testen. Mir ist vorhin übrigens aufgefallen, dass ich sporadisch Daten über ca. 4-5 m Entfernung empfangen konnte, teilweise in dem Moment, als ich die Antenne berührt habe, aber ich kann nicht einschätzen, ob das etwas zu bedeuten kann. Eine Datenübertragung kam auch ohne Berührung zustande, aber die meisten Sendungen kamen nicht an.

Die Idee mit der Richtantenne hört sich interessant an, aber ist das für einen Anfänger umsetzbar? Ich werde mir mal den Wikipedia-Artikel zur Wendelantenne durchlesen...

Für den Vorschlag mit den Ferritkernen bin ich wohl auf jeden Fall zu unerfahren, ich wüßte nicht, wie ich das umsetzen sollte.

kulturbereicherer: Man kann den Empfang dieses Moduls ein klein wenig verbessern wenn man diese Drossel oder was das ist mit dem Schraubenzieher so dreht dass der Emfpang am stärksten ist...

Bitte auf keinen Fall daran drehen. Ohne vernünftige Messgeräte machst du es nur schlimmer. Obwohl, das geht fast garnicht. ;) An Funkmodulen ohne die notwendigen Messgeräte etwas zu ändern geht immer schief.

Ja, der Sender ist OK, nur der Empfänger ist Müll. Und der Sketch funktioniert weiterhin, auch bei den besseren Empfängern.

Sagamihara: Das bedeutet, dass ich den Arduino weiter vom Modul entfernen soll? Werde ich gleich mal testen. Mir ist vorhin übrigens aufgefallen, dass ich sporadisch Daten über ca. 4-5 m Entfernung empfangen konnte, teilweise in dem Moment, als ich die Antenne berührt habe, aber ich kann nicht einschätzen, ob das etwas zu bedeuten kann. Eine Datenübertragung kam auch ohne Berührung zustande, aber die meisten Sendungen kamen nicht an.

Dein Körper verlängert die Antenne und zeigt das eine vorhanden Antenne nicht optimal ist.

Die Wendelantennen haben den Vorteil, die sind recht klein, haben dadurch aber einen schlechteren Wirkungsgrad gegenüber dem einfachen 17,4 cm langen Draht. Und hier machen die 2 cm länger oder kürzer den Kohl nicht fett. Da macht sich nicht bemerkbar.

Die Idee mit der Richtantenne hört sich interessant an, aber ist das für einen Anfänger umsetzbar? Ich werde mir mal den Wikipedia-Artikel zur Wendelantenne durchlesen...

Das ist unrealistisch, da die Richtantennen für die verwendete Frequenz schon recht groß werden.

Für den Vorschlag mit den Ferritkernen bin ich wohl auf jeden Fall zu unerfahren, ich wüßte nicht, wie ich das umsetzen sollte.

Und auch hier solltest du nicht übertreiben, da der Aufwand nicht gerechtfertigt ist.

kulturbereicherer: Quatsch... man stellt den Sender so ein das er periodish was sendet und bei der Empfängerseite eine Schaltung wo z.B. ein Piezolautspreher auf die Empfangenen Signale kurz anspringt.

Dann den Abstand erhöhen wo der Empfänger gerade so keinen Empfang mehr hat und dann an der Schraube drehen bis man das Signal wieder hört... Abstand weiter entfernen und entsprehend minimal nachjustieren.

Na du bist ja der Große Funkspezialist, das erkenne ich sofort.

Das mit dem Schraubenzieher traue ich mir auch nicht wirklich zu, aber ich werde es im Hinterkopf behalten, falls die anderen Vorschläge nicht ausreichen. Bzw. denke ich, dass ich, sobald ich experimentell herausgefunden habe, welche Antenne besser ist, dann doch auf den genannten besseren Empfänger umsteigen werde!

Ich habe auf jeden Fall eben den Abstand des Empfängers vom Arduino bzw. Laptop vergrößert - das hat merklich etwas gebracht! Die Übertragung funktioniert jetzt auf ca. 1m Entfernung. Als nächstes werde ich die 17,4cm Antenne ausprobieren, wie uxomm sie verwendet.

Sagamihara: Das mit dem Schraubenzieher traue ich mir auch nicht wirklich zu, aber ich werde es im Hinterkopf behalten, falls die anderen Vorschläge nicht ausreichen. Bzw. denke ich, dass ich, sobald ich experimentell herausgefunden habe, welche Antenne besser ist, dann doch auf den genannten besseren Empfänger umsteigen werde!

Lass das rumdrehen, nimm eine bessere Antenne an einem noch besseren Empfänger und gut ist.

Mit den geraden Antennen konnte ich jetzt über 2 Stockwerke empfangen :)

Werde aber wie vorgeschlagen trotzdem nach einem besseren Empfänger Ausschau halten.

Was die Software angeht: Ist in virtualwire eigentlich irgendein Mechanismus eingebaut, der prüft, ob die Nachricht korrekt angekommen ist? Also eine Art Prüfsumme oder ähnliches? Oder wäre es denkbar, dass nur eine halbe Nachricht empfangen wird?

Sagamihara:
Mit den geraden Antennen konnte ich jetzt über 2 Stockwerke empfangen :slight_smile:

Werde aber wie vorgeschlagen trotzdem nach einem besseren Empfänger Ausschau halten.

Was die Software angeht: Ist in virtualwire eigentlich irgendein Mechanismus eingebaut, der prüft, ob die Nachricht korrekt angekommen ist? Also eine Art Prüfsumme oder ähnliches? Oder wäre es denkbar, dass nur eine halbe Nachricht empfangen wird?

Na bitte, ist doch schon ein kleiner Erfolg.

VirtualWire hat keine Prüfmethoden eingebaut, darum musst du dich kümmern.
Was genau möchtest du übertragen ?

Ja, super, dass es jetzt schon mal prinzipiell funktioniert. Einen besseren Empfänger würde ich mir auf jeden Fall zulegen.

Sagamihara: Was die Software angeht: Ist in virtualwire eigentlich irgendein Mechanismus eingebaut, der prüft, ob die Nachricht korrekt angekommen ist? Also eine Art Prüfsumme oder ähnliches?

Ja, VirtualWire sendet sowohl die Nachrichtenläng als auch eine Prüfsumme mit. Siehe VirtualWire.h bzw. auf der Website http://www.airspayce.com/mikem/arduino/VirtualWire/ wo es heißt:

Messages are sent with a training preamble, message length and checksum.

vw_get_message()

gibt true zurück, wenn die Prüfsumme OK ist.

uint8_t vw_get_message(uint8_t* buf, uint8_t* len) // Get the last message received (without byte count or FCS) // Copy at most *len bytes, set *len to the actual number copied // Return true if there is a message and the FCS is OK