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

onki

User
Hallo zusammen,

kennt noch jemand von euch einen kleinen Arduino-kompatiblen µC mit etwas besser auflösenden A/D Wandlern?
Etwa in der Dimension eines Nano oder miniPro.
Dann wäre der Weg frei für einen gunstigen Stromsensor. Der Teensy ist zwar super aber auch nicht gerade ein Schnapp.
Und die Rechenpower benötige ich eigentlich nicht, nur einen 12 Bit A/D. 10 Bit sind in der Kneipe OK, als Wandler aber nicht so berauschend.

Gruß
Onki

P.S. Hat von euch schon mal jemand einen AD 5325 (4 fach 12 Bit DAC mit I2C) unter Arduino bearbeitet? Ich werd aus dem Datenblatt nicht schlau wegen der Ansteuerung (Adress- bzw. Datenformat).
 
Hallo Onki,
kennt noch jemand von euch einen kleinen Arduino-kompatiblen µC mit etwas besser auflösenden A/D Wandlern?
Etwa in der Dimension eines Nano oder miniPro.
Dann wäre der Weg frei für einen gunstigen Stromsensor. Der Teensy ist zwar super aber auch nicht gerade ein Schnapp.
Und die Rechenpower benötige ich eigentlich nicht, nur einen 12 Bit A/D. 10 Bit sind in der Kneipe OK, als Wandler aber nicht so berauschend.
P.S. Hat von euch schon mal jemand einen AD 5325 (4 fach 12 Bit DAC mit I2C) unter Arduino bearbeitet? Ich werd aus dem Datenblatt nicht schlau wegen der Ansteuerung (Adress- bzw. Datenformat).

Mit welcher Messmethode willst Du denn den Strom messen (Hall-Sensor oder Spannungsabfall an einem Widerstand) ?

Eine Liste von Arduino Boards gibt's hier:
https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems#cite_note-Auto7L-86-199


Gruss, Wolfgang
 

onki

User
Hallo Heinz,

danke für den Tip. den LC kannte ich noch nicht.

@Wolfgang.: Die Strommessung über Shunt hab ich derzeit am Start. Das finmde ich die einfachste und kompakteste Methode bei Stromen um 50A.
Dazu hab ich ja den weiter oben erwähnten Sensor am Start.
Wenn ich das richtig sehe, belaufen sich die 12 Bit Auflösung bei allen Teensys auf 3V3. Dann wird mir auch klar warum ich mit den Faktoren so Probleme hatte. Ich hatte die auf 5V bezogen.

Gruß
Onki
 

Eckehard

User
Hallo Wolfgang,

in Post 55 hast Du einen Hinweis gegeben, wie man 2 Werte mit Bordmitteln in ein Telemetrie Fenster bekommen kann.

Ich habs jedoch nicht hinbekommen.

Ist es möglich hier einen kurzen Auszug aus Deinem Code zu posten, damit auch ich es kapiere?

Danke vorab für Deine / Eure Mühen!

Eckehard
 

Sepp62

User
Hallo Ekkehard,

ich antworte mal für Wolfgang, da ich denke, dass ich verstanden habe, was er macht:

Der Messwert wird als "Festkommawert" mit zwei Nachkommastellen angezeigt. Vor das Komma hat er die Anzahl der Zellen geschrieben, nach dem Komma erscheinen die Zellen, die als "OK" erkannt sind.

Die Zahl vor dem Komma multiplizierst Du mit 100 und dann addierst die Zahl nach dem Komma:

"10.05" ist der Wert 1005. Den Precision-Wert des Sensors setzt Du auf 2, damit Du 2 Nachkomastellen bekommst. Der danach angezeigte Begriff "C.ID" ist einfach der statische Text der "Einheit". Er ist leider nicht im laufenden Betrieb änderbar.

Viele Grüße
Bernd
 

Eckehard

User
Hallo und Guten Abend,

endlich Wochenende und ein wenig Zeit.....


Ahhhh, jetzt ist es (auch mir) klar, also so:

void GetSensorValues()
{
myVoltage = (lowestVoltage / 10); //
myVoltage2 = (highestVoltage / 10); //
myLowCellCounter = lowCellCounter; //
myNumberOfCells = anzahlZellen; //
myNumberOfLowOfAll = (lowCellCounter*100) + anzahlZellen;
myTemp = (10 * rtc.getTemperature()); // 31.5 Grad Celsius
}

ergibt dann:

Screen000.png und Screen001.png

mit folgender Ausgabe im Serial Monitor:

Unbenannt.png

Ein Gimmick wäre noch wenn man die Zeichenkette "GGL_________" (siehe ScreenShot Serial Monitor) übertragen könnte.
Diese Zeichenkette stellt "grafisch"dar, welche Zelle(n) der Reihenschaltung (1-12) über (G) bzw unter (L) der Schwelle liegen...

Als nächstes muß ich mir die 12 verschiedenen Spannungsteiler zusammenbauen, die sicherstellen, daß die "single ended" ADC Eingänge nur jeweils den zulässigen Spannungswert bekommen (3.3V Referenz).
Für die Zellen [Z1, Z2, Z3, ...Z12] gibt es die Teilerverhältnisse [1:2, 1:4;1:6, ..,1:24].

Die tatsächlichen Zellenspannungen Uzn mit n[1..12] muß ich mir dann aus den gemessenen Spannungen am Eingang ADCm mit m[0..11] zusammenrechnen...

Uz1 = 2 * Uadc0
Uz2 = 4 * Uadc1 - Uz1
Uz3 = 6 * Uadc2 - Uz1 -Uz2
...
Uz12= 24 *Uadc11 - Uz1 -Uz2 -Uz3 - Uz4 - Uz5 - Uz6 - Uz7 -Uz8 - Uz9 - Uz10 - Uz11

Soweit der Plan....
Bin gespannt wie es klappt.....

Grüße und nochmals herzlichen und vielen Dank!

Eckehard
 

Eckehard

User
Gimmick, Bar Anzeige, welche Zelle hat Spannung < Schwellspannung

Gimmick, Bar Anzeige, welche Zelle hat Spannung < Schwellspannung

Hallo nochmal,

also das Gimmick geht auch mit Boardmitteln....

In der LowBar Anzeige bedeutet
- "1", Zelle ist > Schwellspannung
- "8", Zelle ist < Schwellspannung ---> Alarm!

Screen002.png Screen003.png

Die "8" bedeutet also das die Zelle 1 des Akku eine Spannung < Schwellspannung hat. Die 3,37V ist hier die Spannung der Zelle 1, da es insgesamt nur eine "Low" Zelle gibt, deren Spannung < der Schwellspannung ist
Die "1" bedeutet also das die Zelle 2 und 3 des Akku eine Spannung > Schwellspannung hat.

Ob sich das auch im Feldvesuch bewährt wid sich zeigen....

Grüße
Eckehard
 

Eckehard

User
Frage: Ändern von Sensor Einstellungen über JetiBox Emulation DC16?

Frage: Ändern von Sensor Einstellungen über JetiBox Emulation DC16?

Hallo Interessierte,
Hallo Bernd,

ist es eigentlich möglich, mit Hilfe der jetiBox Emulation der DC 16 und entsprechender Programmieung im Sketch unter Verwendung der Library Einstellungen an den Eigenbau Sensor zu senden?
Wenn ja, gibt es dazu vielleicht ein Code Beispiel?

Eckehard
 

Sepp62

User
Hallo Eckkehard,

ich habe das in meinem Turbinen-ECU-Sensor gemacht.

https://sourceforge.net/projects/orbit-ecu-telemetry-sensor-lib/?source=directory

Du findest den Code in der Funktion HandleJetiboxDisplay().

Du musst RX und TX-Pin verbinden (ich habe einen Widerstand von 100 Ohm dazwischen).

Wenn Du den Teensy hernimmst, musst Du die Serial-Library gemäß TeensyReadme.txt (liegt bei der Jeti-EX-Library) ändern.

Ab und zu werden Tasten der Jetibox verschluckt, aber sonst geht's.

Grüße
Bernd
 

Eckehard

User
Hallo Bernd,

vielen Dank für den Link zu OrbitECUSensor... Ich habe das Archiv mir mal angeschaut, und letztendlich nach dem String "HandleJetiboxDisplay" durchsuchen lassen, leider erfolglos.
Hast Du noch einen weiteren Tip?

Mein Projekt ist jetzt mit den passenden Spannungsteilern ausgestattet, und zeigt nun die wirkliche Zellenspannung an. Ich bin ganz zufrieden, obwohl mein Code schwer wartbar ist, da einfach nur runterprogrammiert, ich glaube da muß ich noch etwas lernen....


Jetzt schwebt mir noch die Expander Funktion vor. Ich wüde gerne den EXT Port an weitere Sensoren weiterleiten, um dann die Daten von meinem DIY Sensor und die Daten des zusätzlichen Sensors an den RX geben zu können....


Dazu würde ich gerne in einem ersten Schritt den Datenstrom der zum EXT des RX geht "abhören", um zu kapieren wie es genau funktioniert....

Hast Du einen Tip, wie ich das einfach realisieren könnte? Ich vermute, daß Du auch schon einmal so etwas bei der Entwicklung der Library implementiert hattes, für Debug Zwecke....

Danke fürs Mitgrübeln....

Eckehard
 

Sepp62

User
Hallo Eckehard,

sorry, da habe ich wohl was verpennt. Die neueste Version (V0.96) hatte ich noch gar nicht hochgeladen:

https://sourceforge.net/projects/orbit-ecu-telemetry-sensor-lib/files/OrbitECUSensor_V0.9.6.zip/download

Beim Expander und dem Abhören des Sensor-Signals kann ich Dir im Moment leider nicht weiterhelfen. Ich habe bisher keine Sensoren "abgehört". Das kriegt man sicher hin, eine Decoder-Library ist aber ungefähr so aufwändig wie die Encoder-Library (also die hier besprochene Jeti EX Lib).

Ich wünsche Dir aber viel Erfolg, wenn Du das angehen möchtest.

Viele Grüße
Bernd
 

Eckehard

User
Hallo Bernd,

1000 Dank für den Link, jetzt habe ich eine Vorstellung, wie ich den Spannungswert mithilfe der jetiBoxEmulation der DC16 setzen könnte, der die Schwelle zwischen Normal- und Unterspannung darstellt.
Dezeit ist der Wert im Sketch hardcodiert.

Beim Thema Expander und abhöen geht es mir "nur" um das erkennen des Starts und Endes eines an den RX EXT Port gesendeten Paketes. Die Dekodierung ist vermutlich sehr interessant, aber imho nicht notwendig.
Werde mal weitersuchen....

Grüße

Eckehard
 
NFC Zeugs

NFC Zeugs

Liebe Jeti-Eigenbau-Sensor Freunde,
es gibt wieder ein paar Fortschritte zu berichten:

1. Die NFC-Tags für Metalloberflächen http://rapidnfc.com/item/405/on_metal_nfc_tags_19_x_19mm_micro_blue_logo_ntag213 funktionieren auch auf LiPo Akkus zuverlässig, "normale" tun gar nichts, wenn man sie auf Lipos klebt.

2. Der Teensy überträgt nun brav die Werte der IR Sensoren, des Temp-Sensors und die Daten, die auf den NFC Tags gespeichert sind.

3. Nachdem ich entdeckt habe, dass eines der alten Handys meines Juniors NFC kann, habe ich das auch noch getestet.
Ergebnis: MiFare Classic Tags, die man mit der Adafruit Lib im NDEF Format beschreibt, lassen sich mit dem Handy lesen. Leider sind nicht alle NDEF Funktionen für die 213er Tags implementiert - also lasse ich die Finger davon. Ausserdem bin ich iPhone User - dort sind sowieso die NFC Funktionen kastriert :mad:

4. Meine grösste Sorge war unbeabsichtigtes Hinaufzählen des Entlade-Counters durch Fehlbedienung oder andere unglückliche Umstände z.B. Reboot nach Spannungsschwankung. Ich habe deswegen die Real-Time Clock des Teensys in Betrieb genommen (wirklich cool - mit Quartz und Knopfzelle), um auch einen Timestamp auf den NFC Tag schreiben zu können. Damit kann man verhindern, dass in unplausiblen d.h. zu kurzen Intervallen, der Cycle-Counter hinaufzählt wird.

Was machen Eure Sensoren ?

Herzliche Grüsse,
Wolfgang
 

Eckehard

User
Hallo Interessiete,
Hallo Wolfgang,

durch Osterferien, Verwandteenbesuche bin ich aus dem Prototypenstadium noch nicht rausgekommen, d.h. der Sensor mit Aufzeichnung und Telemetrie funktioniert auf dem Steckbrett. Beim Versuch einen Expander mit zu integrieren bin ich noch nicht weitergekommen. De Vesuch mit einem MAX232 den Datenstrom auf dem Seriellen Port des PCs einzufangen hat leider nicht geklappt....

Ich werde mir aber für SNR:00001 einen weiteren Teensy 3.2 und zusätzlich einen Serial->USB Adapter besorgen, um damit das Thema weiterverfolgen zu können.

Auf der anderen Seite muß ich mir eh einen neuen Empänger für das Modell noch kaufen, da ist dann ein REX 10 auserkohren. Genaugenommen ist dann ja kein Expander mehr nötig um meinen Sensor und einen UnisensE zu integrieren.

Ich bin mit dem derzeitigen Stand sehr zufrieden. Vielen Dank an dieser Stelle an Bernd für die Library!

Was gibts sonst Neues?

Grüße
Eckehard
 

Sepp62

User
Hallo Ekkehard,

schön, dass Du hier weitermachst.

Was gibt es Neues bei mir ?

Ich habe den Sensor für meinen Turbinenheli fertiggemacht. Er enthält folgende Komponenten, die auch einzelnen nutzbar sind (jeweils eine C++-Klasse, die mit der Jeti-Library harmoniert):

1. Turbinen-ECU-Sensor: Greift die Terminal-Schnittstelle der ECU ab und zeigt: Abgastemperatur, Drehzahl, Batterie-Spannung, Spritverbrauch
2. GPS-Sensor (NMEA): Position, Geschwindigkeit, Meereshöhe, Genauigkeit
3. Drucksensor (Bosch BMP180): Druck, Höhe über Grund, Temperatur
4. Spannung der Doppelstromversorgung (U1, U2 abwechselnd im 2 Sekundentakt)

Zudem habe ich mir eine kleine Adapterplatine für den Teensy machen lassen (mit auf die oben genannten Sensoren abgestimmtem Anschlussschema)

Sobald das Zeugs halbwegs getestet ist, lade ich die Quellen hoch.

Viele Grüße
Bernd
 
Hallo, ich bin neu hier :)

Ich hatte die Idee, eine Mobius Kamera fernzusteuern, am liebsten mit einer Jeti-Fernbedienung. So bin ich auf Euer sehr interessantes Projekt gestoßen. Die Kamera hat drei Buttons und vier LEDs. Ich habe nachgemessen dass die Buttons nach Masse durchschalten. Man müsste also Buttons und LEDs direkt hijacken und an GPIO-Pins hängen können.

Was die LEDs angeht, so könnte der Microcontroller den Status auch gleich auswerten, z.B. Blinken erkennen und aus den vier einzelnen LED-Werten einen einen einzigen alphanumerischen Statuswert generieren wie etwa "Aus", "Bereit", "Modus 1 Aufnahme läuft", der dann als Telemetrie-Sensor zur Verfügung steht. Das sollte sich mit der Library schon machen lassen, denke ich.

Was die Buttons angeht, so müsste umgekehrt ja Steuerinformation von der Fernbedienung zur Kamera gelangen. Wenn ich das richtig sehe, dann wäre der prädestinierte Weg dafür "Remote Commands" ("Direkteingabe-Kommandos"). Ich habe mal durch den Code der Library geschaut und auf den ersten Blick nichts dazu gefunden. Dieses Feature ist scheinbar noch nicht implementiert?
 

Sepp62

User
Prinzipiell kannst Du mit der Library Dein Vorhaben umsetzen, zumindest was die Richtung Kamera -> Sender angeht (genau in der Art wie Du es beschrieben hast).

Umgekehrt musst Du selbst tätig werden. Damit Du die Steuerkanäle des Jeti-Senders empfangen kann, gibt es mehrere Wege:

1. Einige Ausgangs-Pins des Empfängers als digitalen Ausgang programmieren und auf die Digitaleingänge (GPIO) des Telemetriemoduls hängen (Arduino). Die Frage ist, ob Du genug freie Pins hast.
2. Einen Ausgang des Empfängers als PPM-Output definieren und an den Arduino anschließen. Eine PPM-Library auf dem Arduino benutzen und das Signal auswerten.

Die Lösung 1. würde mit der hiesigen EX-Library funktionieren, bei der Lösung 2 kommt es auf die PPM-Library und den Rest der Anwendung an. Eine PPM-Library benötigt i.d.R. einen Hardware-Timer und einen Interrupt. Ich kann Dir mangels Praxis auch keine konkrete PPM-Library empfehlen.

Was die Library unterstützt, sind die Buttons der Jetibox-Emulation. Du musst dann auf dem Sender die Jetibox starten und hast dann die üblichen Buttons, die in der Library auch empfangen werden. Das Problem ist, dass das nicht sehr zuverlässig funktioniert, der Grund dafür ist nicht klar.

Darüberhinaus könntest Du einen Ausgang des Empfängers als "EX-Bus" verwenden und das EX-Bus-Protokoll auf dem Arduino implementieren. Dann hast Du eine Kommunikation in zwei Richtungen. Die EX-Library, die hier besprochen wird, hilft Dir dabei aber NICHT. Ich kenne auch keine "EX-Bus"-Library-Implementierung.
 
Weg 1 über Servo-Ausgangs-Pins des Empfängers scheidet aus, da ich tatsächlich nicht genug davon frei habe... mein Empfänger (Rsat2) hat nämlich überhaupt keine davon :) sondern nur einen Summen-Port. Darüber laufen serielle Daten im EX-Bus-Protokoll an den Flight-Controller, der diese parst und daraus die Werte der einzelnen Kanäle extrahiert. Das gleiche müsste ich also auch tun - an den Summenport ran und die Nachrichten ebenfalls parsen. Schade dass die Library das gar nicht kann - ich dachte, die sei bidirektional.

Wahrscheinlich ist es für den Weg vom Sender zum Empfänger tatsächlich am einfachsten, einen Schalter einem Kanal zuzuordnen und dann mit dem Arduino den Wert für diesen Kanal aus dem Datenstrom herauszufischen. Was mir daran nicht so gut gefällt ist, dass eben ein Kanal belegt wird. Eigentlich habe ich ja genügend Kanäle frei, daher sollte ich das vielleicht einfach so machen. Meine Überlegung war halt, dafür "Remote Commands" (Direkteingaben) zu benutzen, die keinen Kanal verschwenden. Ich tappe da etwas im Dunkeln, da ich bisher kein Gerät habe das solche Remote-Commands unterstützt und deswegen gar nicht genau weiß, wie das zu benutzen ist. Die Anleitung sagt dazu jedenfalls:

"Der Sender unterstützt bis zu 16 universelle Befehle für die drahtlos verbundenen und EX Bus fähigen Geräte. Eine Übersicht der möglichen Befehle erhalten Sie nach Druck auf die Taste F4 CMD im Menü Modellauswahl / Geräteübersicht. Die möglichen Befehle werden automatisch von dem jeweiligen Gerät ausgelesen und angezeigt."​

Es muss also vom Sender eine Anfrage-Nachricht der Art "Hey Sensor, welche Befehle kennst du?" geben, und daraufhin müsste der Arduino dann antworten: "Ich kann Aufnahme starten, stoppen und Foto machen", so dass der Sender dieses Menü aufbauen kann. Diesen Befehlen kann man auch Schalter zuordnen, aber eben unabhängig von Kanälen. Da ein Schalter auch eher vereinzelte Events liefert und nicht kontinuierliche Werteverläufe wie ein bewegter Knüppel, dachte ich irgendwie, es sei zweckmäßiger solche Direktbefehle zu implementieren (jetzt klar geworden was ich meinte?) Wenn aber keine Library dafür existiert, dann ist es vermutlich deutlich einfacher, das über Kanal-Werte zu machen, denn dann bräuchte ich die Kommunikation vom Sender zum Flight-Controller nur mitzulesen und nicht auch noch zu antworten.

Verständnisfrage: diese Direktbefehle haben nichts mit der Jeti-Box zu tun, richtig? Oder ist das die Jeti-Box-Funktionalität?

Was mir jetzt auch nicht so ganz klar ist: in der Dokumentation zum EX-Bus-Protokoll steht, dass Telemetrie-Daten vom Sender gepollt werden und da ist ein Beispiel für eine "Telemetry request" message. Wie kann denn die Library Telemetrie-Daten zur Verfügung stellen, wenn sie keine Nachrichten vom Sender liest, der die Telemetrie doch anfordern müsste?

Sieht so aus, als sei ein rudimentärer EX-Bus-Parser zwar Aufwand, aber jetzt auch kein Rocket Science (klar, geht ja um Quadrokopter). Ich müsste bei allen Nachrichten den Header und die Länge mitlesen, wenn dann eine Nachricht vom Typ 0x31 (channel values) kommt die zwei Byte des jeweiligen Kanals lesen, und bei allen anderen Nachrichten jeweils solange ignorieren bis die angekündigte Länge durch ist. Sollte auch noch hinzukriegen sein.
 
Ansicht hell / dunkel umschalten
Oben Unten