Mir hilft eine Wetterstation im Wohnzimmer bei meinem HomeController-Projekt nicht weiter. Die Wetterdaten sollen zusammen mit dem Energieverbrauch gespeichert und ausgewertet werden können. Eine Wetterstation mit USB-Anschluß ist auch nicht sinnvoll, weil man diese täglich am PC anschliessen muss, um die Messdaten auszulesen. Deshalb ist eine Eigenentwicklung angesagt. In diesem Demo-Sketch wird die im FS20WUE implementierte ASCII-Textausgabe verwendet. Der Sketch läuft auf Arduino Uno und Leonardo (Mega2560 habe ich nicht getestet).

Hardware

Seit kurzem bietet Fa. ELV ein Empfängermodul für seine Wettersensoren. Es hat einen UART, der Befehle empfängt und Wetterdaten ausgibt. Dieser UART kann mit dem UART des Arduino verbunden werden. Beim FS20WUE müssen lediglich zwei fertig bestückte SMD-Platinen mit 4 Kontaktstiften zusammengelötet werden. Dieses Modul wird dann auf einem Protoshield eingelötet, welches auf den Arduino gesteckt wird. Beim Uno werden die Digital Pins 10 (Rxd) und 11 (TxD) verwendet:

FS20WUE Bestückungsplan

Die Ausgänge 1 und 2 von Stecker ST2 können an Arduino auch mit Eingängen für externe Interrupts verbunden werden. Sobald ein FS20- oder Wetterpaket eintrifft, wird ein Interrupt ausgelöst und die Abarbeitung der verschiedenen Pakete kann begonnen werden. In diesem Sketch werden keine Interrupts, sondern Polling verwendet.

Im Sketch sind Hinweise, welche anderen Pins geeignet sind.

Die benötigten Teile (Stand 08/2012):

Hersteller/Produkt Preis Firma  Link
Arduino Leonardo 21,30 € Physical Computing Link
Prototype Shield Uno R3 13,20 € Physical Computing  Link
ELV-Empfänger FS20WUE 14,95 € ELV  Link
ELV-Kombisensor KS300-4 69,95 € ELV Link
ELV-Sensor S300TH 14,95 €  ELV Link 
Summe: 134,35 €    

 

FS20WUE auf Arduino Uno

 

 

 

 

Der FS20WUE steckt in Buchsenleisten, welche auf das Protoshield gelötet wurden. Der rote Draht ist die Antenne, welche durch die mitgelieferten Drahthalter von der Platine ferngehalten wird.

FS20WUE auf Arduino Uno (2)

 

 

 

 

 

Man kann auch niedrigere Buchsenleisten nehmen, dann wid das Sandwich nicht so hoch.

FS20WUE auf Arduino Uno (3)

 

 

 

 

 

Links unten sind die zwei Leuchtdioden zu sehen, welche den Empfang von Wetterdaten und FS20-Paketen anzeigen. Die Interruptausgänge des FS20WUE finden keine Anwendung.

 

Funktionen

Der FS20WUE wird in diesem Sketch auf Textausgabe eingestellt und so konfiguriert, dass er sowohl Wetterdaten, als auch FS20-Kommandos empfangen kann. Alle empfangenen Pakete werden auf dem Serial Monitor der IDE 1.0 oder einem Terminalprogramm ausgegeben. Dafür benötigt man auf dem Arduino zwei seriellen Schnittstellen. Die Hardware-Schnittstelle wird für die Sketchausgabe auf dem PC verwendet, während man einen weiteren seriellen Port über zwei Digital-Pins unter Zuhilfenahme der Bibliothek "SoftSerial" aus der IDE bildet. Beide seriellen Ports sind auf 4800Baud eingestellt, dies ist die Voreinstellung des FS20WUE. Die von ELV gelieferte Beschreibung hat in den Befehlstabellen einige Tippfehler, man kann aber durch den Beschreibungstext herausfinden, was gemeint ist. In diesem Sketch sind die korrigierten Befehle verwendet worden.

Software

Die Software muss mit der IDE 1.01 oder höher kompiliert werden. Sie läuft auf den Arduinos Uno und Leonardo. Den Mega 2560 habe ich nicht getestet, weil er zu mächtig für dieses kleine Programm ist.

/*********************************************************************************************** 
 * Sketch:  DemoWetterdatenReceiver_01.ino
 * Author:  A. Kriwanek: http://www.kriwanek.de/arduino/projekte/waermemengenzaehler.html
 * Version: 1.00  5.08.2012/09:30
 *
 * This sketch controls the weather data receiver FS20 WUE from ELV Electronics. This radio
 * receiver is able to decode the weather sensors KS200/KS300, S300IA, S300TA, AS200 and PS50.
 * Additional it receives messages from FS20 senders (e.g. switches). This sketch sets the
 * FS20WUE parameters for receiving weather and FS20 data and displaying them on the serial
 * monitor or any other terminal program.
 * Rain-Sensor in KS300: 1 count = 295ml/m²
 * Hardware Serial: Send received data to PC with terminal program
 * SoftSerial: Receives weather and FS20 data from FS20WUE (Pin 1
 * RxD is digital pin 10 (connect to TX of FS20WUE)
 * TxD is digital pin 11 (connect to RX of FS20WUE)
 *
 * Note:
 * Not all pins on the Mega and Mega 2560 support change interrupts, 
 * so only the following can be used for RxD: 
 * 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
 *
 * Not all pins on the Leonardo support change interrupts, 
 * so only the following can be used for RxD: 
 * 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 * This sketch is free software: Arduino DemoWetterdatenReceiver_01 von Andreas Kriwanek steht unter 
 * einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.
 *
 **********************************************************************************************/
#include <SoftwareSerial.h>      // From IDE 1.01

//=============================================================================================
// Define values and create objects:
//---------------------------------------------------------------------------------------------
SoftwareSerial mySerial(10, 11);       // RxD, TxD

// Commands for the ELV Weather Receiver FS20WUE. There are some typos in the documentation of the
// receiver. This are the right commands:
char* cmdStat  = "\x02\x01\xF0";        // Returns status of weather data receiver
char* cmdWDOn  = "\x02\x02\xF2\x01";    // Receive weather data and transmit immediately
char* cmdFSOn  = "\x02\x02\xF1\x01";    // Receive FS20 data and transmit immediately
char* cmdText  = "\x02\x02\xFB\x01";    // All output in text format

//---------------------------------------------------------------------------------------------
void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(4800);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println(">>> Weather Data Receiver FS20WUE <<<");

  // Set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  delay(100);
  mySerial.print(cmdText);
  delay(10);
  mySerial.print(cmdFSOn);
  delay(10);
  mySerial.print(cmdWDOn);
  delay(10);
  mySerial.print(cmdStat);
  delay(10);

  Serial.println("FS20WUE parameters loaded!");
}
//---------------------------------------------------------------------------------------------
void loop()
{
  if (mySerial.available())          // Read from FS20WUE
    Serial.write(mySerial.read());   // Write to PC serial
  if (Serial.available())            // Read from PC serial
    mySerial.write(Serial.read());   // Write to FS20WUE
}

 

Ausgabe auf dem Serial Monitor

Nach dem Öffnen des Serial Monitor beginnt der Programmstart. Im Setup() wird der FS20WUE konfiguriert und eine Statusmeldung abgegeben. Anschliessend folgen Ausgaben der empfangenen Sensoren (im unteren Bild farbig markiert):

Programmausgabe

Sketchausgabe

 

 

Statusausgabe FS20WUE

 

 

FS20-Schaltbefehl

 

 

 

Ausgabe Sensor 1, Adresse 0

 

 

 

 

Ausgabe Sensor 1, Adresse 0

 

 

 

 

Ausgabe Sensor 7, Adresse 1

Diese formatierte Ausgabe wird durch den FS20WUE vorgenommen, der in den Textmodus geschaltet wurde. Die Sprache der FS20WUE-Ausgabe lässt sich nicht umstellen, die Ausgabe ist immer in Deutsch. Der Arduino-Sketch dazu ist minimal. Diese Demo eignet sich gut für Reichweitentests oder um neu gekaufte Sensoren zu erproben.

Der Empfänger ist sehr empfindlich und empfängt auch Daten von ungünstig plazierten Sensoren (andere Zimmer, geschlossene Jalousien) ohne Probleme. Alle ELV-Sensoren verwenden das selbe Ausgabeformat. Auch ein Sensor, der nur Temperatur und Luftfeuchtigkeit messen kann, gibt zusätzlich die anderen Werte aus (diese sind dann immer auf Null). In weiteren Sketches wird das binäre Messdatenformat direkt ausgewertet und eine Ausgabe auf einem LCD-Display und auf der Website COSM.COM gezeigt. Diese Sketche sind in Arbeit!

Dieser Demosketch befindet sich im Downloadbereich!