433 MHz Funk mit dem Arduino

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 

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:

Die Transmitterseite

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. 

Von links nach rechts: RXB12, RXB8 und RXB6

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. 

Schreibe einen Kommentar

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