Author Topic: Wetter Messer  (Read 15917 times)

knusi@gmx.ch

  • Newbie
  • *
  • Posts: 6
  • Karma: +1/-0
    • knusi.ch
Wetter Messer
« on: August 08, 2015, 11:49:55 PM »
Ich habe die Wettersensoren bei meiner Wetterstation mit einem Arduino im einsatz.

Deswegen wollte ich hier kurz meine erfahrungen mitteilen.

Die Windsensoren Funktionieren sehrgut.
Der Regensensor reagiert bei mir auch schon, wenn der Wind am Mast wackelt.
Deswegen habe ich ihn seperat am Boden montiert, es muss nur darauf geachtet werden,
das das Wasser abfliessen kann.

Um eine schlaue Windrichtung und Windgechwindigkeit zu bekommen,
messe ich eine kurze Zeit und mittle dan die werte.
Gerade bei der Windrichtung habe ich lange nach der Formel gesucht.
Das Funktioniert nur richtig über Umrechnung in Vektoren.
Deswegen möchte ich hier mein Arduino Sketch für den Wind mit euch teilen,
in der hoffnung anderen den einstieg zu erleichtern.

Code: [Select]

// DigitalPin 3 Windgeschwindigkeit Sensor gemäs Datenblatt anschliessen
// AnalogPin A3 Windrichtung Sensor gemäs Datenblatt anschliessen

#include "math.h"                // Wird benötigt für Winkel und Vektor berechnung.

const int windPin = 3;           // anschluss des reedkontaktes Windgeschwindigkeit
const float windFactor = 2.4;    // umrechnungsfaktor von umdrehungen in geschwindigkeit (gem. Datenblatt)
const int messZeit = 30;         // messzeitraum in sekunden je Windrichtung und Windgeschwindigkeit
                                                                 
unsigned int windCounter = 0;    // interner zaehler für umdrehungen

const float pi = 3.14159265359;  // Variablen für Windrichtung
int zaehlerrichtung = 0;
double uges = 0;
double vges = 0;
double u = 0;
double v = 0;
double uabs = 0;
double vabs = 0;
double uvarc  = 0;
double winkel  = 0;

int windrichtung = 0;
int wingeschwindigkeit = 0;


void setup()
{
  Serial.begin(9600);     // Startet die Serielle Schnitstelle
}

void loop()
{
/////////////////////////////////////////////////////////////// Windgeschwindigkeit
  windCounter = 0;                                                              // Zähler auf Null setzen
  attachInterrupt(1,countWind,RISING);                                          // Startet Interrupt und zählt um 1 Hoch pro umdrehung.
  delay(1000 * messZeit);                                                       // Wartet die Messzeit ab
  detachInterrupt(1);                                                           // Deaktiviert den Interrupt
  wingeschwindigkeit = (float)windCounter / (float)messZeit * windFactor;       //Umrechnung in kmh
 
/////////////////////////////////////////////////////////////// Windrichtung

do                                        // Die Schleiffe Zählt die angegebene Messzeit durch           
{
  delay(1000);                            // Wartet eine Sekund               
  windrose(analogRead(A3));               // Einlesen des Analogwert der Windrichtung und übergabe an die Funktion. 1x Pro Sekunde
} while (zaehlerrichtung >= messZeit);

u = uges / zaehlerrichtung;     // Durchschnitt errechnung der Vektoren
uges = 0;
v = vges / zaehlerrichtung;
vges = 0;

uabs = abs(u);                 // Zurückrechnung der Vektoren in ein Winkel
vabs = abs(v);
uvarc = uabs / vabs;
winkel = atan(uvarc);
winkel = winkel * 180 / pi;
if (u >= 0 && v >= 0) windrichtung = winkel;
else if (u >= 0 && v < 0) windrichtung = 180 - winkel;
else if (u < 0 && v >= 0) windrichtung = 360 - winkel;
else if (u < 0 && v < 0) windrichtung = 180 + winkel;
zaehlerrichtung = 0;

/////////////////////////////////////////////////////////////// Ausgabe

Serial.print("Windrichtung ");
Serial.print(windrichtung);
Serial.println ("grad");
Serial.print("Windgeschwindigkeit ");
Serial.print(wingeschwindigkeit);
Serial.println("kmh");

}


/////////////////////////////////////////////////////////////// Funktionen
                                                               
void countWind() {
   windCounter ++;
}


void windrose (int w) // Hier wird der Analoge eingelesene Wert in ein Winkel Umgewandelt
                      // und Zusammengezählt als Vektoren
{
if ( w > 776 && w < 796) winkel = 0;
  else if ( w > 395 && w < 415) winkel = 22.5;
  else if ( w > 450 && w < 470) winkel = 45;
  else if ( w > 74 && w < 88) winkel = 67.5;
  else if ( w > 88 && w < 102) winkel = 90;
  else if ( w > 55 && w < 74) winkel = 112.5;
  else if ( w > 174 && w < 194) winkel = 135;
  else if ( w > 116 && w < 136) winkel = 157.5;
  else if ( w > 276 && w < 296) winkel = 180;
  else if ( w > 233 && w < 253) winkel = 202.5;
  else if ( w > 620 && w < 640) winkel = 225;
  else if ( w > 590 && w < 610) winkel = 247.5;
  else if ( w > 936 && w < 956) winkel = 270;
  else if ( w > 817 && w < 837) winkel = 292.5;
  else if ( w > 968 && w < 988) winkel = 315;
  else if ( w > 692 && w < 712) winkel = 337.5;
  uges = uges + (sin(winkel * pi / 180));
  vges = vges + (cos(winkel * pi / 180));
  zaehlerrichtung ++;
}


dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Re: Wetter Messer
« Reply #1 on: August 10, 2015, 08:14:14 AM »
Hallo Knusi,

interessantes Projekt, welche Sensoren verwendest DU?

Hast Du ein Photo von dem "Wetter Messer"?

Danke und Gruss
Reto

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Wetter Messer
« Reply #2 on: August 11, 2015, 10:08:15 AM »
Vielen Dank für den Code, ich bin sicher das hilft anderen weiter. Ich hab mir erlaubt diesen Forum Post in der Artikelseite des Wettermessers zur verlinken.

Grüsse - Christoph

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Wetter Messer
« Reply #3 on: August 11, 2015, 09:14:43 PM »
Vielen Dank für deinen Code.

Knusi hat vermutlich den Wetter Messer von Sparkfun im Einsatz.
http://shop.boxtec.ch/wetter-messer-p-41289.html

@Knusi
verwendest du auch das Weather Shield oder hast du eine eigene Schaltung?

Wie und wo wirst du das Arduino-Board unterbringen (wetterfestes Gehäuse)?
Oder hast du den Wettermesser nahe beim Haus montiert?

Gruss
Thomas


knusi@gmx.ch

  • Newbie
  • *
  • Posts: 6
  • Karma: +1/-0
    • knusi.ch
Re: Wetter Messer
« Reply #4 on: August 11, 2015, 09:29:22 PM »
Hallo zusammen.

@Arduinopraxis
ja genau den Wettersensor aus dem Shop meine ich.

Eine grosse schaltung dazu braucht man nicht. pro Sensor 1 Widerstand.
Anschliessen nach dem beiligenden Datenblatt.

Ich habe eine Art "Fogelhäuschen" gebaut.
Schaut mal auf meiner HP unter Wetter.



knusi@gmx.ch

  • Newbie
  • *
  • Posts: 6
  • Karma: +1/-0
    • knusi.ch
Re: Wetter Messer
« Reply #5 on: August 11, 2015, 10:54:39 PM »
Hier noch der Anschlussplan

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Wetter Messer
« Reply #6 on: August 13, 2015, 10:57:29 AM »
@knusi

Super Lösung und dein "Vogelhäuschen" sieht perfekt aus.

Wie hast du die Stromversorgung der Messstation im Garten gelöst?

Gruss
Thomas

knusi@gmx.ch

  • Newbie
  • *
  • Posts: 6
  • Karma: +1/-0
    • knusi.ch
Re: Wetter Messer
« Reply #7 on: August 15, 2015, 03:52:06 PM »
Am Boden neben dem Mast, habe ich eine Aussensteckdose.
Die war schon vorhanden, für die Gartenteichpumpe.
Und ein altes Laptopnetzteil bringt mir 12V.

EDIT:

Die 5V gewinne ich mit einem LM7805. Bisher hatte ich immer das problem, falsche Signale zu messen.
Ich hatte das LM7805 nur standartmässig beschaltet. Blauer kreis. Nun habe ich einen Puffer Elko eingefügt. Roter Kreis.
Nun habe ich keine Messfehler mehr.


« Last Edit: September 03, 2015, 09:35:06 PM by knusi@gmx.ch »

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Wetter Messer
« Reply #8 on: August 15, 2015, 04:25:12 PM »
Quote
Am Boden neben dem Mast, habe ich eine Aussensteckdose.
Natürlich sehr praktisch  ;)

 

anything