INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 2 Bewertungen - 3.5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wetterstation mit LC-Display I2C --> Feuchte, Temp, Wind, Druck, Tau, Tendenz
24.09.2013, 14:48 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2013 14:50 von Wampo.)
Beitrag #9
RE: Wetterstation mit DHT22 und Windsensor auf TV-OUT
NEUES UPDATE V3.0 Wink

Im Code stehen die Verbesserungen bzw Veränderungen. Es hat sich einiges getan seit dem beginn dieses Projekts.... Viel Arbeit, viel zeit und viel nerven sind in dem Code mit eingebunden als unterprogramme Big Grin

Ich weiß, alles is nochn bisschen unübersichtlich und ungeordnet aber das kommt schon noch. Wink

Zu den Abkürzungen am Display:
T = Temperatur
H = Feuchte
P = Luftdruck
Tau = Taupunkt
L = Lichthelligkeit (nicht in Lux)
W = Wind
Bf = Beaufort
und die min sind gelaufene Zeit


Hat jemand nen Tip wie man den BMP085 auf seine Meereshöhe anpasst? Momentan hab ichn druck von 940 hPa was nicht stimmen kann laut Meteoblu.com
Hab jetz einfach mal die druckdaten die rauskommen genommen und habe sie wie folgt angepasst--->

echterLuftdruck = druck_gemessen + (449 / 8.5); //449 ist meine Höhe über nN Stimmt die anpassung so????

und in diesem Sinne möchte ich noch auf einen anderes Thema verweisen von mir---> http://www.arduinoforum.de/arduino-Threa...age-ändern

Hier der Code:

Code:
/*
WETTERSTATION MIT VIELEN SENSOREN UND AUSGABE ÜBER DISPLAY ODER TV-OUT.

LDR Info: Résistance à 100lx: 5kOhms, Résistance à 10lx: 33kOhms, Résistance à 0lx: 180kOhms

Version 1.2, 24.08.13: Windsensor, Temperatursensor und Feuchtesensor. Anpassungen im Setup: StartUp Display für 5 Sec mit Versionsnummer und Bootvorgang. SketchGröße: 12134Bytes
Version 1.3, 15.09.13: Hinzugefügt wurden die Voltmessung von 0-12V und Ausgabe im Display, Entfernen der Trennlinien zwischen den Werten, Aktualisierung in 5sec Takt, StartUp auf 2sec & Optimierung. SketchGröße: 12418Bytes
Version 2.1, 17.09.13: TV OUT mit LCD über I2C getauscht, Barometer(BMP085)  SketchGröße: 11804Bytes
Version 2.2, 19.09.13: Tageslichtsensor hinzugefügt mit Prozentualer ausgabe, Analogpins besser definiert, Refresh Delay entfernt, programm wird über Windmesserroutine eh refreshed, IF ELSE gleichung entfernt nur ausgabe ohne Fehler ausgabe
Display "Aufgeräumt", Laufzeittimer hinzugefügt, VoltMessung entfernt da keine brauchbaren Messungen herrauskommen...brauchbare Formel wird gesucht, SketchGröße: 12064Bytes
Version 3.0, 24.09.13: Windmessung verfeinert jetzt wir der absolut richtige wert gemessen + Beaufort Skala, einzelne Sensoren in Unterprogramme verteilt und Messinztervall hinzugefügt,
Taupunktberechnung aus Nährungsformel(siehe WIKI) hinzugefügt, Testbedingung für Fenstersteuerung, SketchGröße: 13798Bytes
designed and Compiled by Daniel Agocs
*/
// Allgemeine Variablen
int runtime = 0;
float tautemp = 0.0;
double tau = 0.00;
const int windgeschwindigkeitPin = 3; // Reed-Kontakt Windgeschwindigkeit an D8
unsigned long messIntervall = 10000; // alle (1) Minute/n eine Messung niedriger nicht möglich wegen Windmessung
unsigned long startIntervall = 0;
unsigned long startIntervallAlt = 0;
#define led 4 // test led

// Variablen für Windgeschwindigkeitsmessung
float windgeschwindigkeit = 0;
unsigned long windgeschwindigkeitMessStart = 0;
unsigned long windgeschwindigkeitMessStartAlt = 0;
int beaufort = 0;
unsigned int windgeschwindigkeitPinZaehler; // = 0; // Zaehler fuer die Pulse
unsigned int windgeschwindigkeitPinStatus = 0; // aktueller Status Eingang-Pin
unsigned int windgeschwindigkeitPinStatusAlt = 0; // vorheriger/alter Status des Eingangs-Pin
unsigned long windmessDauer = messIntervall / 2; // messen Windgeschwindigkeit waehrend 50 % Prozent des Messintervalls

//LDR Sensor
#define analogA1 A1
double percent = 100.0;

//LCD Out
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Temp & Humid
#include <DHT.h>
#define DHTPIN A0    
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float a = 17.271; // fuer Formel
float b = 237.7; // fuer Formel

//Druck und Temp
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
float temperature;
float temp = 0.0;
double h = 0.0;
double t = 0.0;
float druck = 0.0;

                
void setup()
{
  pinMode(analogA1, INPUT);
  pinMode(led, OUTPUT);
  pinMode(windgeschwindigkeitPin, INPUT); // Pin als Eingang
  digitalWrite(windgeschwindigkeitPin, HIGH); // aktiviere internen Pullup
  dht.begin();
  bmp.begin();
  lcd.begin (20,4);
    
  //Screentest
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    digitalWrite(led, HIGH);
    delay(50);
    lcd.noBacklight();
    digitalWrite(led, LOW);
    delay(50);
  }
  lcd.backlight();
  lcd.print("Weather Station V3.0");
  lcd.setCursor ( 0, 1 );
  lcd.print("--------------------");
  lcd.setCursor ( 0, 2 );
  lcd.print("Prog by Daniel Agocs");
  lcd.setCursor ( 0, 3 );
  lcd.print("   STARTE MESSUNG   ");
  delay(50);
  }
  

void loop()
{
  runtime =(millis()/1000)/60;
    
   startIntervall = millis(); // Aktualisiere Startzeit
  if (startIntervall - startIntervallAlt >= messIntervall)
  {  
      Windgeschwindigkeit(); // Windgeschwindigkeit holen
      ldr(); // Helligkeit holen
      dht22(); // Feuchtigkeit und Temp holen
      bmp085(); // Druck und Temp holen
      temp = (t + temperature) / 2; //Durchschnitt aus beiden Temperatursensoren (DHT & BMP)
      taupunkt(); // Taupunktberechnung holen
      ausgabe(); // Ausgabe auf LCD
      abfrage(); // if else abfrage
      startIntervallAlt = startIntervall; // Startzeit der letzten Messung merken
   }
}
  void ausgabe()
  {
    lcd.clear();
      
    lcd.setCursor ( 0, 0 );
    lcd.print("T: ");
    lcd.print(temp,1);
    lcd.print("*C");
    
    lcd.setCursor ( 11, 0 );
    lcd.print("H: ");
    lcd.print(h,1);
    lcd.print("%");
    
    lcd.setCursor ( 0, 1 );
    lcd.print("P: ");
    lcd.print(druck + (449/8.5), 1);
    lcd.print("hPa");
    
    lcd.setCursor ( 0, 2 );
    lcd.print("W: ");
    lcd.print(windgeschwindigkeit,0);
    lcd.print("km/h");
  
    lcd.setCursor ( 12, 2 );
    lcd.print("Bf: ");
    lcd.print(beaufort);
    
    lcd.setCursor ( 0, 3 );
    lcd.print("Tau: ");
    lcd.print(tau,1);
    lcd.print("*C");
  
    lcd.setCursor(13 , 1 );
    lcd.print("L: ");
    lcd.print(percent,0);
    lcd.print("%");
    
    lcd.setCursor ( 13, 3 );
    lcd.print(runtime);
    lcd.print("min");  
    }
  
  // Wingeschwindigkeit

void Windgeschwindigkeit()
{  
   windgeschwindigkeitMessStart = startIntervall; // aktualiere Startzeit für Messung
   windgeschwindigkeitMessStartAlt = windgeschwindigkeitMessStart; // Startzeit merken
   windgeschwindigkeitPinZaehler = 0; // Pulszähler auf 0
   windgeschwindigkeitPinStatusAlt = HIGH; // Pulsstatus auf HIGH
  
   while ((windgeschwindigkeitMessStart - windgeschwindigkeitMessStartAlt) <= windmessDauer)
   {
      windgeschwindigkeitPinStatus = digitalRead(windgeschwindigkeitPin); // lese 3
      if (windgeschwindigkeitPinStatus != windgeschwindigkeitPinStatusAlt) // wenn sich Pin-Status geändert hat
      {                
         if (windgeschwindigkeitPinStatus == LOW) // und wenn alter Status  HIGH
         {
            windgeschwindigkeitPinZaehler++; // Zähler um 1 erhöhen
         }
      }
      windgeschwindigkeitPinStatusAlt = windgeschwindigkeitPinStatus; // merken uns Pin Status für nächsten Durchlauf
      windgeschwindigkeitMessStart = millis(); // aktualisierung Zeit
   }
   windgeschwindigkeit = ((windgeschwindigkeitPinZaehler * 2.4) / (windmessDauer / 1000)); // teilen durch Messzeit in Sec
   // ermitteln der Windstärke in Beaufort
   if      (windgeschwindigkeit >= 0 && windgeschwindigkeit <= 2)    { beaufort = 0; }
   else if (windgeschwindigkeit > 2 && windgeschwindigkeit <= 5)     { beaufort = 1; }
   else if (windgeschwindigkeit > 5 && windgeschwindigkeit <= 11)    { beaufort = 2; }
   else if (windgeschwindigkeit > 11 && windgeschwindigkeit <= 19)   { beaufort = 3; }
   else if (windgeschwindigkeit > 19 && windgeschwindigkeit <= 28)   { beaufort = 4; }
   else if (windgeschwindigkeit > 28 && windgeschwindigkeit <= 38)   { beaufort = 5; }
   else if (windgeschwindigkeit > 38 && windgeschwindigkeit <= 49)   { beaufort = 6; }
   else if (windgeschwindigkeit > 49 && windgeschwindigkeit <= 61)   { beaufort = 7; }
   else if (windgeschwindigkeit > 61 && windgeschwindigkeit <= 74)   { beaufort = 8; }
   else if (windgeschwindigkeit > 74 && windgeschwindigkeit <= 88)   { beaufort = 9; }
   else if (windgeschwindigkeit > 89 && windgeschwindigkeit <= 102)  { beaufort = 10; }
   else if (windgeschwindigkeit > 102 && windgeschwindigkeit <= 117) { beaufort = 11; }
   else                                                              { beaufort = 12; }
    
}
  
  
  void bmp085()
  {
  sensors_event_t event;
  bmp.getEvent(&event);  // BMP085 Luftruck ziehen
  druck = event.pressure;
  bmp.getTemperature(&temperature);//BMP085 Temperatur ziehen
  }
  
  
  void dht22()
  {
  h = dht.readHumidity();  //DHT22 Feuchtigkeit ziehen
  t = dht.readTemperature();  //DHT22 Temperatur ziehen
  }
  
  
  void ldr()
  {
  //Prozentrechnung LDR
  int valueA1 = analogRead(analogA1);
  percent = (valueA1/1023.0) * 100.0;
  }
  
  
  void taupunkt()
  {
  tautemp = (a * temp) / (b + temp) + log(h / 100);
  tau = (b * tautemp) / (a - tautemp);
  }
  
  
  void abfrage()
  {
  if(temp >= 23 & beaufort < 7 & percent > 30 & h <= 95){
  
    digitalWrite(led, HIGH);
  }  
   else
   {
    digitalWrite(led, LOW);
  }
  }

Greez Wampo


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.12.2013, 22:31 (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2013 22:37 von Woldeu.)
Beitrag #10
RE: große Wetterstation mit LC-Display, Feuchte, Temp, Wind, Druck, Tau, MIN/MAX
Hallo Daniel
Hier meine Umrechnung

#define hoehe_bergkamen 61.0 // 61,0 m für Bergkamen

a=lpf_pres/100; // <-- Druck aus BMP Sensor = Berechnung in hPa

void relativer_Luftdruck ()
{
x =(1-(hoehe_bergkamen/44330));
y = 5.255;
z = pow(x,y);
Ldruck_rel = a/z;
lcd.setCursor( 16, 0);
lcd.print( Ldruck_rel,0);
//lcd.print(" hPa rel.");
}

Wolfgang
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.12.2013, 23:27
Beitrag #11
RE: große Wetterstation mit LC-Display, Feuchte, Temp, Wind, Druck, Tau, MIN/MAX
Moin,

die Formel scheint nur bedingt richtig, da der BMP085 mit verschiedenen Auflösungen gefahren werden kann (oversampling_setting / oss).
Eine sehr genaue Beschreibung dazu (in englisch) gibt's hier: http://www.adafruit.com/datasheets/BMP08...ly2008.pdf
Besonders interessant sind hier die Seiten 10-12.
Die Doku kommt von Bosch (die einen baugleichen Chip verbauen).

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2013, 08:56
Beitrag #12
RE: große Wetterstation mit LC-Display, Feuchte, Temp, Wind, Druck, Tau, MIN/MAX
Hallo Ricardo

Die Formel von Seite 13 habe ich ja benutzt.
Der vergleich mit Wetter.com zeigt bei mir den gleichen Wert an.
Den Sketch für den Sensor habe ich auch von der Boschseite copiert.

Wolfgang
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2013, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2013 18:07 von rkuehle.)
Beitrag #13
RE: große Wetterstation mit LC-Display, Feuchte, Temp, Wind, Druck, Tau, MIN/MAX
Hallo Wolfgang,

soviel zum Thema "Kühle macht im Halbschlaf einen Eintrag" Smile
Sorry, du liegst schon richtig!

Grüße ricardo

PS: Sieht richtig gut aus was auf dem Bild zu sehen ist. Die Luft ist aber a bisserl trocken, oder?

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.12.2013, 02:54
Beitrag #14
RE: große Wetterstation mit LC-Display, Feuchte, Temp, Wind, Druck, Tau, MIN/MAX
Sodala habe jetzt beschlossen den Programmcode für diese Wetterstation so beizubehalten und nicht mehr grundlegen zu verändern evtl 1-2 kleine Updates, mehr nicht.
Sozusagen-------> HABE FERTIG!

Im Bild zu sehen sind (von oben nach unten):
Innentemperatur & Feuchtigkeit von einem DHT22
Außentemperatur & Feuchtigkeit von einem DHT22
Windgeschwindigkeit Aktuell und Max Windgeschwindigkeit
Taupunktberechnung und aktueller Luftdruck von einem BMP085

Code:
/*
WETTERSTATION MIT WINDGESCHWINDIGKEIT, TEMPERATUR, FEUCHTIGKEIT, LUFTDRUCK, TAUPUNKTBERECHNUNG & LICHTVERHÄLTNISS

LDR Info: Résistance à 100lx: 5kOhms, Résistance à 10lx: 33kOhms, Résistance à 0lx: 180kOhms

Version 1.2, 24.08.13: Windsensor, Temperatursensor und Feuchtesensor. Anpassungen im Setup: StartUp Display für 5 Sec mit Versionsnummer und Bootvorgang. SketchGröße: 12134Bytes
Version 1.3, 15.09.13: Hinzugefügt wurden die Voltmessung von 0-12V und Ausgabe im Display, Entfernen der Trennlinien zwischen den Werten, Aktualisierung in 5sec Takt, StartUp auf 2sec & Optimierung. SketchGröße: 12418Bytes
Version 2.1, 17.09.13: TV OUT mit LCD über I2C getauscht, Barometer(BMP085)  SketchGröße: 11804Bytes
Version 2.2, 19.09.13: Tageslichtsensor hinzugefügt mit Prozentualer ausgabe, Analogpins besser definiert, Refresh Delay entfernt, programm wird über Windmesserroutine eh refreshed, IF ELSE gleichung entfernt nur ausgabe ohne Fehler ausgabe
Display "Aufgeräumt", Laufzeittimer hinzugefügt, VoltMessung entfernt da keine brauchbaren Messungen herrauskommen...brauchbare Formel wird gesucht, SketchGröße: 12064Bytes
Version 3.0, 24.09.13: Windmessung verfeinert jetzt wir der absolut richtige wert gemessen + Beaufort Skala, einzelne Sensoren in Unterprogramme verteilt und Messinztervall hinzugefügt,
Taupunktberechnung aus Nährungsformel(siehe WIKI) hinzugefügt, Testbedingung für Fenstersteuerung, SketchGröße: 13798Bytes
designed and Compiled by Daniel Agocs
*/


// Allgemeine Variablen
#include <avr/io.h>
#include <avr/interrupt.h>

//int runtime;
float tautemp;
float tau, maxtau, mintau;

#define led 5 // test led

// Variablen für Windgeschwindigkeitsmessung
const int windgeschwindigkeitPin = 3;          // anschluss des reedkontaktes
const float windFactor = 1.2;   // umrechnungsfaktor von umdrehungen in geschwindigkeit
const int measureTime = 10;      // messzeitraum in sekunden
volatile unsigned int windCounter = 0;  //interner zaehler fŸr umdrehungen
unsigned long time = 0;
float windgeschwindigkeit, maxwind, minwind;
int beaufort = 0;

//LDR Sensor
#define analogA1 A1
double percent;

//LCD Out
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Temp & Humid
#include <DHT.h>
#define DHTTYPE DHT22
#define DHT1PIN 7        
#define DHT2PIN 6        
DHT DHT1(DHT1PIN, DHTTYPE);
DHT DHT2(DHT2PIN, DHTTYPE);
float a = 17.271; // für Taupunkt Formel
float b = 237.7; // für Taupunkt Formel

//Druck und Temp
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
float temperature;
float temp, maxtemp, mintemp;
float h,h1, maxh, minh;
float t,t1;
float druck, maxdruck, mindruck;


void setup()

{
  time = millis();
  pinMode(analogA1, INPUT);
  pinMode(led, OUTPUT);
  pinMode(windgeschwindigkeitPin, INPUT); // Pin als Eingang
  digitalWrite(windgeschwindigkeitPin, HIGH); // aktiviere internen Pullup
  DHT1.begin();
  DHT2.begin();
  bmp.begin();
  lcd.begin (20,4);
  lcd.backlight();
  screentest();

  // initialize Timer1
    cli();          // disable global interrupts
    TCCR1A = 0;     // set entire TCCR1A register to 0
    TCCR1B = 0;     // same for TCCR1B
    // set compare match register to desired timer count:
    OCR1A = 15624; //15624
    // turn on CTC mode, set CS10 and CS12 bits for 1024 prescaler
    TCCR1B |= (1 << WGM12)|(1 << CS10)|(1 << CS12);
    // enable timer compare interrupt:
    TIMSK1 |= (1 << OCIE1A);
    // enable global interrupts:
    sei();
}
    
ISR(TIMER1_COMPA_vect)
{
  //digitalWrite(led, !digitalRead(led));
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // sets the value (range from 0 to 255):
    analogWrite(led, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  }

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
    // sets the value (range from 0 to 255):
    analogWrite(led, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  }
}

void loop()
{
  //runtime =(millis()/1000)/60;
      
      Windgeschwindigkeit(); // Windgeschwindigkeit holen    
      get_sensor();
      minmax();
      ausgabe(); // Ausgabe auf LCD
     //abfrage(); // Abfrage der Sensoren und Bedingung für ein ereignis z.b. LED An
    
}
  
void get_sensor(){
      ldr(); // Helligkeit holen
      dht0(); // INNEN Feuchtigkeit und Temp holen
      dht1(); // AUSSEN Feuchtigkeit und Temp holen
      bmp085(); // Druck und Temp holen
      temp = (t + temperature) / 2; //Durchschnitt aus beiden Temperatursensoren (DHT1 & BMP)
      taupunkt(); // Taupunktberechnung holen
}
  
          
void countWind() {
   windCounter ++;
}


void Windgeschwindigkeit()
{  
  windCounter = 0;
  time = millis();
  //zaehl-interrupt aktivieren
  attachInterrupt(1,countWind,RISING);
  //abwarten des messzeitraums
  delay(1000 * measureTime);
  //zaehl-interrupt deaktivieren
  detachInterrupt(1);
  //zeit bestimmen
  time = (millis() - time) / 1000;
  windgeschwindigkeit = (float)windCounter / (float)measureTime * windFactor;
  

   // ermitteln der Windstärke in Beaufort
  /*    if (windgeschwindigkeit >= 0 && windgeschwindigkeit <= 2)    { beaufort = 0; }
   else if (windgeschwindigkeit > 2 && windgeschwindigkeit <= 5)     { beaufort = 1; }
   else if (windgeschwindigkeit > 5 && windgeschwindigkeit <= 11)    { beaufort = 2; }
   else if (windgeschwindigkeit > 11 && windgeschwindigkeit <= 19)   { beaufort = 3; }
   else if (windgeschwindigkeit > 19 && windgeschwindigkeit <= 28)   { beaufort = 4; }
   else if (windgeschwindigkeit > 28 && windgeschwindigkeit <= 38)   { beaufort = 5; }
   else if (windgeschwindigkeit > 38 && windgeschwindigkeit <= 49)   { beaufort = 6; }
   else if (windgeschwindigkeit > 49 && windgeschwindigkeit <= 61)   { beaufort = 7; }
   else if (windgeschwindigkeit > 61 && windgeschwindigkeit <= 74)   { beaufort = 8; }
   else if (windgeschwindigkeit > 74 && windgeschwindigkeit <= 88)   { beaufort = 9; }
   else if (windgeschwindigkeit > 89 && windgeschwindigkeit <= 102)  { beaufort = 10; }
   else if (windgeschwindigkeit > 102 && windgeschwindigkeit <= 117) { beaufort = 11; }
   else                                                             { beaufort = 12; }*/
   }
  

void taupunkt()
  {
  tautemp = (a * t1) / (b + temp) + log(h1 / 100);
  tau = (b * tautemp) / (a - tautemp);
  }
  

void bmp085()
  {
  sensors_event_t event;
  bmp.getEvent(&event);  // BMP085 Luftruck ziehen
  druck = event.pressure  + ( 465 / 8.5 );
  bmp.getTemperature(&temperature);//BMP085 Temperatur ziehen
  }
  
  
void dht0()
  {
  h = DHT1.readHumidity();  //DHT22 Feuchtigkeit ziehen
  t = DHT1.readTemperature();  //DHT22 Temperatur ziehen
  }
  
  
void dht1()
  {
  h1 = DHT2.readHumidity();  //DHT22 Feuchtigkeit ziehen
  t1 = DHT2.readTemperature();  //DHT22 Temperatur ziehen
  }
  
  
void ldr()
  {
  //Prozentrechnung LDR
  int valueA1 = analogRead(analogA1);
  percent = (valueA1/1023.0) * 100.0;
  }
  
  
void minmax()
{
if (windgeschwindigkeit > maxwind ) maxwind = windgeschwindigkeit;
/*if (windgeschwindigkeit < minwind ) minwind = windgeschwindigkeit;
if (temp > maxtemp) maxtemp = temp;
if (temp < mintemp) mintemp = temp;
if (h > maxh) maxh = h;
if (h < minh) minh = h;
if (druck > maxdruck) maxdruck = druck;
if (druck < mindruck) mindruck = druck;
if (tau > maxtau) maxtau = tau;
if (tau < mintau) mintau = tau; */
}


void screentest()
  {
    //Screentest
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(50);
    lcd.noBacklight();
    delay(50);
  }
  lcd.backlight();
  lcd.print("Weather Station V3.4");
  lcd.setCursor ( 0, 1 );
  lcd.print("********************");
  lcd.setCursor ( 0, 2 );
  lcd.print("Prog by Daniel Agocs");
  lcd.setCursor ( 0, 3 );
  lcd.print("   STARTE MESSUNG   ");
  }
  
  
void ausgabe()
  {
    lcd.clear();
      
    lcd.setCursor ( 0, 0 );
    lcd.print("I: ");
    lcd.print(temp,1);
    lcd.write(223);
    lcd.print("C -~ ");
    lcd.print(h,1);
    lcd.print("%");
    
    lcd.setCursor ( 0, 1 );
    lcd.print("O: ");
    lcd.print(t1,1);
    lcd.write(223);
    lcd.print("C -~ ");
    lcd.print(h1,1);
    lcd.print("%");
    
    lcd.setCursor ( 0, 2 );
    lcd.print("W: ");
    lcd.print(windgeschwindigkeit,0);
    lcd.print("km/h");
    
    lcd.setCursor( 11, 2 );
    lcd.print("Max: ");  
    lcd.print(maxwind,0);
    
    
    lcd.setCursor ( 11, 3);
    lcd.print(druck,1); //440 = Aktuelle höhe über NN, diese ändern und anpassen bei anderen Orten
    lcd.print("hPa");
    
    lcd.setCursor (0, 3 );
    lcd.print("T: ");
    lcd.print(tau,1);
    lcd.write(223);
    lcd.print("C");
  
  }

  /*lcd.setCursor(13 , 1 );
    lcd.print("L: ");
    lcd.print(percent,0);
    lcd.print("%");
    
    lcd.setCursor ( 13, 1 );
    lcd.print(runtime);
    lcd.print("min");
    }
    
void maxausgabe()
{
    lcd.clear();
    
    lcd.setCursor ( 0, 0 );
    lcd.print("TempMAX: ");
    lcd.print(maxtemp,1);
    lcd.write(223);
    lcd.print("C");
    
    lcd.setCursor ( 0, 1 );
    lcd.print("HumidMAX: ");
    lcd.print(maxh,1);
    lcd.print("%");
    
    lcd.setCursor ( 0, 3 );
    lcd.print("WindMAX: ");  
    lcd.print(maxwind,0);
    lcd.print("km/h");
  
}*/



void abfrage()
  {
  if(temp >= 21.5 & windgeschwindigkeit < 30 & percent > 30  & h <= 90){
  
    digitalWrite(led, HIGH);
  }  
   else
   {
    digitalWrite(led, LOW);
  }
  }


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2014, 12:11
Beitrag #15
RE: Wetterstation mit LC-Display über I2C --> Feuchte,Temp,Wind,Druck,Tau,MIN/MAX
Huhu alle zusammen und Hallo Wampo Smile

Erstmal ein Lob und vielen Dank für Dein super tolles Projekt hier Smile) Ich bin noch Neuling auf dem Gebiet und befasse mich auch gerade mit einer Wetterstation / Arduino + Programmierung... Anbindung von 1 Wire und I2C Modulen und den 20*4 Displays an das kleine Board.
Das Board ist ein Arduino Board ähnlich dem Duemilleneuve 168 mit 16 K Speicher und 16 Mhz. ( ein Mega 2560 R3 ATmega2560-16AU ist schon unterwegs, denn der Speicherplatz beim kleinen ist einfach zu gering... )

*Grübel* uff.. ist ganz schön viel zu lernen und zu verstehen Smile) Aber ich geb nicht auf Smile

Meine " Wetterstation soll auch die Werte auslesen wie Temperatur, Luftfeuchte, Luftdruck, Höhe, Kontostand.... ÄÄhh.. mom... diesen Sensor habe ich noch nicht gefunden Smile)
Ein Regensensor / Niederschlagsmesser, einen Windmesser, Lichtmenge / UV Wert folgen.... erstmal alles noch lernen Smile)

Was mich als naturwissenschaftlich interessierter Mensch sehr begeistert, ist ein Blitzsensor ( Gewitterdetektor )... Einen Prototypen habe ich mal gebaut nach einer Schaltung, die ich gefunden habe, und die Anbindung funktioniert schon Smile Nur ist der gebaute Empfänger nicht so perfekt / präzise, wie dieser Gewittersensor-Chip AS3935 ( auch über I2C auslesbar ) . Muss da noch bisschen an der Empfangsschaltung verfeinern.

Meine ganzen ausgelesenen Werte mag ich dann auf einer SD Card als Text-Log speichern mit einer genauen Uhrzeit / Datum.

Da kommt der I2C RealTimeClock Baustein DS 1307 ins Spiel, ggf. mit Unterstützung durch einen I2C DCF77 Empfänger.

Dieses DS 1307 Modul ist gut auslesbar, und die internen Werte sollten per Knopfzelle gehalten werden... aber Sad... sobald ich den erneut anspreche und auslese, startet der wieder von vorne... Irgendwie eigenartig... Oder sehe ich da etwas falsch ?
Ich verstehe das Ding so,,, das es eine Uhrzeit ausgibt auf Anfrage und an sonsten, falls keine Betriebs Spannung da ist, per Knopfzelle weiter wurschtelt... ?! Smile

Vielleicht kann mir da jemand etwas helfen Smile

LG

Frank
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2014, 13:18
Beitrag #16
Wetterstation mit LC-Display
Hy Hy,

danke das dir das Projekt gefällt. Ja da hast recht es hängt ne menge arbeit drin und bis es bei mir gelaufen is sind viele wochenenden draufgegangen.

Aber da schau her, hab ich schon wieder was neues gefunden ---> Gewittersensor!!
Wusste gar nicht das es sowas gibt---> Bestellt!!! Big Grin

Zum Thema mit der RTC, bin kein Fan davon weil ich genau die gleichen probleme hab, spätestens nach ein par abfragen stimmt die Uhr nicht mehr bzw. steht auf "0".
Ich würde auf ne DCF77 zurückgreifen und mir ne eigene Selbsthaltung bauen. Hab mich aber schon lange nicht mehr damit befasst wie und warum das so is.

Beim Display von 4x20, sag ich dir gleich wirst Platzprobleme kriegen. Würde dir ne nummer größer empfehlen 40x4 Wink oder Vollgrafikdisplay bzw. TFT.
http://www.ebay.de/itm/LCD-Display-Modul...2a3f457f33
Das display gibts auch im netz in Blau und RGB hab ich auch schon gesehen, nette Spielerei wäre es dann z.b. Farbänderung vom Display je nach Wettersituation, Rot = Kackwetter, Gelb = Stabiles Wetter und Grün = Bomben Wetter Wink

Das mit dem Regensensor is auch ne nette Spielerei allerdings würde ich unter den Sensor ne Heizmatte klemmen die bei Regen oder Schnee eingeschaltet wird.
http://www.ebay.de/itm/Neu-Luftfeuchtigk...3a86921975

Berichte weiter über deinen Fortschritt, vielleicht reissts mich ja nochmal rum das Projekt zu Vollenden, aber momentan Steck ich zu tief im SEGWAY Projekt und is auch ebenfalls fast fertig, zumindest der Prototyp....Wink
http://www.arduinoforum.de/arduino-Threa...20z2-Motor

Greez Wampo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  7 Zoll Display und NRF24 Propleme schlappy82 15 382 28.11.2016 17:10
Letzter Beitrag: hotsystems
  Grafiken auf OLED-Display darstellen scritch 8 468 17.11.2016 13:33
Letzter Beitrag: scritch
  Graphisches Barometer mit e-Paper Display Bender 9 2.373 06.11.2016 06:10
Letzter Beitrag: Bender
  Wetterstation sascha35 19 4.638 18.12.2015 16:51
Letzter Beitrag: sascha35
Thumbs Up Facebook LCD (Like Crystal Display) mit Ethernet Shield Wampo 0 983 02.12.2015 23:05
Letzter Beitrag: Wampo
  E-Paper Display Xtremefly 7 2.951 22.07.2015 11:48
Letzter Beitrag: Xtremefly
  Substrat-Feuchtigkeitsmesser + Temp. und RLF Nifu 19 4.872 19.07.2015 11:39
Letzter Beitrag: MeisterQ
  Display 5" Xwill 26 10.450 04.06.2015 08:39
Letzter Beitrag: DaniDD
Sad Temperatur u. feuchtigkeit Webserver+speichern der Temp. u. Feuchti. auf sd Porblem!! TbO92 0 1.885 27.10.2014 10:14
Letzter Beitrag: TbO92
  Wechsel vom 16x2 auf 5110 Display? Mr.Q 8 4.469 25.10.2014 19:05
Letzter Beitrag: Mr.Q

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste