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 ;)
>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.
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
Hi, Die Höhe eines Luftfahrzeugs wird üblicherweise über den Luftdruck gemessen: http://www.mikrokopter.de/ucwiki/H%C3%B6hensensor Alternativ GPS-Modul http://www.mikrokopter.de/ucwiki/GPS ciao Bernhard
Danke für die Links!!! GPS wollte ich nicht benutzen;klingt aber vielversprechend!!! Wie mache ich das in "C"(die Berechnungen)? ? ?
Hallo, suche nach Barometrischer Höhenformel. Damit kannst Du die Höhe berechnen. Andreas
Hier steht, wie Du die Höhe bestimmen kannst: http://www.rubstudent.de/RSV/Forum/thread.php?threadid=7843
Könnt ihr mir ein Beispiel schreiben??? Ich glaube,ich bin irgendwie zu doof |: Hab hier was(JS): http://www.wetterochs.de/wetter/baro.html Wenn man das von JS in C wandelt könnte man es doch benutzen??? Ich kann JS nich so wirklich (; Rauskommen soll die höhe in Metern.
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...
>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>
Klar können wir Dir helfen und Dir ein kleines Programm schreiben. Mein Auto ist kaputt reparierst Du es im Gegenzug??
Hallo, Wie mache ich das jetzt??? Kann ich den ADC-Wert direkt in den Druck umwandeln???
Steht doch im Datenblatt : Vout = Vs(0,009xP-0,095) Und jetzt noch nach P Umstellen
Hugga Bugga wrote: > Steht doch im Datenblatt : > > Vout = Vs(0,009xP-0,095) > > Und jetzt noch nach P Umstellen ungefähr so:
1 | HEIGHT = PINA2(0.009xP-0.095) |
???
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.
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.
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
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
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 | }
|
Hallo, ich habe meine Elektor bekommen und in dieser ist ein sehr interesanter Beitrag über GPS. ich werde wohl eher zu GPS neigen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.