Einfache Jeti EX Telemetrie-Library für Arduino Mini Pro 328

Sepp62

User
Ich habe, basierend auf einem Open-Source-Projekt von Henning Stöcklein, eine einfach zu verwendende Telemetrie-Library für den Arduino Mini Pro 328 in C++ geschrieben.

Den Code gibt es hier:

https://sourceforge.net/projects/jetiexsensorcpplib/

Die Schnittstelle sollte einfach und selbst erklärend sein.

Das ZIP-File muss als Library über die Entwicklungsumgebung (1.0.6) des Arduino installiert werden. Sie hat keine Abhängigkeiten zu anderen Libraries.

Ich habe mir, basierend auf dieser Library, eine Telemetrie für meine Orbit Turbinen-ECU geschrieben.

Viel Spaß !

Grüße Bernd
 

Sepp62

User
Hier ein Stück Beispiel-Code zur Verwendung:

// max. 6 Sensors, id from 1..15, name plus unit must be < 20 characters, precision = 0 --> 0, precision = 1 --> 0.0, precision = 2 --> 0.00
JETISENSOR_PTR sensors[] =
{
// id name unit data type precision
new JetiSensor( 1, "Voltage", "V", JetiSensor::TYPE_14b, 1 ),
new JetiSensor( 2, "Altitude", "m", JetiSensor::TYPE_14b, 0 ),
new JetiSensor( 3, "Temp", "\xB0\x43", JetiSensor::TYPE_14b, 0 ), // °C
new JetiSensor( 4 , "Climb", "m/s", JetiSensor::TYPE_14b, 2 ),
new JetiSensor( 5 "Fuel", "%", JetiSensor::TYPE_14b, 0 ),
new JetiSensor( 6, "RPM", "/min", JetiSensor::TYPE_14b, 0 ),
0 // end of array
};

void setup()
{
jetiEx.Start( "ECU", sensors );

jetiEx.SetJetiboxText( JetiExProtocol::LINE1, "Start 1" );
jetiEx.SetJetiboxText( JetiExProtocol::LINE2, "Start 2" );

/* add your setup code here */
}

void loop()
{
/* add your main program code here */

jetiEx.SetSensorValue( 1, demoSensor.GetVoltage() );
jetiEx.SetSensorValue( 2, demoSensor.GetAltitude() );
jetiEx.SetSensorValue( 3, demoSensor.GetTemp() );
jetiEx.SetSensorValue( 4, demoSensor.GetClimb() );
jetiEx.SetSensorValue( 5, demoSensor.GetFuel() );
jetiEx.SetSensorValue( 6, demoSensor.GetRpm() );

jetiEx.DoJetiSend();
}
 

Sepp62

User
Es steht eine neue Version 0.9.2 bereit.

Änderungen:

- Unterstützt nun 15 Sensorwerte
- Der Datentyp "22 Bit Integer" ist nun verfügbar
- Baudrate wird nun auch für "Mini Pro 8 MHz" gesetzt

Der Code ist noch nicht gut getestet, daher bleibt die Version 0.9.1 erst Mal stehen.
 

Eckehard

User
Hallo Bernd,

vielen Dank für die Bereitstellung der lib.
Ich hatte schon für eine JetiEX_LiPoÜberwachung für 9/12Zellen einen Aufbau als PoC fertig. Jetzt werde ich einmal Deine Lib versuchen einzubinden.
Ich melde mich mit meinen Erfahrungen hier. Wird wohl etwas dauern, aber vielleicht komme ich noch "zwischen den Jahren" dazu.
Bitte weiterberichten!

Danke und Grüße
Eckehard
 

Sepp62

User
Nun auch für Teensy 3.x

Nun auch für Teensy 3.x

Es gibt nun die Version 0.9.4, die den Teensy 3.x unterstützt.

Damit hat man nun endlich 3 serielle Schnittstellen *** plus *** USB zum Debuggen und Laden des Programms.

Das Jeti-Protokoll liegt auf Serial2, so dass der "wertvolle" FIFO-UART frei bleibt.

Getestet mit REX-Empfängern. Ob sich die alten EX-Empfänger an dem einen fehlenden Stopp-Bit stören, habe ich nicht geprüft.
 

Sepp62

User
Erweiterung - Restliche fehlende Datentypen

Erweiterung - Restliche fehlende Datentypen

Die Version 0.9.5 ist nun online.

Was hat sich geändert:

- Datentyp für GPS Länge/Breite hinzugefügt
- Datentyp für Datum/Zeit hinzugefügt
- Datentyp für 6 Bit und 30 Bit-Werte hinzugefügt
- Leichtes Refactoring

Nach Rückmeldung von wiff (Wolfgang) im Jetiforum funktioniert die Teensy-Variante auch mit den älteren Empfängern.
 

Eckehard

User
Hallo Bernd,

ich sehe gerade daß ich hier "nur" ein Arduino Micro habe....

Unterstützt Deine Lib dieses Board auch?

Grüße
Eckehard
 
Ich wollte das Projekt mal testen...
jedoch schon am Anfang eine Fehlermeldung das die Datei JetiExProtocol.h nicht vorhanden sei.

Wo bekomme ich diese her?


Vielen Dank im Voraus.

Heiko
 

Sepp62

User
Hallo Ekkehard,

Arduino Micro wird leider nicht unterstützt. Die Lib verwendet den in den ATMega328 eingebauten UART.

Viele Grüße
Bernd
 

Sepp62

User
Hallo Heiko,

welche IDE verwendest Du ? Du solltest die originale Arduino IDE Version 1.6 und höher verwenden. Ich nehme an, Du hast die Library korrekt importiert. In Deinem .INO-File musst Du alle .h-Dateien nochmals includieren (also muss dort auch die JetiExProtocol.h erscheinen).

Ich kenne das Problem, wenn ich eine Visual Studio IDE mit Visual Micro-Plugin verwende und habe für diese Umgebung leider noch keine Lösung.

Viele Grüße
Bernd
 

Eckehard

User
Hallo Bernd,

ja, das hatte ich vermutet....

ich habe jetzt mit der alten Lib "JETI_EX_SENSOR" Erfolg gehabt!

Habe jetzt praktsich 12 eiinzelne Spannungen im Display des Senders. Getestet jedoch nur im "Lab", noch nicht unter realen Flug-Bedingungen.

Aber so richtig macht die Übertragung von Einzelspannungen keinen Sinn, es sei dann man möchte unbedingt den Spannungsvelauf der einzelne Zellen im Sender loggen.
Vermutlich macht es mehr Sinn, im Modell auf eine SD Karte zu loggen, und als Telemetriewert nur eine Art Alarm mit Angabe der betroffenen Zellen und den Spannungswert zu übertragen....
Ich glaube, ich muß die Spezifikation "anpassen"....

Grüße und Danke
Eckehard
 

Sepp62

User
Hallo Eckehard,

ich denke auch, dass 12 Werte etwas unübersichtlich sind. Du könntest natürlich die 12 Werte übertragen aber nur loggen und nicht anzeigen. Zusätzlich kannst Du noch den niedrigsten Spannungswert auf einen 13. Telemetriewert legen und ggf. auf einen 14. Wert die Zellennummer, die den niedrigsten Wert liefert. Den Alarm legst Du dann auf den 13. Wert.

Aber darauf bist Du bestimmt schon selbst gekommen.

Viele Grüße
Bernd
 

Eckehard

User
Hallo Bernd,

ok, Danke für s mitgrübeln...
Ich habe am Anfang den Micro gewählt, da dieser 12 Analog Eingänge besitzt, und damit bis zu 12 Zellen eines Lipos gemessen werden können. Eigentlich benötige ich nur 9, das ist (derzeit) mein "größtes LipoPack....

Wenn ich in weiteren Projekten doch Deine Lib verwenden möchte, könnte ich da vielleicht folgende Boards (ATmega328) verwenden ?

1. Das Orginal:
http://www.exp-tech.de/arduino-pro-mini-328-5v-16mhz


2. oder gar:
http://www.exp-tech.de/adafruit-pro-trinket-5v-16mhz

3. oder gar:
http://www.exp-tech.de/adafruit-metro-mini-328-5v-16mhz

4. Oder der hier:
http://www.exp-tech.de/adafruit-feather-32u4-adalogger
scheint auch sehr paktisch zu sein, wenn man im Modell direkt auf SD Kate loggen möchte, oder? Dann aber wegen ATmega32u4 nicht mit Deiner Lib....

Ich bin hier noch nicht so sicher, die Vielfalt der Boards ist ja recht "groß".

Schreib mal was hier Deine Meinung zu den Boards wäre...

Danke schonmal im Voraus!

Eckehard
 

Sepp62

User
Hallo Eckehard,

die Typen mit dem ATMega 328 sollten alle zu verwenden sein. Selbst getestet habe ich aber nur den "Mini". Der 32u4 wird wohl nicht so ohne Weiteres gehen.

Ein wenig mühsam bei den ganzen Arduinos mit ATMega328 ist, dass sie nur eine serielle (Hardware-)Schnittstelle haben. Zum Entwickeln/Testen muss man immer die USB-Schnittstelle abziehen und man kann nicht über "Serial" debuggen (ist leider auch beim "Nano" so).

Deswegen (und wegen des schnellen Prozessors mit massig Speicher) bevorzuge ich inzwischen den "Teensy 3.x" (er hat übrigens 21 analoge Eingänge). Allerdings ist er deutlich teurer (~22€ --> Exp-Tech).

Viel Grüße
Bernd
 

Eckehard

User
Hallo Bernd,

Ein wenig mühsam bei den ganzen Arduinos mit ATMega328 ist, dass sie nur eine serielle (Hardware-)Schnittstelle haben. Zum Entwickeln/Testen muss man immer die USB-Schnittstelle abziehen und man kann nicht über "Serial" debuggen (ist leider auch beim "Nano" so).
Genau wegen der Debugfähigkeit über USB ist der Micro auch "ganz nett", aber in Bezug auf Deine Lib eben der "falsche" Prozessor....

Nun, mit dem "Teensy 3.x", also konkret dem:
http://www.exp-tech.de/mainboards/teensy/teensy-3-2-with-header-pins

....hast Du mir jetzt aber einen "Floh ins Ohr gesetzt".... :-)

Mit einem zusätzlichen Crystal und einer Knopfzelle hat das Ding dann eine RealTimeClock, dann eine MicroSD Karte
http://www.exp-tech.de/shields-module/speicher/teensy-micro-sd-card-adaptor
..... Die Auflösung der ADC s ist auch höher, Anzahl passt auch..... Hm... :-)

Der wirtschaftliche Aspekt ist nicht soooo gravierend, wenn es entsprechend Spaß macht... Später kann man ja auch noch einen SchllitzAugenClone probieren....

Grübel grübel.....


Grüße
Eckehard
 

Sepp62

User
An dem Teensy kannst Du Dich richtig austoben:

Neben den bereits erwähnten Dingen (3 serielle Schnittstellen, 72 Mhz 32-Bit CPU, 2 fach-ADC, DAC, jede Menge Analogeingänge):

- 12 PWM Ausgänge
- Mehr Zähler/Timer als der AtMega
- DMA-Transfer
- UARTs mit FIFO
- USB Host

Die Libraries und der Support von Paul Stoffregen machen ebenfalls Spaß.

Lediglich die Stromversorgung ist nicht ganz so robust wie beim Arduino (ist beim 3.2 aber besser geworden).

Grüße
Bernd
 

gruni

User
Hallo Bernd,

erstmal vielen Dank für die zur Verfügungstellung der Files.
Ich habs mal auf ein UNO-Board draufgespielt.
Ich bekomme auf der "alten" Jetibox nur die ersten zwei Menue-Zeilen dargestellt (natürlich), kann dann aber nicht weiterblättern.
Ich hatte erst vermutet, es liegt am EX-Sendermodul in Verbindung mit "altem" Duplex-nonEX-Empfänger... ein weiterer Test mit einem EX-Sat brachte aber das gleiche Ergebnis.

Ich schliesse daher erstmal messerscharf, daß das "blättern" nur beim Jeti-Sender oder eventuell der grossen JB funzt, oder liege ich da falsch?

off topic
Eigentlich bin ich immer noch damit beschäftigt, Jeti-Telemetrie in die Taranis einzuspeisen, quasi das andere Ende. Ich will erstmal den Ardu-Kram verstehen.
Ein Parallelprojekt, welches versucht, Mlink in die Taranis einzukoppeln ist bei mir bisher auch daran gescheitert, daß ich zwar ein Mlink-(JR).Modul habe, aber im Moment zumindest keine Mlink-RX. Damit ist der Lernerfolg zunächst nicht wirklich gegeben...ok ist off topic.

Beste Grüsse, Gruni
 

Sepp62

User
Hallo Gruni,

das Weiterblättern auf dem Jeti-Sender funktioniert, Du musst dazu den RX- und TX-Pin verbinden (ggf. mit einem "Angstwiderstand" von 100 Ohm). Für die Jetibox konnte ich das leider nicht testen (habe keine).

Allerdings funktioniert die Datenübertragung vom Empfänger zum Arduino bei mir nicht zuverlässig. Man kann im seriellen Monitor sehen, dass Tastendrücke am Sender immer wieder nicht als Zeichen auf der Schnittstelle ankommen. Auch wenn man das Ganze am Oszi anschaut, sieht man nicht, was da schiefgeht. Das Halb-Duplex-Timing sollte prinzipiell passen, d.h. nach dem Senden des Telemetriepakets vom Arduino an den Empfänger schaltet die Library auf "Empfangen" und wartet, bis das nächste Telemetriepaket dran ist (alle 150 ms). Meistens kommen die am Sender gedrückten Tasten auch richtig an, aber ab und zu fehlt einer.

Dieses Problem konnte ich bis heute noch nicht klären. Für den "Eigenbedarf" kann man damit leben, aber schön ist es nicht.

Viele Grüße
Bernd
 

onki

User
Hallo zusammen,

gibt es eigentlich eine Umsetzung für eine einfache Strom/Spannungsmessung mit µC und Jeti-Telemetrie?
Quasi ein UniSens-E ohne Vario und Drehzahlmessung bzw. einen besseren MUI mit ausgefeilterer Kapazitätsrücksetzung (wie beim UniSens-E).

Gruß
Onki
 

onki

User
Hallo,

die ACS7xx Sensoren sind ja einfache Stromsensoren, die den AD-Wandler des Arduino verwenden. Gibt es auch Stromsensoren mit eingebautem A/D-Wandler, die vie ISP oder I2C mit dem Arduino kommunizieren?

Zur Kapazitätsmessung müsste man ja die Stromwerte aufsummieren als mAh. Gibt es hierzu und hinsichtlich der automatischen Rücksetzung (bei vollem Akku) Beispielcode. Die Kapazitätswerte müssen ja irgendwie gespeichert werden.

Gruß
Onki
 
Ansicht hell / dunkel umschalten
Oben Unten