zurück

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

22.03.2020

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 (-)

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 interrupt-fä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.