beelogger

Funk – RF433 (433MHz)

Eine einfache und kostengünstigste Lösung, eine Funkverbindung zwischen einem Client mit Sensoren und einem Master mit einem Ethernet-Adapter aufzubauen, bieten RF433-Module. Bei den RF433-Modulen handelt es sich um sehr einfache Sender und Empfänger, die als separate Module verfügbar sind. Sie besitzen keine integrierte Paketverwaltung oder unabhängigen Empfangsleitungen, weshalb sie sich nur bedingt für ein beelogger-Netzwerk mit mehreren Sendern eignet. Hierfür eignen sich besser andere Module, wie das Sender-Empfängermodul nRF24L01. Durch die fehlende Paketverwaltung ist es besonders wichtig, vor der Aufstellung von Client und Master zu überprüfen, dass eine stabile Verbindung mit möglichst wenig Paketverlusten aufgebaut werden kann. Als kleiner Schutz vor dem Verlust von Messwerten, ist eine eigene Paketverwaltung im Programmcode integriert.

Bezug

Günstige Kits mit Sender und Empfänger sind bereits ab 1,20€ incl. Versand zu haben. Leider ist die Empfangsqualität der Empfänger nicht besonders gut. Daher sollte darauf geachtet werden, einen Superheterodynempfänger (Überlagerungsempfänger) zu erstehen. Die geringen Mehrkosten machen sich auf jeden Fall in einer höheren Reichweite bemerkbar. Leider werden mittlerweile auch die einfachen Empfänger als ‘superheterodyn’ beworben. Da sich die Empfänger aber äußerlich klar unterscheiden lassen, sollten vor dem Kauf die Bilder der Produkte genau angeschaut werden.

Sicher geht man mit einer genauen Typenbezeichnung wie ‘RBX6’ oder ‘RBX8’, welche häufig sogar auch auf das Modul selbst aufgedruckt ist. Im Vergleich zum RBX6 hat der RBX8 eine höhere Empfangssensitivität, wird jedoch nur selten im Kit mit einem Sender angeboten. Ein Sender ist jedoch auch separat erhältlich.

Auch bei den Sendern gibt es verschiedene Ausführungen. In der Regel bei allen Kits enthalten, ist ein günstiger Sender mit einer Spannungsversorgung von 3-12V. Alternativ gibt es unter der Bezeichnung ‘SYN115’ einen Sender mit einer Spannungsversorgung von 1,8-3,6V, welcher eine geringere Sendeleistung, dafür aber größere Frequenzstabilität aufweist. Für den beelogger wird der einfache Sender mit höherer Sendeleistung empfohlen.

Zusätzlich wird für Sender und Empfänger eine Antenne benötigt. Der Markt bietet hierfür ein nahezu unbegrenztes Angebot und auch für den Bastler füllen Bauanleitungen ganze Bücher. Die einfachste Form besteht aus einem 17cm langen Stück Draht. Kompakter und fast genau so günstig, gibt es diese als Helix fertig zu erwerben.

 Die RF433-Module können über das Protoboard mit dem beelogger-Funk verwendet werden!
Bild Bezugsquelle Preis ab Suchbegriffe* Bemerkungen
 beelogger RF433 Superheterodyne eBay 6,60€ 433 rf433 Superheterodyne Super-Heterodyne 3400 RBX6 Kit (Sender und Empfänger RBX6)

Empfängersensitivität: 
–105dBm

 beelogger RXB8 RF 433 eBay 2,40€ 433 RBX8 Superheterodyne Super-Heterodyne Empfänger RBX8 

Empfängersensitivität: 
–114dBm

 beelogger RF433 Transmitter eBay 1,00€ 433 rf433 Transmitter Sender, 3-12V, wird in der Regel als Kit mit günstigem Empfänger verkauft
 beelogger Antenne eBay 1,80€
(10 Stück)
433 Antenna Alternative zu einem 17cm langen Stück Draht

*Einkaufstipps

Beschaltung

Arduino Uno, Nano, usw. RF433
5V VCC
GND GND
D2 Data

Libraries

<VirtualWire.h> – http://www.airspayce.com/mikem/arduino/VirtualWire/VirtualWire-1.27.zip

Test-Programmcode

Für diesen Test-Programmcode wird ein Client mit einem Sender und ein Master mit einem Empfänger benötigt. Der Client sendet fiktive Messwerte an den Master, welcher diese über den seriellen Monitor wieder ausgibt. Im Praxisbetrieb würde der Client die Messwerte über die angeschlossenen Sensoren ermitteln, der Master würde die Messwerte über einen Ethernet-Adapter an den Webserver senden. 

Um möglichst keinen Datensatz zu verlieren, wird jeder Datensatz mehrfach versendet. In diesem Test-Programmcode sind vier Aussendungen pro Datensatz vorgesehen. Damit beim kompletten Programmcode keine identischen Datensätze an den Webserver gesendet werden, wird mit jedem Datensatz eine Zufalls-ID mitgesendet, die bei allen zusätzlichen Aussendungen eines Datensatzes identisch ist und vom Master gefiltert werden kann. Grundvoraussetzung sollte natürlich eine stabile Funkverbindung sein, die über diesen Test-Programmcode ermittelt werden kann. Hierzu sind Sender und Empfänger so zu platzieren, dass nahezu keine Pakete verloren gehen, was in der seriellen Ausgabe des Masters einfach überprüft werden kann.  

Test-Programmcode Client (Sender)

/*
 * (C) 2015 Thorsten Gurzan - beelogger.de
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de

#include <VirtualWire.h>

int ID;
char msg[80];

// Test-Messdaten (regulär kommen die Messdaten von den Sensoren)
float TempIn = 27.25;
float TempOut = 30.75;
float FeuchteIn = 50.20;
float FeuchteOut = 60.70;
float Licht = 100000.80;
long BienenIn = 3200;
long BienenOut = 500;
long Gewicht = 20000;


void setup() {
  vw_set_tx_pin(2); 
  vw_setup(2000);	
}


void loop() {
  ID = random(1000,9999);
  
  for (int i=0; i < 4; i++) {  // Hier kann die Anzahl der zusätzlichen Aussendungen pro Datensatz eingestellt werden
    sprintf(msg, "%d,%d,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld", ID, i+1, TempIn, TempOut, FeuchteIn, FeuchteOut, Licht, Gewicht, BienenIn, BienenOut);
    delay(5); 
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx();
    delay(100); 
  }
  delay(3000);
}

Test-Programmcode Master (Empfänger)

/*
 * (C) 2015 Thorsten Gurzan - beelogger.de
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de

#include <VirtualWire.h>

int ID, Aussendung; 
char StringReceived[80]; 
float TempIn, TempOut, FeuchteIn, FeuchteOut, Licht;
long Gewicht, BienenIn, BienenOut;


void setup() {
  vw_set_rx_pin(2);
  vw_setup(2000);	 
  vw_rx_start();      
  Serial.begin(9600);
  Serial.println(F("Starte Empfaenger ..."));
}


void loop() {
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
  if (vw_get_message(buf, &buflen)) {
    
    for (byte i = 0; i < buflen; i++) {
      StringReceived[i] = char(buf[i]);
    }
    
    Serial.println();
    sscanf(StringReceived, "%d,%d,%ld,%ld, %ld, %ld,%ld,%ld,%ld,%ld", &ID, &Aussendung, &TempIn, &TempOut, &FeuchteIn, &FeuchteOut, &Licht, &Gewicht, &BienenIn, &BienenOut); 
    Serial.print(F("ID: "));
    Serial.println(ID);
    Serial.print(F("Aussendung: "));
    Serial.println(Aussendung);
    Serial.print(F("Stocktemperatur: "));
    Serial.println(TempIn);
    Serial.print(F("Aussentemperatur: "));
    Serial.println(TempOut);
    Serial.print(F("Stockluftfeuchte: "));
    Serial.println(FeuchteIn);
    Serial.print(F("Aussenluftfeuchte: "));
    Serial.println(FeuchteOut);    
    Serial.print(F("Beleuchtungsstaerke: "));
    Serial.println(Licht);
    Serial.print(F("Gewicht: "));
    Serial.println(Gewicht);
    Serial.print(F("Bienen In: "));
    Serial.println(BienenIn);
    Serial.print(F("Bienen Out: "));
    Serial.println(BienenOut);
    memset(StringReceived, 0, sizeof(StringReceived));
    delay(5);
  }
}

Ausgabe des seriellen Monitors vom Master (9600 baud):

Starte Empfaenger ...

ID: 8808
Aussendung: 1
Stocktemperatur: 27.25
Aussentemperatur: 30.75
Stockluftfeuchte: 50.20
Aussenluftfeuchte: 60.70
Beleuchtungsstaerke: 100000.80
Gewicht: 20000
Bienen In: 3200
Bienen Out: 500

ID: 8808
Aussendung: 2
Stocktemperatur: 27.25
Aussentemperatur: 30.75
Stockluftfeuchte: 50.20
Aussenluftfeuchte: 60.70
Beleuchtungsstaerke: 100000.80
Gewicht: 20000
Bienen In: 3200
Bienen Out: 500

ID: 8808
Aussendung: 3
Stocktemperatur: 27.25
Aussentemperatur: 30.75
Stockluftfeuchte: 50.20
Aussenluftfeuchte: 60.70
Beleuchtungsstaerke: 100000.80
Gewicht: 20000
Bienen In: 3200
Bienen Out: 500

ID: 8808
Aussendung: 4
Stocktemperatur: 27.25
Aussentemperatur: 30.75
Stockluftfeuchte: 50.20
Aussenluftfeuchte: 60.70
Beleuchtungsstaerke: 100000.80
Gewicht: 20000
Bienen In: 3200
Bienen Out: 500

Programmcode downloaden:

Download

Der komplette Programmcode für den Arduino Datenlogger mit Stockwaage für Imker ist unter Programmcode zu finden.