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! |
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:
DownloadDer komplette Programmcode für den Arduino Datenlogger mit Stockwaage für Imker ist unter Programmcode zu finden.