Graupner HoTT Telemetrie-Sensoren Eigenbau DIY | Telemetrie-Protokoll entschlüsselt

Danke! das sind sehr gute Tipps gewesen. Ihr habt einen Fehler korrigiert.

Danke! das sind sehr gute Tipps gewesen. Ihr habt einen Fehler korrigiert.

Hallo Gecko und Jochen,

So wie es ausschaut läuft der PIC und der CC2500 im Empfänger mit 3V oder 3,3V
[...]
Mein Vorschlag wäre ein Arduiono Board mit 3,3V Regler zu verwenden, dann kann auch der Baro Sensor ohne Probleme betrieben werden und die RX/TX Pegel passen.
[...]
Als Baro Sensoren könnten noch die MS55xx, MS56xx mit teilweise 24Bit Wandler interessant sein (Sander-elektronik um 15€)



Ihr habt Recht:

der Empfänger erwartet tatsächlich einen Logicpegel von +3 Volt.
Habe eben nachgemessen: es waren 2.95 Volt beim Request:rolleyes:
Seit einer Woche scheinen allerdings die +5 Volt des Freeduino Twentyten
bzw. Arduino mini pro mit je 16 Mhz (5 Volt-Version) gut zu funktionieren :D
Ob das Zufall ist - oder, ob der GR-16 +5 Volt verträgt (was ich glaube),
sei dahin gestellt. Auf jeden Fall war das von mir nicht ok.

Hatte beim Freeduino zuerst nicht drüber nachgedacht und habe den
5+ Arduino mini nur gewählt, damit es möglichst wenig Unterschiede zwischen
der Entwicklungsplattform und dem Prototypen gibt....

Das muss sich jetzt natürlich schleunigst ändern.
Also neue Arduino-Mini's bestellen:p

Stichwort Sensoren:
Als Sensoren für ein erstklassiges (!) Vario scheint das MS5607
sehr gut geeignet zu sein. Ohne einfaches Breakout-Board kann man jedoch
keine Empfehlung zum Nachbau/Eigenbau geben... Mit 5 Volt hätte ich MPL115A1 gewählt...
Einen SCP1000 habe ich letzten Sommer auf der Chronos-Uhr von Texas-Instruments
erlebt, als ich (vergeblich) versucht hatte, die Uhr in ein empfindliches Vario zu verwandeln.
Es gab einfach zu viel Rauschen... Und nach Filtern bzw. Glättung der Werte war's zu träge für mein Empfinden....

Es stellt sich sowieso die Frage, wie sich <10 cm Höhendifferenzen in einem Digitalvario
sinnvoll nutzen lassen. Die MX-16 bietet verschiedene, gut unterscheidbare Steig- und Sinktöne an. Glücklicherweise wird aber nicht jeder 10 cm Hupfer übertragen, sonst
wäre das zu viel Gepiepse, finde ich... Ich vermute, dass 24 Bit-Druckwandler erst
dann sinnvoll sind, wenn auch die Ausgabeseite am Boden entsprechend differenziert ist.
(Analogvario...) Natürlich könnte man auch einfach verschiedene Empfindlichkeitsstufen realisieren. Über einen Steuerkanal im Flug einstellbar (Ch 6, 7, 8...) Das würde grundsätzlich gehen, aber alleine die Dokumentation, damit das nutzbar wird, stelle ich mir problematisch vor. In den Foren liest man immer wieder, wie überfordert Fliegerkollegen von
der Technik sind;

HoTT ist genial einfach und funktional. Ich finde man sollte diesen Vorteil nicht durch kryptische Eigenentwicklungen zunichte machen, obwohl mich das reizen würde :)


Vielleicht ist der BMP085 wirklich die bessere Wahl. Er ist zwar vergleichsweise wenig hoch-auflösend, aber dafür leicht verfügbar, billig und es gibt viele nutzbare Quellen / Code-Beispiele.... Außerdem passt die Empfindlichkeit besser zur Praxis


Werde also bei Lipoly.de zwei 3-Volt-Boards als Testumgebung ordern
und eine Platine mit BMP085 von Sparkfun.

Der Sensor wird dann die Maße von 29 x 18 x 6 mm erreichen und
mit Höhenmesser und allen Kabeln vermutlich auf 11 Gramm kommen.


Weil die Sachen nicht sofort lieferbar sind, müssen wir uns in Geduld üben
und in der Zwischenzeit stattdessen mehr praktisch fliegen :cool:
 
Hallo Stefan,

ich hab mal Deine Software auf einen Arduino hier geladen und den korrekten Multiplikator für den von Dir gebauten Spannungsteiler errechnet:

Code:
float hauptspannung = spannungMessen() * 0.0205;

Jetzt stimmt die angezeigte Akkuspannung korrekt. Ich würde aber die interne Referenz
benutzen, die Dich unabhängig von der Spannungsversorgung macht. Die wird mit der Funktion

Code:
void Setup()
.....
analogReference(INTERNAL);

eingeschaltet.Allerdings ist dann mal wieder ein Widerstandskauf fällig, denn der Spannungsteiler muss jetzt auf die 1,1V der internen Referenz angepasst werden.

Den 18K kannst Du belassen und besorgst Dir noch einen 1K, den Du für den 5k6 einbaust.
Dann ist die maximal zu messende Spannung 20,9V und mit

Code:
float hauptspannung = spannungMessen() * 0.0204;

zeigt der Controller korrekte Messwerte an.

Grüße, steve
 

Gast_7088

User gesperrt
wenn

wenn

man Hard und Software in der Hand hat, wäre es doch eine Primaidee die Teiler so zu dimensionieren, dass die Faktoren nicht ganz so krum sind. Ad 1
Ad2 super das der Datentyp float erfunden wurde, schneller und nicht wenige präzise gehts aber mit einem Int.
Und sooo genau muss das ja auch nicht sein, da die Widerlinge ja auch so ihre Toleranzen und Abweichung über Wärme mitbringen..

mal so kleine tipps die das projekt vielleicht einfacher machen ---

ansonsten weiter so :)
 
man Hard und Software in der Hand hat, wäre es doch eine Primaidee die Teiler so zu dimensionieren, dass die Faktoren nicht ganz so krum sind. Ad 1
Ad2 super das der Datentyp float erfunden wurde, schneller und nicht wenige präzise gehts aber mit einem Int.
Und sooo genau muss das ja auch nicht sein, da die Widerlinge ja auch so ihre Toleranzen und Abweichung über Wärme mitbringen..

mal so kleine tipps die das projekt vielleicht einfacher machen ---

ansonsten weiter so :)

Hallo,

die verwendeten Metallfilmwiderstände haben typischerweise einen positiven TK (meist um 50) und driften demnach beide in die gleiche Richtung. Somit bleibt der Spannungsteiler weitgehend gleich. Auf jeden Fall kann diese Drift vom Arduino nicht aufgelöst werden. Mit der Dimensionierung des Spannungsteilers hast Du natürlich recht, der könnte anders gewählt werden. Aber Stefan hat wohl nichts anderes bekommen.

Wie könnte die Umrechnung mit Integer Werten schneller und einfacher aussehen? Schreib doch mal ein Beispiel. Denn Zeit und Speicherplatz für Variablen zu sparen ist immer bei den kleinen Microcontrollern immer von Vorteil. Es sollte halt so präzise wie möglich sein.

Grüße, steve

@Stefan: Ich könnte Dir einen BMP085 zukommen lassen...
 

Gast_7088

User gesperrt
der kleine

der kleine

ansatz
es hat ja keiner gesagt das der Wert von z.b. 3,769 V auch so verarbeitet wird.

eine Alternative 3769 als Wert verarbeiten.

Da aber offensichtlich relativ gemessen werden soll, ist der konkrete Spannungswert von untergeordneter Bedeutung. so das man die Spannung auch in % ( 10000 = 100.00%) der Referenzspannung angeben kann.

Wenn nur diese Werte "nach draussen" gehen, muss ich nur einmal wandeln.
dann kanns auch mal krum werden.

gerne wird auch bei Berechnung nicht auf gepasst hinsichtlich der Quantisierung

z.B.
u8 messwert_u8;
u8 rohwert_u8;

der rohwert möge im normalfall einen erwartungswert von 0x05 bis 0x1C haben
( damit kann man auch schon mal feststellen, ob man eine Überspannung hat oder eine offen Leitung)

messwert_u8 = rohwert_u8 /100* 64 /*beliebiger scalierungs faktor*/
messwert_u8 = rohwert_u8 * 64 /100 /*beliebiger scalierungs faktor*/
messwert_u8 =(u8)((u16)( rohwert_u8 * 64/100)) /*beliebiger scalierungs faktor*/


die obrigen zeile scheinen alle den gleichen wert liefern, möge jeder mal überlegen was im wertebereich so passiert.....


ein zweiter Tipp
wenn man * 64/100 durch einen begriff (define) erstetzt

#define SCALIERUNG_AD1 64/100

messwert_u8 =(u8)((u16)( rohwert_u8 * SCALIERUNG_AD1))

dann wird das ganze gut wartbar und auch noch in einem halbe jahr ist es verständlich lesbar.

Ich kann euch versichern das man sich ziemlich schnell Ärgert wenn man an gefühlten 30 Stellen solche Konstrukte pflegen muss.
ich möchte auch mehr generische Tipps geben und zum nachdenken anregen.... ich sehe so viel spannedes jeden Tag an Software -----
 
Zuletzt bearbeitet:
vielen Dank für die freundlichen Verbesserungschläge

vielen Dank für die freundlichen Verbesserungschläge

ansatz
ein zweiter Tipp
wenn man * 64/100 durch einen begriff (define) erstetzt
#define SCALIERUNG_AD1 64/100
messwert_u8 =(u8)((u16)( rohwert_u8 * SCALIERUNG_AD1))
dann wird das ganze gut wartbar und auch noch in einem halbe jahr ist es verständlich lesbar.

Ich hatte genau solche Aspekte wie z.B. leicht-lesbaren Code im Hinterkopf.
Daher besteht >50% des Codes aus Kommentaren :) Was sprechende Aliases,
Präprozessordirektiven und Konstanten betrifft stimme ich Dir voll zu!

Das Programminterface habe ich recht konsequent aus Nutzersicht entwickelt
(Definition Nutzer = "Hobby-Weiterentwickler des Codes, der mittels Arduino
ein paar Sensorenwerte auf einer Graupneranlage anzeigen lassen möchte")

Wo ich aber widersprechen möchte, ist die vermeintliche Vereinfachung durch int-Werte.
Beim Modellieren habe ich didaktisch an den Nutzer gedacht. Es gehört beim
Entwickeln von klarem Code zum guten Stil, möglichst nah am beabsichtigen Zweck zu bleiben.
Und eine Methode, die den Zweck hat, eine dezimalen Fließkommawert
anzuzeigen, sollte auch einen solchen übergeben bekommen.Objektorientiert hatte
ich mir ein Messageobjekt vorgestellt, das mit Setter-Methoden zunächst gefüllt und dann versendet wird.

Natürlich könnte man dies alles mit vorzeichenlosen 8-Bit-Ganzzahlwerten
lösen. Dann könnte man aber auch gleich die umgerechneten Messwerte in
die entsprechenden Bytes des Arrays schreiben. Nur dann hat man
natürlich kein sauberes und leicht verständliches Interface...

Bei zeitkritischen Applikationen würde man anders vorgehen.
Aber hier ist der gesamte Code derart klein und schnell, dass ein oder zwei
Typecasts zwischen relativ elementaren Datentypen nur einen winzigen
Unterschied ausmachen. Wir sprechen über das "Füllen" eines 32 Byte
großen Arrays durch einen modernen 8 bzw. 16 Mhz Microcomputer,
der im Grunde sogar leistungsfähig genug wäre, das ganze Flugzeug
alleine zu fliegen;)

---------------------------------------------

Ansonsten warte ich noch auf Hardware:rolleyes:
Habe zwei neue Arduino pro mini Boards mit einem Logikpegel von 3.3 Volt
und 8 Mhz bestellt und einen BMP085-Senosor auf einer kleinen Platine.
Kommt wahrscheinlich am Frag
Hoffe, dass ich am Wochenende eine erste Vario-Version testen kann :D
 
Danke! sehr gute Anregung!

Danke! sehr gute Anregung!

messwert_u8 = rohwert_u8 /100* 64 /*beliebiger scalierungs faktor*/
messwert_u8 = rohwert_u8 * 64 /100 /*beliebiger scalierungs faktor*/
messwert_u8 =(u8)((u16)( rohwert_u8 * 64/100)) /*beliebiger scalierungs faktor*/[/I]


Ja, sind gute Beispiele!
Daher plädiere ich - genauso wie Du dar, die Dinge klar zu formulieren

Also nicht
messwert_u8 =(u8)((u16)( rohwert_u8 * 64/100))

sondern z.B.


uint16_t messwert = readAnalog(PIN2);
float angezeigterWert = (float) messwert;
float konstante = 64/100;
angezeigterWert = angezeigterWert * konstante;

verschachtelte Klammern und impliziten Typenumwandlungen sind für Laien (wie mich)
einfach zu gefährlich. Da hat man möglicherweise fehlerhaft gerundete oder
abgeschnittene Werte...

Dein Beispiel zeigt sehr schön, dass Bugs im Detail lauern könnten!
 

Gast_7088

User gesperrt
auflösung

auflösung

Ja, sind gute Beispiele!
Daher plädiere ich - genauso wie Du dar, die Dinge klar zu formulieren

Also nicht
messwert_u8 =(u8)((u16)( rohwert_u8 * 64/100))
....................
Dein Beispiel zeigt sehr schön, dass Bugs im Detail lauern könnten!

messwert_u8 =(u8)((u16)( rohwert_u8 * SCALIERUNG_AD1))
das ist klar formuliert ...
und es ging im Kern drum floatigpoint Berechnungen zu lassen..

ok für die die es ineressiert die Auflösung:
(u16)( rohwert_u8 * SCALIERUNG_AD1)
die Berechnung wird als u16
als erstes aus gefüht . der cast auf u16 verhindert den Übelauf .

hat aber auch den Vorteil das diese Operation in Registern abläuft und man keinen
Platz von 2* 2Byte ( u16 sind 2 Byte) als ram verschleudert.
ein float benötigt zum Speichern sogar 4 Byte

messwert_u8 =(u8)((u16)( rohwert_u8 * SCALIERUNG_AD1))

castet wieder "runter " da für die übertragung ein 8 bit wert ( 1Byte)

also wenn man es langsam und strukturiert angeht also ganz einfach. :D

die Type cast benötigen kaum Laufzeit
und die Zuweisungearie wird von guten Compilern e weg rationalisert.

Es gibt bei der beurteilung von u.a. ein Kriterium das "lines of Code" heisst
und das sollte je modul je nach Geschmack des SW Q lers nicht zu gross werden.

Grundsätzlich sollte man kleine Funktion bauen die genau eine Aufgabe umsetzen
diese lassen sich dann wenn sie geschickt geschreiben sind auch immer wieder
verwenden ... und wir wollen ja voran komme und nicht immer änliches zeugs nochmal schreiben...

wenn man sich über legt wie man denn ein Codier problem löst stellt euch vor was ihr mach würdet
wenn ihr der Controller seit.
schreibt es auf
legt es weg
und macht das gleich noch mal einige tage später
und vergleicht die lösungen...
und dann macht das beste draus...

aber die teile sehen ganz nett aus, der Preis ist auch ok ich glaube mir juken die finger
ich bevorzuge zwar den PIC ( u.a. wegen des einfachen befehls satzes und den guten EMV Eigenschaften)
aber der Arduino reitzt schon.... nett klein scalierbar ( allein dafür ist es schon schlau code portierbar zuhalten heisst einfach)
 
Zuletzt bearbeitet:

GC

User
Hallo,

mit Begeisterung habe ich bei Eurer Entwicklungsarbeit mitgelesen.

Jetzt regt sich in mir aber der Wunsch in Besitz solcher Sensoren zu bekommen, da meine MX-20 demnächst bei mir eintrefen wird.

Flying Doctor schreibst Du evtl noch einen Artikel, wie man so ein Teil selber basteln könnte? Das würde bestimmt viele begeistern! Im Voraus schon mal Danke. Wink mit dem Zaunpfahl. ;)
 
Mini Tecodino Version 0204 mit Spannungssensor, Alarm, Höhenmesser + Vario ist da!

Mini Tecodino Version 0204 mit Spannungssensor, Alarm, Höhenmesser + Vario ist da!

Liebe Freunde und Mitleser,

Meilenstein 2 ist fertig!
Alle beabsichtigen Funktionen sind implementiert
und funktionieren merkwürdig gut:p

vor über einer Woche habe ich in einer Nacht-und-Nebelaktion
das bekannte Tecodino-Setup um einen preiswerten Drucksensor erweitert.
Es gibt bessere und auch billigere, aber der Baustein BMP085 ist inzwischen
so weit verbreitet, dass man ihn recht leicht und preiswert bekommen kann:)

Die Software wurde komplett überarbeitet/refaktoriert und ist nun
weitestgehend objektorientiert. Hauptgrund war, dass ich einfach die
Standardsoftware-Klasse des Drucksensors verwenden wollte, ohne
copyrightwidrig aus anderer Open-Source-Software zu kopieren.
Statt dessen werden die relevanten Dinge nun geerbt...:D
Das ganze steht unter der GLPL-Lizenz und ist somit auch
professionell verwendbar; falls jemand mag...

Es gibt nun eine Hauptklasse, eine Klasse Vario
und eine Klasse Spannungssensor. Einfach und wirklich leicht zu pflegen!
Zur Benutzung die Dateien nur einen Ordner entpacken und mit der
Arduino-Software compilieren (http://www.arduino.cc/en/Main/Software).
Das kann jeder schaffen, der auch einen Original-Sensor updaten kann;)


Hier die Firmware zur freien Benutzung (GLPL)
https://docs.google.com/leaf?id=0B_IGDYyvKzvmYzg3NDkyNzctYWU2Mi00OTgzLWEwY2MtOTRkMjc5YTMzNjMx&hl=de

Der ganze "Tecodino" war für mich (Löt-Laie!!) in einer halben Stunde fertig!
Es sind ja nur Lötpunkte in einer gebohrten Platine, also wirklich schaffbar.
Der BMP085 wird mit 4 Kabeln am Tecodino angelötet. Der Spannungssensor
besteht in der Minimalvariante aus 2 Kabeln, 2 Widerständen und etwas Schrumpfschlauch.
alles komplett sind das 10-12 Löstellen:) Allerdings habe ich meinen alten Lötkolben
gegen einen etwas feineren für 13 € von Conrad ersetzt.

In den nächsten Tagen mache ich vielleicht eine Schritt-für-Schritt-Anleitung.
Es ist aber bereits jetzt alles sichtbar und dokumentiert, so das Ihr hoffentlich
die ersten Versionen testen könnt.

Mir hat das Projekt bisher viel Spaß gemacht.
Ich habe einiges gelernt. Und auch gelernt, dass die Graupner-Sensoren
richtig gut und vergleichsweise billig sind.

Der ganze Sensor mit Vario kostet im Eigenbau ca. 30 Euro.
Ich würde euch daher raten, für normale Flieger einen Original-Sensor zu nehmen
und nur für kleine Modelle selbst einen Tecodino zu bauen. Für etwas mehr Geld
bekommt man von Graupner einfach das bessere Modul!
Falls man nur einen reinen Spannungssensor will, ist die Entscheidung
natürlich einfacher. Die 12 € im Eigenbau lassen sich kaum unterbieten.

Schreibt mal eure Erfahrungen!

so sieht das Teil jetzt aus. Ist übrigens die 3.3 Volt-Version
mit 8 Mhz. Das reicht voll und ganz aus!
tecodino-0204-hinten.jpg

Hier kann man die beiden kleinen Platinen getrennt sehen.
tecodino-0204-ohne-schrumpfschlauch.jpg

Und hier nochmal von der Seite. Insgesamt 8.0 Gramm mit Kabeln.
tecodino-0204-seite.jpg
 
wow

wow

Hallo Stefan,
das sieht richtig stark aus ... Chapeau.
Sobald die step by step Info da ist, werde ich das probieren. Bin schon richtig gespannt. Erfahrung poste ich dann.

Gruß
Apollo
 

dl3ed

User
Beschaffung und Infos

Beschaffung und Infos

hallo Ihr bastelnde Gemeinde.
Ich bin auch Atmel Begeisterter (habe bis jetzt mit BASCOM rumgemacht) und würde gerne mitbauen. Die SW habe ich mir schon runter geladen. Wo habt Ihr den Atmel pro mini und den Drucksensor bezogen? Detaillierte Informationen von dem Protokoll interessieren mich auch noch. Wer kann mir Diese Informationen zukommen lassen unter dl3ed@web.de
Danke im Vorraus Ulrich DL3ED
 

Gast_7088

User gesperrt
das ist nix geheimes

das ist nix geheimes

also entweder wie im Thread beschrieben oder einfach bei lipoly.de

also den ganzen Sermon lesen ......
;)
 
Höfliche Anfrage nach einem Bausatz...

Höfliche Anfrage nach einem Bausatz...

Hallo zusammen,

das Löten traue ich mir schon zu, anders sieht es aber mit dem Programmieren aus.

Gibt es eine Planung für einen fertigen Bausatz ?
Ich finde die Preise der Graupner-Sensoren absolut legitim, gerade wenn man den Aufwand sieht, aber auch ich habe in einem Merlin das Platzproblem mit einem Stromsensor und bin auch an dem Vario dafür sehr interessiert.

Vielleicht könnte der Threadersteller mal eine grobe Kalkulation vorstellen, in dem auch sein aufwand berechtigt berücksichtigt wird, vielleicht findet sich dann ja eine Menge an Vorbestellern ?

Danke für eine Info...
 
Stromversorgung

Stromversorgung

to flying-doctor
Wie hast Du Stromversorgung organisiert?
So wie ich sehe, hast Du SV von Empfänger genommen, es ist 5V.
Dein Arduino ist 3,3V.
Ist es nicht sinnvoll für SV RAW Anschluss zu benutzen?

Für die die Vario selber löten wollen:
bei Lipoli.de gibt es BMP085 Baustein und fertige BMP085 Platine.
Wenn man nur BMP085-Baustein kauft und selber dazu 2 Widerstände lötet, spart 9€.

MfG
Evgenij
 
paar korrekturen

paar korrekturen

Ich habe jetzt provisorisch Voltsens. zusammengebaut.
Zwei Bemerkungen die ich im Text nicht gefunden habe:
1.auf dem Bild unter #32 ist Anschluss A3 angeschlossen richtig ist A0
2.Nicht Vergessen im Menü-Telemetri-Sensor "General Modul" wählen.

Sonst funktioniert.;)
 
Ansicht hell / dunkel umschalten
Oben Unten