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