Was funkt denn da? 433Mhz Module

Hallo zusammen,

heute möchte ich Ihnen den vorerst letzten Beitrag der Reihe "Was funkt denn da?" vorstellen. Wir beginnen mit einer primitiven Funkstrecke zwischen zwei UNOs. Dazu verwenden wir ein 433Mhz Set aus unseren Onlineshop zusammen mit zwei Controllern. Das E-Book zu den Funkmodulen finden Sie hier. Die Module stecken wir zuerst einfach auf die Unos auf, wie im Bild gezeigt:

Generell ist es nicht ratsam die 433Mhz Module auf einem Steckbrett zu betreiben da das darin enthaltene Metall das Signal streut bzw. stört, aber auf das Thema Störungen kommen wir noch zu sprechen.

Die Idee hinter folgenden Sketchen ist es, ein einfaches High-Signal über die 433Mhz Module vom sendenden zum empfangenden UNO zu übermitteln. Wir beginnen mit dem Code für den Sender:

int data = 7;

void setup(){
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
 pinMode(5, OUTPUT); 
 digitalWrite(5, LOW); // Benutzen wir als GND
 pinMode(6, OUTPUT);
 digitalWrite(6, HIGH); // Benutzen wir als VCC
 pinMode(data, OUTPUT); 
 digitalWrite(data, LOW);  // Für die Daten
}

void loop() {         
  digitalWrite(data, LOW);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
  digitalWrite(data, HIGH);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
}

In unseren vorherigen Beiträgen haben wir gezeigt, wie man einen DVB-T Stick als SDR auf den Raspberry einrichtet und GQRX Installiert. Nun, wir sind dieser Lösung mittlerweile etwas entwachsen und benutzen in diesem Beispiel SDR# unter Windows.

Wie wir sehen funktioniert unser Sketch ganz gut und tut was er soll. Jetzt kümmern wir uns um den Code für den Empfänger:

int data = 5;

void setup(){
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
 pinMode(4, OUTPUT); 
 digitalWrite(4, LOW); // Benutzen wir als GND
 pinMode(data, INPUT); 
 digitalWrite(data, LOW);  // Für die Daten
 pinMode(7, OUTPUT);
 digitalWrite(7, HIGH); // Benutzen wir als VCC
}

void loop() {     // setzt bei Signaleingang die LED auf High
  digitalWrite(LED_BUILTIN,digitalRead(data));
  delay(50);
}

Ist der Code übertragen sollten wir bei jedem High-Signal des Senders ein Aufleuchten der internen LED des Empfängers registrieren. Leider klappt dies überhaupt nicht, wie Sie beim nachbauen dieses Projektes feststellen dürften.

Das hat viele Ursachen, worauf ich allerdings nicht näher eingehen will um den Rahmen dieses Beitrags nicht zu sprengen. Deshalb suchen wir eine Libary die Fehlerkorrekturen enthält und wir komplexere Daten als ein primitives High Low Signal zuverlässig übermitteln kann. Die Lösung für diese Problem ist der Nachfolger der VirtualWire Libary: RadioHead

Diese Bibliothek können Sie nach dem Download über die in der IDE enthaltene Funktion "*.zip Bibliothek hinzufügen"

Wir verwenden für unser Beispiel eine leicht modifizierte Version von ask_receiver und ask_transmitter.

Um nicht auch noch die Pins in der RH_Ask.h ändern zu müssen, verkabeln wir unsere Unos kurzerhand neu. Die in der Libary vordefinierten Pins sind wie folgt belegt:

 433-Modul UNO Receiver UNO Transmitter
VCC 5V 5V
GND GND GND
DATA 11 12

 

Der Code für den Sender:

#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600);
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    const char *msg = "Messdaten"; //zu übermittelnde Nachricht.

    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(200);
}

 

Der Code für den Empfänger:

#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600); // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    uint8_t buf[9]; //Format der zu empfangenden Nachricht
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      Serial.println((char*)buf);         
    }
}

Im seriellen Monitor des Empfängers sehen wir die Ausgabe:

 Viel Spass beim Basteln & bis zum nächsten Mal :)

Letzter Artikel PlatformIO: Erste Schritte
Neuer Artikel Auflösung des OLed-Displays angleichen

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe