Forum: Mikrocontroller und Digitale Elektronik suche Programmierstrategie für MS5611


von Chr. M. (snowfly)


Lesenswert?

Hallo Forum,

vielleicht könnt ihr mir ein wenig helfen,
ich versuche gerade ein Variometer zu Programmieren.
Bestehend aus Arduino Mini Pro, MS5611 und Piepser.

Meine bisherige Strategie sieht so aus:
-Daten auslesen
-Höhe berechnen
-in ein 32 Felder grosses Array schreiben
(ist in ca. 350ms voll und wird ständig gemacht)

um jetzt die Höhenänderung zu berechnen
schreibe ich den Mittelwert des Arrays in eine Hilfsvariable
und alle 200ms lass ich die Differenz zwischen Hilfsvariable
und aktuellen Mittelwert des Arrays errechnen.
Mit 5 Multipliziert sollte das dann das Steigen/s ergeben.

Aber das Ergebnis überzeugt mich nicht so ganz in bezug
auf empfindlichkeit und genauigkeit.

Habt ihr Vorschläge für eine andere Strategie?

von Chr. M. (snowfly)


Lesenswert?

Hat keiner einen Vorschlag für mich?

Oder ist meine Frage so unverständlich gestellt?

von Ingo S. (ingo-s)


Lesenswert?

Hi,
wahrscheinlich beschäftigen sich zu wenige mit dem Thema.
cyblord hat doch hier im Wettbewerb auch eine Lösung eingestellt.

Ich setze den MS5611 auch als Vario (M-Link Sensor) ein.
Die Pa Rohwerte (alle 10ms) gehen nach Tiefpass Filterung in einen 
Ringbuffer (2s Füllzeit).
Im Abstand der eingestellten Integrationszeit greife ich im Prinzip aus 
diesem die Druckdifferenz heraus und berechne das Steigen. Im Prinzip, 
da ich verschoben mehrere Werte für eine Filterung benutze.

Gruß Ingo

von hans (Gast)


Lesenswert?

Wie sieht das Ergebnis aus? Wie stark ist das Rauschen? Oder sind 
zusätzlich Rechenfehler enthalten? Wichtig sind: stabile 
Versorgungsspannung, Abschirmung von Licht, Abschirmung von den 
digitalen Einstreuungen des Prozessors (bypass + decoupling z.B. 
Ferritperlen...), gutes Layout, etc. Eine Filterung/Mittelwertbildung 
für Variometer sollte eher bei 1,5 ....2,5 s liegen. Dann könnte ein 
Rauschen des Signals von weniger als 1 Pa  (8cm Höhenunterschied) 
erreichbar sein.
Beim Testaufbau und Messungen auf Druckschwankungen durch Wind achten!

von Chr. M. (snowfly)


Lesenswert?

@hans
inzwischen habe ich meinen stümperhaften Code verworfen weil ich im Netz
einen viiiieeeel besseren gefunden habe:
http://www.rcgroups.com/forums/showthread.php?t=1749208

Kernstück des Filters sieht so aus:
1
pressure = getPressure();
2
  
3
  lowpassFast = lowpassFast + (pressure - lowpassFast) * 0.1;
4
  lowpassSlow = lowpassSlow + (pressure - lowpassSlow) * 0.05;
5
  
6
  toneFreq = (lowpassSlow - lowpassFast) * toneFreqMultiplier;
7
  
8
  toneFreqLowpass = toneFreqLowpass + (toneFreq - toneFreqLowpass) * 0.1;

Meine Schaltung besteht einfach aus einem Arduino mini pro und einem 
MS5611 Breakoutboard, die sind beide schön klein.
Dazu noch einen Piezo und ein LiIo Akku in AA Grösse.
(Piezo kann ich übrigen den empfehlen: http://dx.com/p/141433)

Das Rauschenverhalten ist sehr gut ohne weitere Massnahmen, ausser den 
Sensor mit einem Stück luftdurchlässigen Schaumstoff abzudecken habe ich 
nichts von deinen Tips beherzigt ;)
(hier noch ein Video das die Empfindlichkeit demonstriert[nicht von 
mir]http://www.youtube.com/watch?feature=player_embedded&v=A9bBafIC9sA)

Erste "hochwerf und Aufzug" Tests sahen sehr gut aus,
zum Testfliegen hatte ich leider noch keine Gelegenheit :(

Der nächste Schritt wäre dann der Versuch das mit Solarzellen und 
Goldcaps zu betreiben und in meinen Helm einzubauen :)

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
Noch kein Account? Hier anmelden.