Luftdruck bzw. Höhe berechnen

OP #986102
Hallo,
ich habe eine kleine Frage.
Wie kann ich die Höhe messen???
Ich dachte an eine Lösung mit ATMEGA 8 und ZIGBEE-Funkmodulen.
Ich habe gelesen, dass ich zur Berechnung des Höhenunterschieds den 
Druck am Boden und die Temp. in der Luft / 2 brauche.
Die Temp. hab ich ja eh.

Das ganze sollte wenn möglich in C sein,da kann ich es in meinen Code 
einbauen.

<Ich hoffe ihr könnt mir Helfen ;)
OP
Hannes wrote:
>>Wie kann ich die Höhe messen???
>
>>Das ganze sollte wenn möglich in C sein
>
> Die Höhe ist nicht in C. Die ist in m. Oder cm. Oder km.

Ich meine in der Programmiersprache "C"
Die Höhe sollte ja auch in m sein.

  Entschuldugung
Gast
Nimm einen Drucksensor und einen ADC. Bei einer elektrischen Aufloesung 
von 16bit kommt man auf 10cm Hoehenaufloesung. Die Formel mit dem 
Exponenten sollte doch machbar sein...
OP
>so nicht wrote:
>> Nimm einen Drucksensor und einen ADC. Bei einer elektrischen Aufloesung
>> von 16bit kommt man auf 10cm Hoehenaufloesung. Die Formel mit dem
>> Exponenten sollte doch machbar sein...

 Könnt ihr mir mit dieser Formel helfen?
 Ich habe es irgendwie nicht geschnallt<span></span>
OP
geht es denn So:
1
P = 1000;
2

3
ADCSRA |= (1<<ADSC);
4
  while ( !(ADCSRA & (1<<ADIF)) )
5
            ;
6
buffer = ADCL | (ADCH<<8);
7
Vout = buffer;
8
P = 1000 *  Vout  +  95;
9

10
Vout/Vs = 0,009*P-0,095
11

12
Vout/Vs+0,095 = 0,009*P
13

14
(Vout/Vs+0,095)/0,009 = P
???
die Umrechnung ist aber immer noch eine lineare Näherung der genannten
http://de.wikipedia.org/wiki/Barometrische_Höhenformel
"In der einfachsten Form kann grob angenommen werden, dass der Luftdruck 
in der Nähe des Meeresspiegels um ein Hektopascal je acht Meter 
Höhenzunahme abnimmt."
(Die komplizierteren Formeln auf dieser Seite sind sehr abschreckend, 
z.B. exponentiell mit Exponent -5,255)
http://de.wikipedia.org/wiki/Barometrische_Höhenmessung
http://de.wikipedia.org/wiki/Barometrische_Höhenmessung_in_der_Luftfahrt

Der Unterschied zwischen Hoch- und Tiefdruckgebiet entspricht leider 
mehreren hundert Metern, die Messung muß daher "zeitnah" kalibriert 
werden.
OP
Hier eine kleine Funktion zur Umrechnung:
1
void berechne_hoehe(int press)
2
unsigned int meeresspegel,hoehe,druck_meter
3
{
4
meeresspegel=1013.25;//druck auf dem Meeresspiegel definieren
5
druck_meter=0.12;//druck pro Meter
6
hoehe=press * druck_meter;
7
hoehe=hoehe / meeresspegel;
8

9
return hoehe
10
}

Ist die so richtig?
Die gibt als Rückgabewert die Höhe überm Meeresspiegel aus.
Gast
In meiner Formelsammlung steht:

Höhe = 18,4 km * lg ( luftdruck_erde / gemessener_luftdruck)

lg kann man mit der log() funktion aus der math.h berechnen
Gast
Hast du überhaupt schonmal C programmiert?

So wie du es schreibst geht das nie. Integer sind Ganzzahlen und haben 
mit Kommastellen nichts am Hut. Und wenn du jetzt auf float umstellst 
quällst du den Controller da keine float arithmetik im Controller 
vorhanden ist (es sei denn du nimmst nen pentium :-)).

Solltest du jetzt so clever sein und Festkommaarithmetik nutzten mit 2 
Nachkommastellen so passt das nicht mehr in den integer-Zahlenbereich 
(Annahme AVR - int 16bit). Ebenso solltest du unbedingt prüfen ob es 
nicht einen Overflow beim Multiplizieren gibt.

JL
OP
So???
1
void berechne_hoehe(double press)
2
unsigned double luftdruck_erde,hoehe
3
{
4
luftdruck_erde=1013.25;//druck auf dem Meeresspiegel definieren
5
//druck_meter=0.12;//druck pro Meter
6
hoehe = log(luftdruck_erde / gemessener_luftdruck);
7
//hoehe=press * druck_meter;
8
//hoehe=hoehe / meeresspegel;
9

10
return hoehe
11
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.