Luftdruck bzw. Höhe berechnen

OP #986102
Lesenswert?

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 #986111
Lesenswert?

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
OP #986150
Lesenswert?

>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 #987374
Lesenswert?

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
???
#988190
Lesenswert?

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 #988220
Lesenswert?

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 #988706
Lesenswert?

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 #988938
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren