Simpel Vario mit Druckanschluss

  • nichtgedacht
  • nichtgedacht's Avatar Autor
  • Visitor
  • Visitor
  • Dank erhalten: 0

Simpel Vario mit Druckanschluss wurde erstellt von nichtgedacht

Posted 07 Aug. 2018 14:48 #1
HI,

Diese beiden bekannten Libraries wurden verwendet.
sourceforge.net/projects/jetiexsensorcpp..._V1.0.5.zip/download
github.com/jarzebski/Arduino-MS5611/archive/master.zip

An dem Vario gibt es nichts für den User einzustellen. Es wurde bereits der optimale Kompromiss zwischen Rauschunterdrückung und Reaktionszeit eingestellt.
Der Algorithmus basiert auf einem Code von Rolf R Bakke.

Dabei werden zwei digitale Tiefpassfilter 1. Ordnung, die einem simplen RC Glied entsprechen, parallel geschaltet.
Die Differenz der Ausgänge ist proportional der ersten Ableitung des Eingangssignals. In diesem Fall der Höhenänderungsgeschwindigkeit.
Die Tiefpasscharakteristik bleibt aber erhalten. D.h. das Signal nähert sich rasch aber in endlicher Zeit einer horizontalen Linie, wenn das
Eingangssignal (die Höhe) linear ansteigt. Die schnell erreichte Signalgröße (Vario) ist dabei stets proportional zur Steilheit eines linearen Anstiegs
des Eingangssignals. Die Verstärkung resp. Abschwächung des Nutzsignals ist abhängig von den eingestellten Zeitkonstanten und ihrem Verhältnis.
Ich habe den Algorithmus als Analogschaltung in LTSpice simuliert.
Code:
//#define DEBUG #include <Wire.h> #include <MS5611.h> // from https://github.com/jarzebski/Arduino-MS5611/archive/master.zip #ifndef DEBUG #include "JetiExProtocol.h" // from https://sourceforge.net/projects/jetiexsensorcpplib/files/JetiExSensor_V1.0.5.zip/download JetiExProtocol jetiEx; #endif MS5611 ms5611; enum { ID_CLIMB = 1, ID_ALTITUDE, }; #ifndef DEBUG JETISENSOR_CONST sensors[] PROGMEM = { // id name unit data type precision 0->0, 1->0.0, 2->0.00 { ID_CLIMB, "Climb", "m/s", JetiSensor::TYPE_14b, 2 }, { ID_ALTITUDE, "Altitude", "m", JetiSensor::TYPE_14b, 0 }, 0 // end of array }; #endif double referencePressure; float r_altitudes[50]; float r_altitude = 0, r_altitude0 = 0; int j; float climb = 0; unsigned long time=0; void setup() { #ifdef DEBUG Serial.begin(9600); //Serial.println("Initialize MS5611 Sensor"); #endif // Initialize MS5611 sensor while(!ms5611.begin(MS5611_ULTRA_HIGH_RES)) { #ifdef DEBUG Serial.println("Could not find a valid MS5611 sensor, check wiring!"); #endif delay(500); } // Get reference pressure for relative altitude referencePressure = 0; for ( j=0; j<50; j++) { referencePressure += ms5611.readPressure(); delay(20); } referencePressure = referencePressure / 50; // Check settings //checkSettings(); #ifndef DEBUG jetiEx.Start( "mini_vario", sensors ); #endif } void checkSettings() { #ifdef DEBUG Serial.print("Oversampling: "); Serial.println(ms5611.getOversampling()); #endif } void loop() { long realPressure = ms5611.readPressure(); float relativeAltitude = ms5611.getAltitude(realPressure, referencePressure); r_altitude0 = r_altitude0 - 0.15 * (r_altitude0 - relativeAltitude); r_altitude = r_altitude - 0.05 * (r_altitude - relativeAltitude); climb = (r_altitude0 - r_altitude) * 3; #ifdef DEBUG Serial.print( r_altitude0); Serial.print( "\t" ); Serial.println(climb); #else jetiEx.SetSensorValue( ID_CLIMB, round(climb * 100) ); jetiEx.SetSensorValue( ID_ALTITUDE, round(r_altitude0) ); jetiEx.DoJetiSend(); #endif // loop frequency timer while (millis() < time) { //Serial.print("H"); // check going arround at given "time" } //Serial.println(time); time += 40; }

Da der Mini Pro nur eine serielle Schnittstelle hat muss man das Programm für die Ausgabe auf der Konsole (Plotter oder Monitor)
mit einkommentiertem "#define DEBUG" laufen lassen. Zum Betrieb am Empfänger dann diese Zeile wieder auskommentieren.



Die beiden Platinen müssen ein gasdichtes Volumen umschließen. Man kann zum Testen das Röhrchen am Ende zulöten.
Dann darf keine Höhenänderung mehr angezeigt werden.

Das Vario wiegt ohne Kabel 4,8 g

Gruß
Dieter
von nichtgedacht

Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • walterh
  • walterh's Avatar Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 61
  • Dank erhalten: 4

walterh antwortete auf Simpel Vario mit Druckanschluss

Posted 08 Aug. 2018 09:36 #2
Ist ja sehr schön kompakt geworden.
Hast Du irgendwo mehr Details gepostet?
Grüße
Walter
Grüße Walter
von walterh

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • nichtgedacht
  • nichtgedacht's Avatar Autor
  • Visitor
  • Visitor
  • Dank erhalten: 0

nichtgedacht antwortete auf Simpel Vario mit Druckanschluss

Posted 08 Aug. 2018 14:05 #3
Hallo Walter,

was willst Du denn noch wissen?

Was noch zu sagen wäre:

Der Arduino Mini Pro ist ein 3,3V Type.
Mit 2S LiPo Betriebsspannung könnte man stattdessen einen Mini Pro mit 5V verwenden.
Die Sensorplatine hat Levelshifter und kann mit 3,3V - 5V betrieben werden.
Dann könnte man, mit dann doppeltem Prozessortakt, die Abtastfrequenz verdoppeln. Das
Signal würde noch etwas glatter.

Die Verbindungen zwischen den Platinen wurde mit durchlötbarem Kupferlackdraht gemacht,
bis auf Vcc. Hier liegen sich die Vias genau gegenüber und man kann einen Stift von einem
Pfostenstecker nehmen. Vor dem Zusammensetzen müssen alle kleinen Vias auf der
Mini Pro Platine mit Epoxy gasdicht gemacht werden. Die am Ende unsichtbare LED auf
der Sensorplatine sollte vorher entfernt werden. Zum Schluss müssen die kleinen Vias
auf der Sensorplatine gedichtet werden. Das Röhrchen hat 2 mm Außendurchmesser und
wurde mit einem kurzen Stück 3mm Rohr am Loch adaptiert. Als Schlauch kommt ein
1mm x 1mm Silikonschlauch (1mm Innen 1mm Wandstärke) zur Verwendung. Das reicht
für eine TEK-Düse, weil die Druckunterschiede zum Statikdruck winzig sind.

Die Verbindungen sind

SDA
A4
SCL
A5
GND
GND
Vcc
Vcc

Der Empfänger (EXT) wird an TX, Raw, und GND angeschlossen.

Zum Programmieren braucht man den üblichen Seriell- zu USB-Adapter mit FTDI Chip drauf.
Dieser lässt sich auf 3,3V oder 5V jumpern.

Gruß
Dieter
.
von nichtgedacht

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • walterh
  • walterh's Avatar Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 61
  • Dank erhalten: 4

walterh antwortete auf Simpel Vario mit Druckanschluss

Posted 08 Aug. 2018 17:41 #4

nichtgedacht wrote: ....
Mit 2S LiPo Betriebsspannung könnte man stattdessen einen Mini Pro mit 5V verwenden.
Die Sensorplatine hat Levelshifter und kann mit 3,3V - 5V betrieben werden.
Dann könnte man, mit dann doppeltem Prozessortakt, die Abtastfrequenz verdoppeln. Das
Signal würde noch etwas glatter.
...
.


Mit welcher Frequenz misst Du den Druck? 25 Hz?
Würde dann eine schnellere Frequenz das Signal glatter machen?
Woher kommt Dein Noise?
Bringt bei nicht stark verwirbelter Luft eine Messung mit über 10 Hz eine Verbesserung?

Diese Flugsaison werde ich selber nichts bauen aber vielleicht im Winter. B)
Grüße Walter
von walterh

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • FuniCapi
  • FuniCapi's Avatar Offline
  • Platinum Mitglied
  • Platinum Mitglied
  • Beiträge: 1714
  • Dank erhalten: 836

FuniCapi antwortete auf Simpel Vario mit Druckanschluss

Posted 08 Aug. 2018 18:34 #5
Ich mach bei meinen Eigenbauvarios alle 13ms eine Messung, also ca. 77Hz. Schneller geht nicht mit dem MS5611 wenn man Druck und Temperatur messen will.
Das funktioniert aber nicht mit der MS5611 Library. Da muss mann selber rann, siehe auch hier: Esens - All in one Sensor für Elektrosegler

Ohne Filterung oder Curve Fitting schwankt die Druckmessung zu sehr für ein vernüftiges Vario.
Ich mache Curve Fitting über 100 Samples. Das ist ein guter Kompromiss zwischen Reaktiongeschwindigkeit und Genauigkeit.

Gruss Lukas
Last Edit:08 Aug. 2018 18:36 von FuniCapi
Letzte Änderung: 08 Aug. 2018 18:36 von FuniCapi.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • nichtgedacht
  • nichtgedacht's Avatar Autor
  • Visitor
  • Visitor
  • Dank erhalten: 0

nichtgedacht antwortete auf Simpel Vario mit Druckanschluss

Posted 08 Aug. 2018 22:37 #6
Hallo Lukas,

ich verstehe in Deinem Algorithmus die Rechnerei an einigen Stellen nicht.

float x = -0.5 * (SAMPLES_ALTITUDE - 1) ist ja konstant, resp kann mit der Anzahl der Samples initial berechnet werden.
Dann wird die Summe über 1 bis n von x * x in sxx aufaddiert. Am Ende ist also auch sxx konstant.
Ich kapier' es nicht.

Gruß
Dieter
von nichtgedacht

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 1.037 Sekunden