Arduino Tutorial 37: 433 MHz Sender & Empfänger

In diesem Tutorial möchte ich den 433MHz Funksender & Empfänger erläutern.

433 MHz Sender (oben) und Empfänger (unten).
433 MHz Sender (oben) und Empfänger (unten).

Ich hatte bereits ein Set mit einer Fernbedienung im Tutorial Arduino Lektion 34: 433MHz Funksender erläuter. Jedoch war der Sender eine Fernbedienung. In diesem Tutorial wird der Sender durch einen Microcontroller gesteuert.

Technische Daten

Sender

  • Abmaße – 19mm x 19mm
  • Betriebsspannung – 3,5V bis 12V
  • Sendeleistung – 10mW
  • Reichweite – 20m bis 200m (je nach Umgebung und Spannung)
  • Betriebsart – AM
  • Empfangsfrequenz – 433 MHz

Empfänger

  • Abmaße – 30mm x 14,7mm
  • Betriebsspannung – 5V
  • Empfängerempfindlichkeit –  -105 dB
  • Sendefrequenz – 433,92 MHz

Schaltplan

Sender

Der Sender verfügt über 3 Anschlüsse welche mit dem Arduino UNO wie folgt verbunden werden.

SenderArduino UNO
 GND Ground
 VCC 5V
 Data digitaler PIN 9
 
433MHz Sender auf Steckplatine, verbunden mit einem Arduino UNO.
433MHz Sender auf Steckplatine, verbunden mit einem Arduino UNO.

Empfänger

Der Empfänger verfügt über 4 PINs von denen “nur” 3 mit dem Arduino wie folgt verbunden werden.

SenderArduino UNO
 GND Ground
 VCC 5V
 Data* digitaler PIN 2
*   In diesem beispiel verwende ich den PIN neben dem GND PIN des Empfängers.
433MHz Empfänger auf Steckplatine, verbunden mit einem Arduino UNO.
433MHz Empfänger auf Steckplatine, verbunden mit einem Arduino UNO.

Drahtantenne

Der Sender und Empfänger verfügt jeweils über einen Lötpunkt zum Anschluss einer Drahtantenne welche man selber ganz leicht erzeugen kann.

Wickelantenne für das 433MHz, 4 Kanal Funkmodul
Dieses Video ansehen auf YouTube.
433Mhz Funksender / Empfänger mit Wickelantenne
433Mhz Funksender / Empfänger mit Wickelantenne

Quellcode

Für den nachfolgenden Quellcode wird die Bibliothek RCSwitch benötigt, diese kann vom GitHub Repository  https://github.com/sui77/rc-switch geladen werden.

Zuerst fangen wir mit einem einfachen Beispiel an. Es soll “nur” eine Dezimalzahl gesendet und empfangen werden. Dazu benötigt man jeweils einmal den Sender und Empfänger und zwei Microcontroller.
Ich nutze in diesem Beispiel zweimal den Arduino UNO.

Aufbau, einfache Schaltung 433MHz Sender & Empfänger am Arduino UNO.
Aufbau, einfache Schaltung 433MHz Sender & Empfänger am Arduino UNO.

Sender

#include <RCSwitch.h>

RCSwitch rcSwitch = RCSwitch(); 

void setup() {
  // Sendemodul an dem digitalen PIN 9 angeschlossen.
  rcSwitch.enableTransmit(10);
}
void loop() {
  // Senden der Zeichenkette "Hallo Welt!"
  rcSwitch.send(9876,24);
  //Pause von 1sek.
  delay(1000);
}

Empfänger

#include <RCSwitch.h>

RCSwitch rcSwitch = RCSwitch();

void setup() {
  Serial.begin(9600); //Begin der seriellen Kommunikation mit 9600 baud.
  // Empfängermodul ist am digitalen PIN 2 angeschlossen
  // dies ist der Interrupt-Pin "0".
  rcSwitch.enableReceive(0);
}

void loop() {
  if (rcSwitch.available()){ //Wenn Daten verfügbar sind.
    //Ausgabe des aktuellen Zeitstempels (seitdem der Arduino gestartet wurde).
    Serial.print("[");
    Serial.print(millis());
    Serial.print("] - ");
    //Ausgabe des gelesenen Wertes
    Serial.println( rcSwitch.getReceivedValue() );
    
    //Zurücksetzen des Empfängers.
    rcSwitch.resetAvailable();
  }
}

Das senden einer einfachen Dezimalzahl ist mit der Funktion rcSwitch.send(Zahl, Bitlänge) ziemlich einfach. Anders sieht es aus wenn man eine Zeichenkette senden möchte, hier muss man die Zeichenkette zuerst in einzelne Character zerlegen und diese wiederum in Bytecode darstellen.

Reichweite

Die Reichweite des Senders und Empfängers ist mit 20m bis 200m angegeben, jedoch fließen hier folgende Faktoren mit ein:

  • Spannung,
  • Themperatur,
  • Störungsquellen (andere Funkstationen),
  • u. v. a. m.

Ich habe nun auf freiem Feld den Abstand gemessen.
Folgende mögliche Störungsquellen waren gegeben:

  • Handy,
  • Strommast (ca. 115m entfernt),
  • Siedlung (ca. 250m entfernt),
  • Temperatur  5°C

Der Sender bzw. der Arduino UNO am Sendemodul wurde mit einer 9V Blockbatterie betrieben, der Empfänger wurde mit einer Powerbank betrieben, beide Geräte befanden sich jeweils in einem Kunststoffgehäuse.

Es wurde eine maximale Reichweite von 23m erreicht.

 

 

14 Kommentare

  1. Hallo,

    ich habe Ihren Blog entdeckt und interessiere mich als Hobbybastler sehr für Elektronik. Toll Ihre Seite!
    Ich habe vor mir eine Zeitmessanlage mit 3 Laserlichtschranken die per Funk oder Wlan kommunizieren zu bauen. Ich bin Trainer einer Jugendfußballmannschaft.
    Wäre es für Sie vorstellbar, da Sie sich bestimmt viel besser in der Programmierung auskennen, mir unter die Arme zu greifen?
    Die Abweichung des Messergebnisses sollte natürlich sehr gering sein (1/100 vlt)
    Welchen Weg würden Sie gehen?
    1.) Drei Sender mit Arduino /LS/866MHzSender und 1 Arduino mit Display/Taster/866MHzEmpfänger zum Auswerten?
    2.) Oder das ganze per Wlan mit z.B.: NodeMCU
    3.) Oder Variante 1 mit 433MHz-Technik (soll aber wohl sehr störanfällig sein.

    Die Anlage soll drinnen wie draußen verwendet werden können. Stromnetzunabhängig sein und extrem genau sein.

    Würde mich über ein kleines Feedback sehr freuen.

    LG Hardy aus Teltow/Berlin.

    1. Hi,

      danke für Ihr Lob.
      Ich würde Ihnen empfehlen auf WLAN zu wechseln denn dieses hat eine größere Reichweite und vorallem die Möglichkeiten sind deutlich höher.
      Für Ihr Vorhaben würde ich sogar noch etwas weiter gehen:
      1. Laser Lichtschranken (https://draeger-it.blog/arduino-lektion-41-ky-008-laser-pointer-sender-empfaenger/)
      2. SD Card Shield mit Uhr (RealtimeClock) (https://draeger-it.blog/wemos-d1-mini-shield-sd-card-shield-mit-realtimeclock/)
      2. Als Sender für die Lichtschranken -> Wemos D1 mini (https://draeger-it.blog/wemos-d1-mini-uebersicht/)
      3. Als Empfänger zum Daten sammeln auch ein Wemos D1 mini
      4. Ein Handy / Tablet zum darstellen einer Webseite
      5. 2x Powerbank mit min 5000 mAh für den Betrieb der Microcontroller

      Die Laser Lichtschranke wird mit dem Wemos D1 mini verbunden und sendet beim Auftreten einer Aktion (Lichtstrahl durchbrochen) ein Signal an den zweiten Wemos D1 mini welcher dann einen Zeitstempel aufnimmt.
      Des Weiteren ist eine kleine Webseite auf dem Wemos D1 mini enthalten welche eine Schaltfläche enthält um den Start durchzuführen (hier könnte man überlegen mit einem zusätzlichen Akustischen Signal zu arbeiten).
      Nachdem Start wird der Sprinter / Läufer irgendwann die Lichtschranke durchqueren und das zweite Signal wird genutzt um die Zeitdifferenz für die Strecke zu berechnen und auf einer SD Karte abzuspeichern und / oder aber auf der Webseite in einer Tabelle darzustellen.

      Mit freundlichen Grüßen,

      Stefan Draeger

      1. Schönen Abend, ich bin neu in der Welt der Microcontroller und habe mir ein Elegoo Starterset gekauft. Einmal zum Probieren. Was ich mir vorstelle wäre folgende Anwendung: Temperaturmessung meines Swimmingpool (Wasser), etwa 5 Meter entfernt Lufttemperatur, Feuchtigkeits und Luftdruckmessung. Das ganze soll in meinem Wohnzimmer (ca 35 m vom Pool entfernt) angezeigt werden. Was würden Sie raten?

        Beste Grüße
        Peter Rauscher

        1. Hallo Peter,

          ich würde hier einen Temperatursensor DS18B20 empfehlen, diesen Sensor gibt es in einem gegossenen Gehäuse mit einem langen Anschlußkabel, dazu würde ich den DHT22 für die außentemperatur und die rel. Luftfeuchtigkeit empfehlen (oder etwas günstiger aber etwas ungenauer den DHT11), für die Messung des Luftdrucks würde ich den BME280 empfehlen. Die Übertragung könnte per Wifi oder LAN Kabel erfolgen. Auch dafür gibt es passende Module für den Arduino UNO R3. Einfacher würde es natürlich mit einem ESP32 gehen da dieser gleich eine WiFi Schnittstelle und auch genügend GPIOs für die Sensoren bietet.
          Die Programmierung würde in beiden Fällen über die Arduino IDE funktionieren. Ein weiterer Vorteil beim ESP32 ist das dieser auch über ESP Easy konfiguriert werden kann und somit eine recht umfangreiche Programmierung entfällt.

          Gruß,

          Stefan Draeger

  2. Hello from United States. I just got my arduino motherboard and am going to make EMP…do you have a tutorial in English?

    1. Hello,

      thanks for your interessting, but at this time i don’t write tutorials in english.
      My english is not so good.

      Thanks and Best Regards,

      Stefan Draeger

  3. Huhu, für weitere Distanzen habe ich ein kleines Step-Up Modul womit ich die Senderplatine mit 12V versorge bzw. auch den Pro Mini.

    Dies sind aber “Sendestationen” die ich nicht lange am Stück in Betrieb habe, weil die 18650 sonst auch nicht ewig halten würde, bzw. öffter geladen werden müssten.

  4. Hallo!
    Das Tutorial ist toll und verständlich, vielen Dank dafür! Leider bin ich kurz vorm Verzweifeln, liegt aber vermutlich an meinen eigenen beschränkten Kenntnissen…
    Ich möchte zwei Arduino Nano (Nachbau von elegoo, ATmega328) miteinander sprechen lassen. Ziel ist es, eine Fernsteuerung für ein Kostüm zu bauen (soll später Servos und LEDs fernsteuern) – also einer ist der Sender und einer der Empfänger. Ich habe exakt die gleichen Funkmodule wie im Tutorial und das Testprogramm eingebunden, aber mein Empfänger bekommt einfach keine Daten. Das Modul hab ich auch schon getauscht, weil ich fünf davon habe, also ein Defekt sollte ausgeschlossen sein ^^
    Ich habe auch schon Drahtantennen angelötet und die Module liegen nur wenige Zentimeter nebeneinander, an der Reichweite kann es nicht liegen.
    Ich vermute, es liegt an den falschen Pinnummern, nur kenne ich mich nie aus, welche Nummerierung hier gilt.
    Was muss bei rcSwitch.enableReceive(pin) für ein Wert rein, wenn der Empfänger am digitalen Pin 2 angeschlossen ist beim Nano?
    Der Sender wiederum ist am anderen Arduino Nano am digitalen Pin D5 angeschlossen… was für eine Nummer muss hier rein?
    Müssen die Pins evtl. explizit als OUTPUT definiert werden, weil das ist nicht im Programm enthalten?
    Ich habe jetzt schon so viele Kombinationen durchprobiert, ich bin echt ratlos…

    Um eine Anwort wäre ich sehr, sehr dankbar, da das ganze Kostümprojekt auf den Einsatz einer Fernbedienung angewiesen ist.

  5. Hallo und guten Abend,
    ich bin im 74. Lebensjahr und habe mir zuhaus die Bewässerungssteuerung im Garten mit den Sonoff-Platinen (WLAN-gesteuerte Relais – eWeLink) aufgebaut. Da es nicht immer praktisch ist, mit dem Handx im Garten zu hantieren, wollte ich gern die Steuerung auch über die RF-Bridge mit einer Fernbedienung 433,92 MHz bedienen können. Die mir zugeschickten FB’s kann man zwar clonen, aber – mit welchem Code / von welcher FB?
    Frage: Kann man diese kleinen FB’s (4 Tasten) gezielt mit Arduino oder anderweitig programmieren? Und welchen Code stellt man dann am besten ein?

    1. Hallo Gerhard,

      man müsste zunächst die Fernbedienungen auslesen und dann könnte man diese ggf. in die vorhandene Schaltung einbauen.

      Jedoch habe ich bisher wenig mit den Sonoff Geräten gemacht.

      Gruß,

      Stefan Draeger

  6. Hallo ersten super tolle Seite.

    Da hätt ich eine Frage, wäre es möglich mittels 433 mhz Sender und Empfänger zu eruieren wie weit sie von einander entfernt sind? Würd was suchen was mir im cm bereich auch durch die wand anzeigt wie weit sie von einander entfernt sind.

    1. Hi,

      leider gibt es nicht die Möglichkeit das mit einem 433Mhz Sender / Empfänger zu lösen. Eventuell kannst du dieses mit einem iBeacon über Bluetooth 4.2 (BLE) lösen. Jedoch ist dieses gerade im Gebäude sehr ungenau.

      Gruß,

      Stefan

  7. Servus,
    Super informative und übersichtliche Seite!
    Ich möchte mein erstes Microcontroller-Projekt angreifen.
    Und zwar möchte ich die Temperaturen zweier Pufferspeicher mithilfe von zwei DS18B20 abfragen, und die Temperaturen aus dem Keller per Funk mit einem Arduino in das 1. EG senden und auf einem Arduino auf ein LCD-Display ausgeben.
    Meinen Sie, ich kann die Funkübertragung mit einem solchen 433 MHz Model realisieren, oder würden sie mir eine bessere Alternative vorschlagen?
    Bin sehr dankbar für alle Tips!
    Besten Dank im voraus!
    Grüße
    Sebastian

    1. Hi Sebastian,

      hier würde ich ein Microcontroller vom Typ ESPx (also ESP8266 oder ESP32) verwenden dieser kann durch die WiFi Schnittstelle in ein ggf. bestehendes Netzwerk eingebunden werden und somit können die Daten an beliebige Orte angezeigt werden.

      Ein 433 MHz Sender schafft nicht wirklich eine gute Leistung und vor allem nicht durch Wände oder Stahlbetondecken.

      Gruß,

      Stefan Draeger

Kommentar hinterlassen

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