433MHz-Module für Arduino (XD-FST/XD-RF-5V)

Eine Möglichkeit über kürzere Distanzen Daten zwischen zwei Arduinos auszutauschen ist der Einsatz des Modulpaares XD-FST/XD-RF-5V. Dies besteht aus einem Sender und einem Empfänger, die mit der Trägerfrequenz von 433MHz arbeiten.

Spezifikationen und Anschlüsse

Empfänger-Modul XD-RF-5V

Pin Verwendung
VCC Spannungsversorgung +5V
Data serial data-Schnittstelle
Data serial data-Schnittstelle
GND Masse (-)

Sender-Modul: XD-FST

Die Reichweite hängt von folgenden Faktoren ab:

Auf der 433MHz-Frequenz werden die gesendeten Daten unverschlüsselt übermittelt. Man sollte sich also darüber im Klaren sein, dass andere Personen die Daten abfangen können.

Pin Verwendung
VCC Spannungsversorgung +3,5V bis +12V
DATA (ATAD) serial data-Schnittstelle
GND Masse (-)

Test eines anderen Empfänger-Moduls siehe: 433MHz-Module für Arduino II. (RXB8)

Verwendete Bauteile

Aufbau

Schaltplan für den 433MHz-Sender
Abb.: Schaltplan für den Sender
Schaltplan für den 433MHz-Empfänger
Abb.: Schaltplan für den Empfänger (es wird nur eine der beiden vorhandenen Datenanschlüsse verwendet).
Wichtig ist, dass PIN 2 für den Datenpin benutzt wird, da dies einer der beiden interruptfähigen Pins des Arduino ist!

Sketch

Für die folgenden beiden Sketche wird die Library https://github.com/sui77/rc-switch verwendet. Es werden zwei LEDs (rot und blau) durch das Drücken von zwei Tastern mit einer drahtlosen Verbindung zu Leuchten gebracht.

..für Sende-Modul

#define PIN_BUTTON_RED   2
#define PIN_BUTTON_GREEN 3
#define PIN_DATA         9

#include <RCSwitch.h>
RCSwitch rcSwitch = RCSwitch();
unsigned long lastAction = 0;

void setup()
{
    pinMode(PIN_BUTTON_RED, INPUT_PULLUP);
    pinMode(PIN_BUTTON_GREEN, INPUT_PULLUP);
    rcSwitch.enableTransmit(PIN_DATA);
}

void loop()
{
    if (millis() - lastAction >= 200) {
        if (digitalRead(PIN_BUTTON_RED) == LOW) {
            lastAction = millis();
            rcSwitch.send(1, 24);
        }
        if (digitalRead(PIN_BUTTON_GREEN) == LOW) {
            lastAction = millis();
            rcSwitch.send(2, 24);
        }
    }
}

..für Empfänger-Modul

#define PIN_DATA     2
#define PIN_LED_RED  8
#define PIN_LED_BLUE 9

#include <RCSwitch.h>

RCSwitch rcSwitch = RCSwitch();
unsigned long val = 0;

void setup()
{
    pinMode(PIN_LED_RED, OUTPUT);
    pinMode(PIN_LED_BLUE, OUTPUT);
    rcSwitch.enableReceive(digitalPinToInterrupt(PIN_DATA));
}

void loop()
{
    if (rcSwitch.available()) {
        val = rcSwitch.getReceivedValue();
        rcSwitch.resetAvailable();
    }

    if (val == 1) {
        digitalWrite(PIN_LED_RED, HIGH);
    } else if (val == 2) {
        digitalWrite(PIN_LED_BLUE, HIGH);
    }
}

Nun sollte die entsprechende LED auf der Empfängerseite aufleuchten, sobald einer der Taster auf der Senderseite gedrückt wurde.

Verlängerung der Reichweite

Ohne eine zusätzliche Antenne (v.a. am Sende-Modul) werden gewöhnlich nur sehr geringe Übertragungs-Reichweiten innerhalb weniger Meter erreicht. Abhilfe schafft das Anlöten von Antennen an den dafür vorgesehen Lötpunkten auf den Platinen der Module.
Als simpelste aller möglichen Antennen kann man einfach einen langen Draht anbringen, jedoch sollte optimalerweise eine Antenne immer so lange sei wie ein Viertel der Wellenlänge des verwendeten Moduls (oder ein Vielfaches bzw. ganzzahliger Bruchteil dieser Wellenlänge).
λ = c / f (Wellenlänge = Lichtgeschwindigkeit / Frequenz)
Dies wären in diesem Fall:
λ = 299.792.458 m/s / 433MHz = 0,6923 m/(sHz)
Damit ergibt sich für die Länger der Antenne:
LAnt = λ / 4
LAnt = 0,6923 / 4 = 0,173

Damit sollte die Antenne 17,3cm lang sein.
Um die Antenne etwas kompakter zu halten, kann sie auch zu einer Spirale verbogen werden. Solche Antennen kann man aber auch fertig kaufen.
(siehe: Rechner für Antennenlänge)

zurück