Zum Inhalt springen
RWS-371 RF Modul

Funkübertragung von Messwerten mit dem RF Link Modul

    Das RF Link Modul (Receiver und Transmitter) aus der RWS-371-Serie ist ein ziemlich günstiger Weg, Signale kabellos über kurze Distanzen zu übertragen. Dieses Beispiel zeigt, wie man es verwendet. Als Transmitter kannst Du die Module TLP 434, 434-A oder 916-A, als Receiver die Module RLP 434, 434-A, 916-A oder 916-F verwenden.

    Die Funktionsweise der Module ist sehr einfach. Wenn der Daten-Pin des Sendemoduls getriggert wird, sendet es ein Signal. Der Empfänger empfängt es und schickt ein Signal an einen Pin des Mikrocontrollers.

    Damit man mit dieser Funktion etwas Sinnvolles anstellen kann, werden wir die VirtualWire Bibliothek von Mike McCauley verwenden, die es uns ermöglicht, komplexe Daten zu übertragen.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Die Bibliothek kannst Du Dir von dieser Seite herunterladen. Sie muss in den Libraries Ordner im Arduino-Benutzerordner kopiert werden. Danach musst Du die Arduino IDE erneut starten.

    Ich schlage vor, dass Du die Schaltung einfach nachbaust und die Programme auf die beiden Mikrocontroller überträgst. Der Code ist ziemlich selbsterklärend: Sechs analoge Inputs des Sendenden Mikrocontrollers werden ausgelesen und mittels RF Link Modul verschickt. Der empfangende Mikrocontroller sendet die empfangenen Daten dann an die serielle Schnittstelle. Mit dem seriellen Monitor der Arduino-Software kann man sich die Daten ansehen.

    Circuits using Arduino UNO

    RF Link Modul mit Arduino

    Circuits using the Teensy 3.1

    RF Link Modul mit Teensy

    Code für den Sender

    /*.............................................................
    transmitter
    
    build on example "Sending Multiple Variables Using VirtualWire. Transmitter"
    by Author: Rodrigo Mompo Redoli
    For controlrobotics.rodrigomompo.com
    ..............................................................*/
    #include <VirtualWire.h>
    
    int sensorPins[] = {A0,A1,A2,A3,A4,A5}; // The pins were sensor are attached
    char Sensor1CharMsg[21];// The string that we are going to send trought rf 
    
    void setup() {
      // VirtualWire setup
      vw_set_ptt_inverted(true);
    
      vw_setup(2000); // Bits per sec
      vw_set_tx_pin(12);// Set the Tx pin. Default is 12
    }
    
    void loop() {
      sprintf(Sensor1CharMsg, "%d,%d,%d,%d,%d,%d", analogRead(sensorPins[0]), analogRead(sensorPins[1]), analogRead(sensorPins[2]), analogRead(sensorPins[3]), analogRead(sensorPins[4]), analogRead(sensorPins[5]));
      delay(5);
    
      vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
      vw_wait_tx(); // Wait until the whole message is gone
     
      delay(40);
    }

    Code für den Empfänger

    /* Receiver 
    
    build on example "Sending Multiple Variables Using VirtualWire."
    by Author: Rodrigo Mompo Redoli
    For controlrobotics.rodrigomompo.com
    ..............................................................*/
    
    #include <VirtualWire.h>
    
    const int led_pin = 13;
    const int receive_pin = 12;
    
    int maxSensorData = 6;
    int sensorData[6];
    
    char StringReceived[22]; 
    
    void setup() {
      Serial.begin(9600);                        // initialising serial
      vw_set_rx_pin(receive_pin);                // virtual wire setup
      vw_set_ptt_inverted(true);                 // virtual wire setup
      vw_setup(2000);                            // bits per second
      vw_rx_start();                             // Start the receiver PLL running
    } // END void setup
    
    void loop(){
      uint8_t buf[VW_MAX_MESSAGE_LEN];
      uint8_t buflen = VW_MAX_MESSAGE_LEN;
      if (vw_get_message(buf, &buflen)) {        //Taking the data from the control base
        int i;
        for (i = 0; i < buflen; i++) {            
          StringReceived[i] = char(buf[i]);      // data to array
        }
        // split data into array sensorData
        sscanf(StringReceived, "%d,%d,%d,%d,%d,%d", &sensorData[0], &sensorData[1], &sensorData[2], &sensorData[3], &sensorData[4], &sensorData[5]); // Converts a string to an array
      }
      for (int i=0; i<maxSensorData; i++){       // nice output
        Serial.print("Sensor "); Serial.print(i); Serial.print(": "); 
        Serial.print(sensorData[i]); Serial.print("\t");
      }
      Serial.println("");                        // linefeed
      // reset variable StringReceived
      memset(StringReceived, 0, sizeof(StringReceived));
      delay(5);
    }

    Arduino

    RF Link Modul mit Arduino

    Teensy

    RF Link Modul mit Teensy

    Montage auf Breadboard. Für den Versuchsaufbau teilen sich beide Controller eine Stromquelle. Das ist natürlich nicht nötig.


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    17 Gedanken zu „Funkübertragung von Messwerten mit dem RF Link Modul“

    1. hi…
      ich hab ne allgemeine frage zur drahtlosen übertragung von daten/funktionen…

      ist es möglich die funkverbindung irgendwie fix zu koppeln?
      also das ich sobald ich die schaltung anschalte nur ein bestimmter funkempfänger angesprochen wird…

      ich habe vor mehrere empfänger mit unterschiedlichen sendern zu steuern…

      gruss marc

    2. Hallo zusammen,

      Ich nutze diesen Codes zur Übertragung von Temperaturen und in einem Menü vorgegebenen Werten.

      Ich habe jetzt zwei Probleme und hoffe das mir jemand helfen kann……

      Ich versende die analogen Eingänge der Temperaturfühler (NTC mit 1 MOhm bei 25 °C)

      Nehme diese werte und lasse sie mit der gleichen Formel umrechnen wie am Sender. Zum einem weichen die Daten m.e. zu sehr ab und es würde mich interessieren wie diese Abweichungen glätten kann….

      Das andere Problem ist:

      Ich gebe die werte an ein TFT-Display und an einen Warmsummer.

      Gedanke War, wenn die Temperatur zu sehr abweicht soll der Summer ansprechen und das Display auch eine Aktion ausführen. Aber die werte bleiben einfach stehen und es passiert nichts weiter. Würde man dem TFT vetrauen könnte man denken das sich die Temperatur nicht verändert. Ich will aber das wenn nichts mehr empfangen wird ich das aufnehme und umsetzten kann…

      HILFE !!!!!!! :-)

    3. Hallo,
      Ich bin Anfänger im Umgang mit Arduinos und Programmierung.
      Mein Ziel war es die (eine) Achsenposition eines Joysticks zu senden.
      Dabei nutze ich zwei Arduino UNO und die folgenden Radiofrequenzmodule:
      http://www.ebay.de/itm/like/401028290486?lpid=106&chn=ps&ul_noapp=true
      Ich den Code auf die Arduinos geladen und die Module wie auf den Bilder gezeigt angeschlossen. Nun zeigt der Serielle Monitor des Empfängers für alle Sensoren 0 an.
      Wo könnte das Problem liegen?
      Funktioniert der Code nicht mit den genannten Sender und Empfänger?
      Gruß Marius

    4. Rafic with the NANO and after playing with it for a while i got it to trnismat but never had success receiving using the nano Having 2 nano setups side by side on 2 computers, I have to type something in the Serial Monitor on the receive one before it will receive. It appears after reset, something isn’t set up correctly until you send it a character or two on the serial. Haven’t checked yet if it’s the serial chip on the nano, or code side not working until a char comes in.

    Die Kommentarfunktion ist deaktiviert.