Sketch Wind- und Regensensor

Nachdem ich hier schon viel Hilfe bekommen habe, möchte ich dem Forum auch etwas zurückgeben.

Ich habe mir einen Windsensor, sowie einen Regensensor für meine Wetterstation (noch in Arbeit) gekauft.
Die beiden Sensoren besitzen eingebaute Funksensoren (433 MHz) und nachdem ich im Internet einige Zeit gesucht habe, fand ich ein PDF, wo das Funktelegramm fast vollständig decodiert wurde (Vielen Dank dafür an TFD).

Soweit so gut, machte ich mich daran das Ganze in ein Programm für den Arduino (ich benutze einen Nano) umzusetzen. Anfangs noch mit so einem Billig-Empfänger (Superregenerativ-Empfänger). Die Reichweite war grottenschlecht (ca. 1 m).
Das nahm ich zum Anlass mir zwei RXB6-Module (Superheterodyne-Empfänger) zu kaufen und siehe da jetzt befinden sich der Wind- und Regensensor auf dem Balkon (10m entfernt und zwei Wände dazwischen).

Der Schaltungsaufbau ist recht simpel (siehe Fritzing-Bild im Anhang).
Und hier dann das Programm für den Arduino (als Anhang, wegen der 9000 Zeichen Begrenzung).

Ich habe diverse Kommentare dazugeschrieben, um auch zu verdeutlichen, warum ich das so gemacht habe. Die Debug-Ausgaben kann man auch ausschalten, aber am Anfang sind sie ganz hilfreich.
Ich hoffe, dass ich damit anderen helfen konnte und falls noch Fragen sind, stehe ich gern zur Verfügung. :slight_smile:

WindRegenSensor.ino (8.23 KB)

1 Like

Ich sage mal schon mal danke, sowas in der Art will ich auch noch bauen.

Eine Frage zu den Sensoren, kann man die auch ohne Funk abfragen, sprich Arduino direkt dran?

FlyingEagle:
Ich sage mal schon mal danke, sowas in der Art will ich auch noch bauen.

Eine Frage zu den Sensoren, kann man die auch ohne Funk abfragen, sprich Arduino direkt dran?

Ich denke schon. Man kommt an die interne Elektronik ran und wenn man die Datenleitung zum Funksender anzapft, sollte das gehen (ausprobiert habe ich das aber nicht).

Schade, weil grad für den Windmesser bin ich schon länger mal so am Suchen, aber noch nix gescheites oder eben immer nur Funk gesehen und gefunden.
Und ohne Oszi lassen sich eben solche Dinge oft nicht so easy rausfinden.

Hey-danke.

Zu dem Regensensor: kann der die Niederschlagsmenge vernünftig messen (zählen) oder ist das nur ein Regen-Detektor?

Rabenauge:
Hey-danke.

Zu dem Regensensor: kann der die Niederschlagsmenge vernünftig messen (zählen) oder ist das nur ein Regen-Detektor?

Er übermittelt die Regenmenge in 0.25 mm Einheiten. Es befindet sich eine Wippe im Inneren, die vollläuft und dann umkippt (Wasser läuft ab) und dabei dann meist 2 Impulse abgibt (0.5 mm). Ab und zur wird aber nur 1 Impul gezählt.
Es wird aber immer der Gesamtzählerstand (seit Batteriewechsel) per Funk übertragen.
Eine Zeiteinteilung (pro Stunde/Tag/Woche etc.) musst Du dann per Software realisieren.

Ok-danke.
Also eher umbauen-aber wenn der die Mechanik schon hat, reicht mir das eigentlich auch, den Rest kann ich selber machen.
Schön billig ist das Ding ja...

Windmesser interessieren mich auch, aber so ein Ding kann ich zum einen unmöglich auf dem Dach montieren und zum anderen wär es da recht sinnlos.
Das muss kleiner, unauffälliger und mit mindestens 50 (eher 100) m Reichweite gehn.

Hab den Windmesser auch schon in schwarz gesehen, fällt schonmal weniger auf. :slight_smile:
Die Funkreichweite lässt sich bestimmt auch noch deutlich verbessern

Gruß

Scherheinz:
Hab den Windmesser auch schon in schwarz gesehen, fällt schonmal weniger auf. :slight_smile:

Ob ein im Garten aufgestellter Regenmesser in weiß oder in schwarz weniger auffällt, dürfte wohl auch davon abhängen, ob man den Regenmesser neben einem weißen oder neben einem schwarzen Gartenzaun platziert.

Im übrigen reichen bei Heimwetterstationen üblicherweise geringe Funkreichweiten aus. Denn beispielsweise ein Funk-Regenmesser muss ja nur von der Aufstellfläche im Garten (Anbringung ein Meter über einer Rasenfläche, mit möglichst deutlicher Entfernund zu Gebäuden) bis hinter die erste Wand im Haus funken können, wo man das Signal dann mit einem stationären Empfänger aufnehmen kann. Dazu reichen 30 Meter Reichweite meistens aus. Die Hersteller von Gerätschaften für Heim-Wetterstationen bleiben mit ihren Geräten meist nicht nur deshalb unter der maximal erlaubten Sendeleistung, weil das Überschreiten der maximal erlaubten Sendeleistung illegal ist, sondern auch deshalb, um auf vernünftige Wechselintervalle zum Batteriewechsel zu kommen. Wer hat schon Lust, einmal pro Woche im Garten einen Batteriewechsel am Funk-Regenmesser zu machen? Erstens geht der Batteriewechsel ins Geld, zweitens ist das Zeitaufwand für die Wartung. Deshalb achten die Hersteller darauf, dass die Geräte mit möglichst wenig Stromverbrauch möglichst lange funktionieren, damit der Benutzer nur selten neue Batterien kaufen und einsetzen braucht. In den besseren semi-professionellen Wetterstationen, etwa "Davis Vantage Pro", werden zusätzlich Solarmodule eingesetzt, um zusätzliche elektrische Energie für den Funkbetrieb der Außensensoren zu gewinnen, damit einerseits möglichst häufig und andererseits mit möglichst großer Entfernung gefunkt werden kann, ohne dass die Batterien zu häufig gewechelt werden müssen.

Scherheinz:
Hab den Windmesser auch schon in schwarz gesehen, fällt schonmal weniger auf. :slight_smile:
Die Funkreichweite lässt sich bestimmt auch noch deutlich verbessern

Gruß

Meine Angabe mit den 10 Metern ist nicht die Maximal-Reichweite, sondern lediglich die Entfernung, in der sie bei mir aufgestellt sind.
Da ist bestimmt mehr drin. Vor allem, wenn man noch eine bessere Antenne für den Empfänger benutzt. Ich habe hier so eine billige Spiral-Antenne an dem RXB6-Empfänger.

jurs:
Ob ein im Garten aufgestellter Regenmesser in weiß oder in schwarz weniger auffällt, dürfte wohl auch davon abhängen, ob man den Regenmesser neben einem weißen oder neben einem schwarzen Gartenzaun platziert.

Das stimmt natürlich, es hängt vom Aufstellungsort ab. Ich sehe bei mir hauptsächlich Wiese und Wald, davor fällt ein schwarzes Objekt weniger auf als ein weißes und Bedachungen sind auch meist dunkler, hab zumindest noch nie ein weißes Dach gesehen.
Ist ja auch egal, bin halt froh das es mal was anderes gibt als immer nur weiß oder grau.

Gruß

Morgen,

hat jemand zufälligerweiße Fotos der Elektronik? Mich würde interessieren, ob die Sensoren an Dauerstrom angeschlossen werden können.

Hey cooler Beitrag mich würde mal interessieren wie lange halten den die Batterien für den Windmesser und wie oft sendet der Windmesser seine Daten.

Martin

Erstmal vielen DANK für den Sketch!!

muhmuh:
Morgen,

hat jemand zufälligerweiße Fotos der Elektronik? Mich würde interessieren, ob die Sensoren an Dauerstrom angeschlossen werden können.

Es spricht Grundsätzlich nichts dagegen, du musst nur schauen das es Wasserdicht ist. Ich benutze einen LP2950, der bringt mir die erforderlichen 3V und max. 100mA.
Ich habe nicht genau gestoppt in welchem Zeit Intervall die Daten gesendet werden, aber dann ist der Stromverbrauch auch recht minimal.

  • Regensensor: 24,6mA
  • Windsensor: 54,2mA

Wegen der Tagesregenmenge bzw. Jahresregenmenge verwende ich folgenden Code.

float Gesamtregenmenge;
float GesamtregenmengeX;
float Regenmenge;
float RegenmengeX;
float RuecksetzspeicherTag;


GesamtregenmengeX = RainVolume;
Gesamtregenmenge = GesamtregenmengeX / 100;   //Umrechnung in Liter

// jeden Tag wird von 0:00Uhr - 0:04Uhr der Tageswert auf "0" gesetzt
if (stunden == 00 && minuten < 04  ) {
      RuecksetzspeicherTag = Gesamtregenmenge;
}

// Berechnung des Tageswertes
RegenmengeX = Gesamtregenmenge - RuecksetzspeicherTag;
// Wird für die Blockierung negativer Ergebnisse benötigt
Regenmenge = RegenmengeX;
if (RegenmengeX < 0) Regenmenge = 0;

// jedes Jahr am 01.01.20xx von 0:00Uhr - 0:04Uhr wird die Jahresregenmenge auf "0" gesetzt, durch:
if (monat == 01 && tag == 01 && stunden == 00 && minuten < 04  ) {    
  digitalWrite (Relais_3V, HIGH);
// Die Spannung der Wettersensoren wird für 10sec per Öffner mittels Relais abgeschaltet
  delay (10000);                                                      
  digitalWrite (Relais_3V, LOW);
}

float Gesamtregenmenge;
float GesamtregenmengeX;

Auch Du, wie in einer anderen Diskusion verwendest float Variable für eine Summe. Float hat aber die unangenehme Eigenschaft daß ab einem gewissen Wert das Aufsummieren keine Änderung der Float-Wertes mehr hervorruft.
Da nimmt man besser eine unsigned long Variable. Die kann Verte bis 4 Milliarden darestellen.
Außerdem geht die Regfenmenge die zwischen 00:00 und 00:03 nicht in die Tagesmenge ein.

Auch haben delays im Sketch nichts zu suchen.

Grüße Uwe

Vielen Dank für die Tipps!!
Der zeitliche Abstand für Regenmenge die zwischen 0:00 und 00:03 kann natürlich verkürzt werden, da gebe ich dir recht.

Mit dem delay von 10sec, wollte ich sicher gehen das der Regensensor definitiv keine Restspannung hat und sich auf "0" setzt.
Da ich nicht sicher bin über wie viele Jahre der Regensensor seinen Wert nach oben zählen kann (max Wert), habe ich diesen Lösungsweg für mich eingeschlagen.
Welchen Möglichkeit bietet sich hier auf das delay zu verzichten? (sollte eine Software-Lösung sein)

Gruß MLuhmann

MLuhmann:
.....
Welchen Möglichkeit bietet sich hier auf das delay zu verzichten? (sollte eine Software-Lösung sein)

Du machst es mir "millis()".
Siehe BlinkWithoutDelay in der IDE.

Vielen Dank!!!

Hat mal jemand versucht auch die Checksumme (gemäß PDF Bit 32-35) auch noch einzulesen?
Bei mir klappt es, aber nur bis Bit34. Warte ich noch auf Bit36 kommt nur noch Grütze..

Jemand ne Idee woran das liegen könnte?

void rx433Handler() {  // Interrupt-Routine
  if (rxOk) return;    // wenn rxOk noch gesetzt ist, dann Funktion verlassen, damit der Puffer nicht ueberschrieben wird
  static unsigned long rxHigh = 0, rxLow = 0;
  static bool syncBit = 0, dataBit = 0;
  static byte rxCounter = 0;
  bool rxState = digitalRead(RX433DATAPIN); // Daten-Eingang auslesen
  if (!rxState) {                           // wenn Eingang = Low, dann...
    rxLow = micros();                       // Mikrosekunden fuer Low merken
  } else {                                  // ansonsten (Eingang = High)
    rxHigh = micros();                      // Mikrosekunden fuer High merken
    if (rxHigh - rxLow > 8500) { // High-Impuls laenger als 8.5 ms dann SyncBit erkannt (9 ms mit 0.5 ms Toleranz)
      syncBit = 1;               // syncBit setzen
      rxBuffer = 0;              // den Puffer loeschen
      rxCounter = 0;             // den Counter auf 0 setzen
      checksum = 0;
      return;                    // auf den naechsten Interrupt warten (Funktion verlassen)
    }
    if (syncBit)
    {                                          
      // wenn das SyncBit erkannt wurde, dann High-Impuls auswerten:
      if (rxHigh - rxLow > 1500) dataBit = 0;               // High-Impuls laenger als 1.5 ms (2 ms mit 0.5 ms Tolenz), dann DataBit = 0
      if (rxHigh - rxLow > 3500) dataBit = 1;               // High-Impuls laenger als 3.5 ms (4 ms mit 0.5 ms Tolenz), dann DataBit = 1
      if (rxCounter < 32)
      {                                
        // Wenn noch keine 32 Bits uebertragen wurden, dann...
        rxBuffer |= (unsigned long) dataBit << rxCounter++; // das Datenbit in den Puffer schieben und den Counter erhoehen
      }
      else if(rxCounter < 35)
      {
         checksum |= (uint8_t) dataBit << ((rxCounter++) - 32);
      }
      else
      {         
        // wenn das Datentelegramm (36 Bit) vollstaendig uebertragen wurde, dann...
        rxCounter = 0; // den Counter zuruecksetzen
        syncBit = 0;   // syncBit zuruecksetzen
        rxOk = true;   // Ok signalisieren (rxBuffer ist vollstaendig) fuer die Auswertung in Loop
      }
    }
  }
}

Hallo,
Wie funktioniert der Regenmesser, also was passiert wenn die Wippe umkippt?
Wird da ein Taster/ Reedsensor verwendet, den man dann als Interrupt zum aufwachen eines ESP8266 nehmen kann?