Simpel Vario mit Druckanschluss
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
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.
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
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
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- walterh
- Offline
- Senior Mitglied
- Beiträge: 61
- Dank erhalten: 4
Ist ja sehr schön kompakt geworden.
Hast Du irgendwo mehr Details gepostet?
Grüße
Walter
Hast Du irgendwo mehr Details gepostet?
Grüße
Walter
Grüße Walter
von walterh
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
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
.
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
- Offline
- Senior Mitglied
- Beiträge: 61
- Dank erhalten: 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.
Grüße Walter
von walterh
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FuniCapi
- Offline
- Platinum Mitglied
- Beiträge: 1714
- Dank erhalten: 836
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
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
- Autor
- Visitor
- Dank erhalten: 0
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
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: 0.998 Sekunden