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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Mobile wissenschaftliche Wetterstation
19.07.2014, 06:30
Beitrag #1
Video Mobile wissenschaftliche Wetterstation
Hmm... nun mache ich hier mal meinen eigenen Thread auf. Mein Projekt einer mobilen wissenschaftlichen Wetterstation wird nun doch schon etwas aufwendiger Smile

Sicher ist es das Thema "Wetterstation", das viele Neulinge beschäftigt in den Anfängen der Arduino-Programmierung und des Lernens. Es gibt ja bereits soo viele Sensoren, und dieses Thema wird immer gern heiß diskutiert Smile

Meine GrundideeIdea:

Ein Messgerätesystem mit Datenlogger ( SD-Card ) für Unterwegs, Kabellos über Wifi oder Bluetooth-Anbindung zum Anzeigegerät im Pkw. Das Ganze soll in einer schmalen länglichen, und sehr robusten Box untergebracht sein.

Die Länge wird ca. 1 bis 1,30M sein, Breite ca. 15cm und Höhe 7 cm. Es soll stabil auf einem Querholm eines Dachgepäckträgers befestigt werden können, Wetter und Schlagfest sein, und mit einer Sekundärversorgung über Akku / Solarpaneel, b.z.w. dann per 12 Volt übers Kfz-Bordnetz versorgt werden. Optimal wäre aber eine vollkommen autarke und kabellose Funktionsweise, denn es ist nicht immer einfach, die Kabel alle ins Auto zu führen, ohne Löcher bohren zu müssen oder alles durchs Fenster führen zu müssen.

Zum Einsatz kommen soll dieses mobile System beim Stormchasing, um möglichst viele Wetterdaten vor Ort des aktuellen und herannahenden Wetters aufzuzeichnen. Diese Daten können dann ggf. per GSM an Wetterzentralen übertragbar sein, und in einem genormten Meldeformat vorliegen.

Erfasst werden sollen folgende Werte:

Temperatur, Luftdruck, Luftfeuchte, Blitzstärke und Anzahl, Niederschlag, GPS-Daten der aktuellen Position, Taupunkt, aktuelle Höhe, geografische Ausrichtung
Ich suche noch seit einiger Zeit den Schaltplan für ein Messgerät, mit dem man die Statische Ladung in den Wolken messen kann. Bisher habe ich nur sowas als Fertiggerät gefunden, und der jeweilige Preis hat mir Tränen in die Augen kommen lassen Sad((

Später wird ein Regenmesser, eine Windrose + Windmesser, sowie weitere Messgeräte folgen. Optimal wäre eine kleine robuste und wetterfeste Tag/Nacht- Farbkamera oben auf der Box, die vom Steuergerät aus fernsteuer- und drehbar ist, und die Einzelaufnahmen von der Wetterfront / den Blitzen, und von den Wetterereignissen knipsen kann.

Nach längerer Überlegung habe ich beschlossen, dieses Projekt in Angriff zu nehmen, und vom technischen her und vom Aufbau des Systems dürfte es ( bis auf das Ladungsmessgerät ) keine großen finanziellen, mechanischen oder elektrischen Probleme geben. Sicher gibt's solche Geräte schon im High-Tech Bereich mit sicher sehr leckeren Preisen, aber das ist ja nicht mein Bestreben, sowas zu erreichen.

Es soll sich preislich im Rahmen halten, und doch zuverlässig funktionieren. Erstens soll es ja Spaß machen, daran zu bauen und 2. ist der Weg ja bekanntlich das Ziel Big Grin

Nun aber mal los ans Projekt Smile))

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 08:33
Beitrag #2
RE: Mobile wissenschaftliche Wetterstation
Nachtrag:

Nach einigem tüfteln und vielen Rückschlägen habe ich ein teil meiner Wetterstation am laufen, und die Werte werden schon auf einem 20x4 LCD Display angezeigt. Ein 2. 20x4 Display liegt schon auf meinem Schreibtisch, nur leider gibt's da Probleme, eine abweichende I2C Adresse festzulegen Sad denn diese kleine Huckepackplatine ( I2C Wandler auf das 2004 Display ) ist festgelötet und so wie ich es bis jetzt sehen konnte, gibt's keinen Jumper / Lötbrücken, um eine andere I2C Adresse einstellen zu können Sad( Werde mir wohl dann doch noch 2 einstellbare Platinen kaufen müssen Sad

Hier mal der Sketch. Sicher gibt's da noch einiges an Verbesserungspotential, aber wenn ich mal alles richtig gelernt habe, wird's umgeschrieben und optimiert. Wenn jemand Verbesserungsvorschläge hat, würde ich mich sehr freuen. Gestern abend habe ich noch herausgefunden, wie ich 2 Programmteile in einem Sketch anordnen kann Smile) Langsam geht's vorran Smile)

/* Testsketch
Wetterstation mit 20 character 4 line I2C Display
+Backpack Interface I2C
Arduino Mega 2560 und einigen Sensoren
I2C Bus: Vcc und Masse, SDA to Pin20 , SCL to Pin21 on Arduino Mega 2560
Sketch nur für Arduino 1.0+
Die Darstellung aller Werde der Sensoren erfolgt auf dem Serial Monitor.
Ausgewählte Werte werden auf dem LCD Display ausgegeben.
--> Wenn das 2. Display angeschlossen is, werden dort auch die restlichen Werte angezeigt. */

/*-----( Diese Bibliotheken werden für den Import gebraucht )-----*/
#include <Wire.h> // Kommt mit Arduino IDE
#define BMP085_ADDRESS 0x77 // I2C Addresse des BMP085
const unsigned char OSS = 0; // Oversampling Einstellung
// Kalibrierungswerte
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;
// b5 wird in bmp085GetTemperature(...)kalkuliert, diese Variable wird auch in bmp085GetPressure(...) benutzt.
// also muss ...Temperature(...) noch vor ...Pressure(...)ausgelesen und berechnet werden.
long b5;

#include <LiquidCrystal_I2C.h>
#include "DHT.h" // DHT & AM2302 Bibliotheken

// Versionsnummer
const float fVerNum = 0.03;


/*-----( Konstanten deklarieren )-----*/

/*-----( Objekte deklarieren )-----*/
// Setzt die I2C Adresse auf 0x27 für das 20 zeichen 4 zeilen Display
// Setzt die Pins des I2C Chips, die für die LCD-Display Verbindung gebraucht werden:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);


/*-----( Deklarierung der Variablen )-----*/

// Data pin verbunden mit AM2302
#define DHTPIN 2

#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE); // LED pins

//////////////////////////////////////////////////////
//
// SETUP
//
void setup() /*----( SETUP: Läuft nur einmal ab )----*/
{
// Setzen des Seriellen Monitors
Serial.begin(9600); // Wird gebraucht, um die Zeichen auszugeben
while (!Serial) ; // warten bis der Arduino Serial Monitor geöffnet wird
Wire.begin();
bmp085Calibration();
lcd.begin(20,4); // Initialisiere das LCD-Dispplay für 20 zeichen
// und 4 Zeilen, schalte die Hintergrundbeleuchtung ein


// -------- Schreibe die Begrüssungsmeldung aufs Display ------------------
// Anmerkung: Cursor Position: Zeilen und Zeichen starten immer bei 0 Smile

lcd.setCursor(0,0); //Start bei Zeichen 0, Zeile 0
lcd.print(" Wetterstation 1.0 ");
delay(300);
lcd.setCursor(0,1);
lcd.print(" mit Atmega168 ");
delay(300);
lcd.setCursor(0,2);
lcd.print(" DonnerBlitz und ");
lcd.setCursor(0,3);
delay(300);
lcd.print(" Funkenflug ");
delay(8000);
lcd.clear();
}

/*--(Ende des einmaligen Setups )---*/


void Aussentemperatur_Luftfeuchtigkeit() /*----( LOOP1: Läuft permanent )----*/
/* Hier gehts um die Anzeige der Temperatur und der Luftfeuchtigkeit.
Die Meßwerte werden periodisch aus dem Sensor AM2302 Temperature / Humidity Sensor (DHT22)
ausgelesen, und ( vorerst noch ) auf dem seriellen Monitor mit 9600 baud ausgegeben,
sowie auf dem LCD-Display */
{
// Das Auslesen der Temperatur und der Luftfeuchtigkeit benötigt meist um die 250 Millisekunden!
// Die ausgelesenen Werte des Sensors können bis zu 2 Sekunden alt sein ( es ist ein sehr langsamer Sensor )
float h = dht.readHumidity();
float t = dht.readTemperature();

// Überprüfe, ob die zurück gemeldeten Ergebnisse gültig sind. Sind sie "NaN" (not a number), dann ging irgendetwas schief !
if (isnan(t) || isnan(h))
{
Serial.println(F("Fehler beim Auslesen des DHT"));
}
else
{
Serial.print(F("Luftfeuchtigkeit: "));
Serial.print(h);
Serial.print(F(" %\t"));
Serial.print(F("Temperatur: "));
Serial.print(t);
Serial.println(F(" C"));
}

// Bewege den Register pointer zurück zum ersten Register
Wire.beginTransmission(0X51); // "Hey, DHT @ 0x51! aufwachen, Nachricht für Dich!"
Wire.write(1); // "schieb Dein Registerpointer zurück zu 01h"
Wire.endTransmission(); // "Danke, und Tschüss..."
// nun fordere die Daten aus dem DHT an
Wire.requestFrom(0x51, 1); // Anfrage für 1 byte vom Slave 0x51

while(Wire.available()) // Slave könnte evtl. weniger senden als erwartet
{
byte c = Wire.read(); // Empfange 1 Byte als Zeichen

lcd.setCursor(0,0); //Starte bei Zeichen 0 auf Zeile 0
lcd.print("Temp.(Indoor): ");
lcd.setCursor(18,0);
lcd.print(" C");

lcd.setCursor(0,1);
lcd.print("Luftfeuchte: ");
lcd.setCursor(18,1);
lcd.print(" %");

lcd.setCursor(0,2);
lcd.print("Luftdruck: ");
lcd.setCursor(16,2);
lcd.print(" hPa");

lcd.setCursor(5,3);
lcd.print("Blitzereignisse");

lcd.setCursor(14,0);
lcd.print(t, 1); // Anzeige der Temperatur
//delay(500);

lcd.setCursor(14,1);
lcd.print(h, 1); // Anzeige der Luftfeuchte
//delay(500);

lcd.setCursor(0,3);
lcd.print©; // Anzeige der Blitze
delay(500);

}
}




void Luftdruck_Innentemperatur() /*----( LOOP2: Läuft permanent )----*/
/* Hier gehts um die Anzeige der Temperatur, Luftdruck und Höhe.
Die Meßwerte werden periodisch aus dem Sensor BMP085
ausgelesen, und ( vorerst noch ) auf dem seriellen Monitor mit 9600 baud ausgegeben,
sowie auf dem LCD-Display */
{
float temperature = bmp085GetTemperature(bmp085ReadUT()); // muss zuerst aufgerufen werden
float pressure = bmp085GetPressure(bmp085ReadUP()) / 100;
float atm = (pressure / 101325)*100; // "standard atmosphere"
float altitude = calcAltitude(pressure*100); //Unkompensierte Berechnung - in Metern
Serial.print("Temperature: ");
Serial.print(temperature, 2); // Anzeige des Wertes mit 2 Dezimalstellen
Serial.println(" deg C");
Serial.print("Pressure: ");
Serial.print(pressure, 0); //Anzeige nur ganze Zahlen bitte.
Serial.println(" hPa");
Serial.print("Standard Atmosphere: ");
Serial.println(atm, 4); //Zeige den Luftdruck mit 4 Zeichen an
Serial.print("Altitude: ");
Serial.print(altitude, 2); // Anzeige mit 2 Dezimalstellen
Serial.println(" M");
Serial.println();//Zeilenumbruch
delay(1000); //warte ne Sekunde, um die Werte nochmal auszulesen

lcd.setCursor(12,2);
lcd.print(pressure, 0); // Anzeige des Luftdrucks
delay(10000);

}
// Speichert alle bmp085 Kalibrierungswerte in globale Variablen.
// Die Kalibrierungswerte werden benötigt, um den Luftdruck und die Temperatur zu berechnen.
// Diese Funktion solle gleich am Anfang des Programmes aufgerufen werden.

void bmp085Calibration()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

// Kalkuliere die Temperatur in Grad Celsius
float bmp085GetTemperature(unsigned int ut){
long x1, x2;

x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
b5 = x1 + x2;

float temp = ((b5 + 8)>>4);
temp = temp /10;

return temp;
}

// Kalkulieren des Luftdrucks wird aufgegeben
// Die Kalibrierungswerte müssen vorhanden sein
// b5 wird auch benötigt, und so muss bmp085GetTemperature(...)als erstes aufgerufen werden.
// Die zurückkommenden Ergebnisse werden den Luftdruck in hPa darstellen.

long bmp085GetPressure(unsigned long up){
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;

b6 = b5 - 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;

// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;

b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;

x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;

long temp = p;
return temp;
}

// Lese 1 Byte vom BMP085 bei 'address'
char bmp085Read(unsigned char address)
{
unsigned char data;

Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();

Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;

return Wire.read();
}

// Lese 2 Bytes vom BMP085
// Das erste Byte wird von 'address' sein
// Das 2. Byte ist von 'address'+1
int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;

Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();

Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();

return (int) msb<<8 | lsb;
}

// Lese den unkompensierten Temperaturwert aus
unsigned int bmp085ReadUT(){
unsigned int ut;

// Schreibe 0x2E ins Register 0xF4
// Dieses veranlasst eine Temperaturauslesung
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();

// warte nun 4.5ms
delay(5);

// Lese 2 Bytes von den Registern 0xF6 and 0xF7
ut = bmp085ReadInt(0xF6);
return ut;
}

// Lese den unkompensierten Luftdruckwert aus
unsigned long bmp085ReadUP(){

unsigned char msb, lsb, xlsb;
unsigned long up = 0;

// Schreibe 0x34+(OSS<<6) in das Register 0xF4
// Dieses veranlasst die Auslesung des Luftdrucks mit oversampling Einstellungen
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();

// Warte auf Kommunikation, die Verzögerungszeit hängt von OSS ab
delay(2 + (3<<OSS));

// Lese das Register 0xF6 (MSB), 0xF7 (LSB), und 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);

up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);

return up;
}

void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // Starte Übertragung zum Gerät (deviceAddress)
Wire.write(address); // Sende die Register Adresse
Wire.write(val); // Sende die Werte, die geschrieben werden müssen
Wire.endTransmission(); // Ende der Übertragung
}

int readRegister(int deviceAddress, byte address)
{

int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // Register zum Auslesen
Wire.endTransmission();

Wire.requestFrom(deviceAddress, 1); // Lese 1 Byte

while(!Wire.available()) {
// abwarten...
}

v = Wire.read();
return v;
}

float calcAltitude(float pressure){

float A = pressure/101325;
float B = 1/5.25588;
float C = pow(A,B);
C = 1 - C;
C = C /0.0000225577;

return C;
}


void loop() /* --(Startet nun den main loop )-- */
{
Aussentemperatur_Luftfeuchtigkeit();
Luftdruck_Innentemperatur();
}

/* --(Ende des main loops )-- */


/* ( ENDE ) */

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 12:09
Beitrag #3
RE: Mobile wissenschaftliche Wetterstation
Moin,
der Code sieht doch schon mal gut aus. Man könnte bei festen Werten die Serial- und lcd.print noch über den F-Macro scheuchen. Das spart einiges a SRAM. So nach dem Motto Serial.print(F("bla bla"));

Um zwei LCDs mit der gleichen Adresse zu nutzen kannst du mehrere I2C - Busse erstellen und dort die gleichen Adressen verwenden. Guck mal hier: http://forums.adafruit.com/viewtopic.php?f=25&t=13722

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 12:36 (Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2014 12:43 von fp.blues2013.)
Beitrag #4
RE: Mobile wissenschaftliche Wetterstation
Huhu Ricardo Smile

Ja, diese Syntax ist mir schon mal vor die Nase gekommen... Werde mich mal damit beschäftigen Smile Danke für den Tipp.
Ich habe noch ein Anliegen: In dem obrigen Sketch habe ich ja 3 Loops geloopt, und jeder hat eine andere Aufgabe.
Den 3. Loop habe ich hier noch nicht veröffentlicht. Der ist der Datenlogger mit einem SD-Card reader/writer von LC-Soft.
Diesen habe ich direkt an die Pins 50-53 sowie 5 Volt VCC und GND an gestöpselt. Die Software funktioniert gut, und die Karte mit 1 GB wird beschrieben.
Aber nun zu meinem Anliegen:

In jedem Loop wird ja eine bestimmte Aufgabe abgearbeitet, und es kommen ja auch verschiedene Variablen zum Einsatz, die in jedem Lopp dann aufs LCD geschrieben werden. . Ich habe gemerkt beim Testlauf, das ich im 2. Loop zum Beispiel nicht die Werte des 1. Loops benutzen kann.. *Kopfkratz* .... Sad Gibt's irgendwie eine Möglichkeit, alle Variablen durch "globale" Varianten zu ersetzen, so das ich zum Senden ans LCD Display von überall drauf zugreifen kann ? Dann hätte ich in einem 4. Loop die ganze Anzeigesache reingepackt, am Ende zum Beispiel.
Genauso triffts mich ja jetzt auch beim Daten loggen....Ich muss die ausgegebenen Daten der einzelnen Variablen aus den verschiedenen Loops sammeln können, um sie dann nach einem gewissen Schema auf die SD Card zu schreiben....

Das Datum und die Uhrzeit sollen ja auch noch dazukommen, und ggf. noch andere Ergebnisse...

Das mit dem 2. I2C Bus ist eine nette Sache Smile 2. Möglichkeit wäre es, wenn ich per Tastendruck immer "blättern" könnte. zum Beispiel 1 x drücken.. Anzeige der Ergebnisse 1-4, 2. Mal drücken Anzeige der Ergebnisse 5-8, 3. Mal drücken wieder zurück zu den ersten 4 Werten. Das mit dem Taster und den Interrupt kriege ich sicher hin, nur mit dem Aufbau des Scrips haperts noch *schäm*

*hilfee* Smile

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 13:00
Beitrag #5
RE: Mobile wissenschaftliche Wetterstation
Zitat: nur mit dem Aufbau des Scrips haperts noch *schäm*
Hier braucht sich keiner schämen, wir haben alle mal angefangen und sind alle noch am lernen Exclamation
Okay, zu deinen Fragen:
1. Ich würde für jede Funktion Aussentemp, Luftfeuchte, Innentemp, Luftdruck eine globale Struktur aufsetzen. Ist im Prinzip ein Array welches Werte verschiedener Datentypen enthalten kann. In diese Struktur schreiben die Funktionen dann rein (nicht als Returnwert sondern direkt) und du kannst eine Funktion schreiben die dann die Werte der Strukturen entweder im zeitlichen Wechsel oder auf "Knopfdruck" ausgibt.
Wie man eine Struktur benutzen kann ist zb. hier zu sehen: http://www.arduinoforum.de/arduino-Threa...lichkeiten Der Code ist zwar recht lang, man kann aber gut den Gebrauch einer Struktur erkennen.
2.Für die Ausgabe per Knopfdruck brauchst du ja im Prinzip ein Menüsystem. Nach deinen Aussagen hört sich das an, dass du ein LCD Keypad-Shield benutzt ?
Wenn ja, guckst du hier: http://www.hackshed.co.uk/arduino-lcd-ke...nu-system/

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 13:22
Beitrag #6
RE: Mobile wissenschaftliche Wetterstation
Wow,,,, das ist guter Stoff Big Grin Ich lese mich auch gerade durchs Arduino Buch wegen der Arrays und wird gleichmal ein paar TestScripts schreiben und Testaufbauten zusammennageln Smile Wenn ich diese beiden Punkte kann, wird ich mein Script dann mit dieser neuen Struktur frisch aufsetzen...

Nein ich habe kein LCD shield. habe die normalen 20x4 mit aufgelötetem "BackPack" I2C Wandler.. Uff ich habe schon wieder GAU Smile)
Gemeines Ausgabe Syndrum.... eBay lässt grüssen Big Grin Big Grin alles nur so kleine Pfennigbeträge aber es läppert sich Sad

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.07.2014, 08:34 (Dieser Beitrag wurde zuletzt bearbeitet: 20.07.2014 08:42 von fp.blues2013.)
Beitrag #7
RE: Mobile wissenschaftliche Wetterstation
Update Smile

Uff, war das gestern harte Arbeit.. habe die RTC-DCF77 noch mit eingebunden, und musste einen Ausgabestring irgendwie verändern, sodass anstelle nur einer Zahl für den Wochentag:

Heute ist: 6, der 19.07.13 um 20.35.01 Uhr so schreibt:

Heute ist: Samstag, der 19.07.13 um 20.35.01 Uhr

Hört sich für jemanden erfahrenes sicher einfach an, aber für mich als Neuling wars etwas anstrengender Sad
Nach einigem tüfteln und googeln, nachlesen und ausprobieren hab ich es dann geschafft:

{
char clockString[56];
char Wochentag[12];

if (dateTime.getWeekday()==0)
{
sprintf(Wochentag, "Montag");
Serial.println();
}
else if (dateTime.getWeekday()==1)
{
sprintf(Wochentag, "Dienstag");
Serial.println();
}
else if (dateTime.getWeekday()==2)
{
sprintf(Wochentag, "Mittwoch");
Serial.println();
}
else if (dateTime.getWeekday()==3)
{
sprintf(Wochentag, "Donnerstag");
Serial.println();
}
else if (dateTime.getWeekday()==4)
{
sprintf(Wochentag, "Freitag");
Serial.println();
}
else if (dateTime.getWeekday()==5)
{
sprintf(Wochentag, "Samstag");
Serial.println();
}
else if (dateTime.getWeekday()==6)
{
sprintf(Wochentag, "Sonntag");
Serial.println();
}

sprintf(clockString, "Heute ist: %s, der %02u:%02u:20%02u um %02u.%02u.%02u ", Wochentag, dateTime.getDay(), dateTime.getMonth(), dateTime.getYear(), dateTime.getHour(), dateTime.getMinute(), dateTime.getSecond());

Serial.print(clockString);
Serial.println(" <-- Ausdruck nur zur Darstellung auf dem Serial Monitor");
Serial.println();

habe die Funktion dateTime.getWeekday(), die oben in dem String drin war, gegen eine andere getauscht und eine if..else schleife eingebaut, die anhand der Zahl, die dateTime.getWeekday() beinhaltet dann den Wochentag als Text in den String einfügt. Auch den String selber habe ich umbauen müssen, denn anstelle von %02U für die Zahl musste %s für eine Zeichenkette hin. Dann musste ich noch die Länge anpassen, und nach ein paar Testläufen hats dann geklappt. Nun wird dieser DCF77 genaue Zeitstring bei jedem Meßzyklus als ersten voran auf die SD-Karte geschrieben. So ganz habe ich die obrige Sache noch nicht verstanden mit den Funktionen, Strings und dem Umwandeln, aber gut.. bissi Anfängerglück braucht man auch Big Grin Big Grin

So sieht nun die Ausgabe im Serial Terminal aus:

********************************************************************************​*******************************
Neuer Datensatz:

Aussentemperatur: 28.60 C
Luftfeuchtigkeit: 50.80 %
6 Blitzereignisse


Temperatur(Indoor): 28.20 deg C
Luftdruck: 998 hPa
Standard Atmosphaere: 0.9849
Hoehe ueber NN.: 127.73 M


Heute ist: Sonntag, der 20:07:2014 um 09.40.22 Uhr <-- Ausdruck nur zur Darstellung auf dem Serial Monitor

Heute ist: Sonntag, der 20:07:2014 um 09.40.22 Uhr <-- Auf SD-Card geschrieben

********************************************************************************​*******************************


Nun habe ich in meine Wetterstation schon Außentemperatur, Luftfeuchte, Innentemperatur, Luftdruck und die DCF77 RTC eingebunden zusammen mit dem Datenloggen der einzelnen Werte.

Nun geht's an das Bluetoothmodul HC-05, was momentan noch gewaltig rumzickt, denn ich bekomme nicht immer eine stabile Verbindung / kann nicht immer drauf zugreifen..... u.s.w. Ich mag gerne die Ausgaben des Serial Monitors auf einen Android- Monitor APP ausgeben ....
Eine Bluetoothverbindung kann ich meist mit meinem Smartphone etablieren, über den alten USB Bluetooth Stick am PC bricht die Verbindung immer wieder ab Sad( Meine App, die gehen sollte, ist die Arduino Bluetooth Terminal. Habe mal gegoogelt, und da gibt es eine Anleitung, aber das ist schon heftiger Stoff zum umstellen, das der HC-05 dann mit dem BT-Terminal zusammenspielt..

Also wieder 1 Liter Kaffee brauen und dann ab an die Arbeit....

*grübel* wie bekomme ich es hin, das das Terminal auch die ÄÖÜs und so richtig darstellt ? Das würde mich mal echt interessieren...

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.07.2014, 12:27
Beitrag #8
RE: Mobile wissenschaftliche Wetterstation
Zitat:*grübel* wie bekomme ich es hin, das das Terminal auch die ÄÖÜs und so richtig darstellt ?
Ich denke die App bekommt das an sich schon hin. Nur wird der Arduino nicht die ÄÖÜ etc. senden, da er "englisch denkt". Da gibt's die Umlaute nicht.
Vielleicht solltest du anstatt der Charakter die ASCII-Werte der Umlaute senden Huh
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Rainbow Wetterstation mit LC-Display I2C --> Feuchte, Temp, Wind, Druck, Tau, Tendenz Wampo 25 36.317 24.10.2016 19:05
Letzter Beitrag: Wampo
  Wetterstation sascha35 19 4.677 18.12.2015 16:51
Letzter Beitrag: sascha35
  Arduino GPRS Wetterstation derdemo 4 8.108 25.07.2014 00:49
Letzter Beitrag: fp.blues2013

Gehe zu:


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