9XR 送信機と FrSky テレメトリー

自分は、以前に JR の7チャネル送受信機を買ったのだがー、マルチコプターと、ヘリコプターを購入して、受信機を買い足す必要が出てきたー
それに、マルチコプターの本格的運用では7チャネルでは少し足りない感じもする・・・
残念な事に JR の受信機だけ買い足すのも、割高な強気値段で、どうしたもんかなーと考えていたらー、9チャネル送信機が5000円!、えっ?!

そうなんですー、モジュール式の送信機だけなら海外では格安で売られているのですー、品質はそれなりなのかなーと思ったら、そんな事もなさそうだしー
JR は DMSS に対応した物を購入したのですがー、実際、センサーなどのモジュールが割高で、テレメトリーとして運用するには、かなり厳しい・・
テレメトリーのモジュールを自分で作りたいけど、プロトコルは非公開だし、リバースエンジニアリングするのも億劫だし。

TURNIGY 9XR は JR 用モジュールが使えるようになっている。
TURNIGY 9XR

それから、格安の FrSky のテレメトリーモジュールも購入した。
※それでも、JR の受信機買うのとあんまし代わらないお値段。
FrSky DJT

FrSky D8R-II PLUS

FrSky のテレメトリーモジュールは、プロトコルが公開されており、自分で簡単に作る事も出来る。
そこで、とりあえず、送信機側表示モジュールを作って、実験してみようと思う。

基本的構成はいつもの AVR 、今回は ATMega328P を使った(250円)、それと、DJT とシリアル通信を行う為の RS232C のラインドライバー(ADM3202)、表示は、秋月の128×64ピクセルの液晶

9XR はオープンソースもあり、ファームを書き換えする事も出来るので、DJT からのテレメトリープロトコルを突っ込んで、9XR の液晶に表示させれば、シンプルでクールなのだがー、本体を多少改造しないと駄目なので、今回はパスする事にした。
まず、表示用液晶として、秋月電子で売られている128 x 64 のドットマトリックス液晶、この液晶、そこそこ小さく、手頃な価格で良いのだがー、痛いとこもある、接続が、2mm ピッチで自作向きでは無い、そこで、まず、付属のコネクターをユニバーサル基板に接着し、強度を増す為、スタビライザーみたいな物を追加した。
※2本なら、2mmピッチを無理やり2.54mmピッチに差し込める。

128x64 接続A
128x64 接続B

完成した基板
TelemetryBoadTop
TelemetryBoadBottom

とりあえず、ソフトウェアーは、アナログポートの数値を読み込むだけの物を仮に作ってみた。
DJT から送られてくるプロトコルは、以下の通り(ヘッダー、ターミネーター 0x7E、アナログポートのID:0xFE)

0x7E、0xFE、PORT1、PORT2、Link_quality(2)、0x00、0x00、0x00、0x00、0x7E
※FrSky のマニュアルでは、Link_quality は1バイトで zero が5バイト続くとなっているが、Link_quality は2バイトで、zero は4バイトのようだ。

port1 のアナログ電圧は4倍して表示してある。
リチウムポリマー電池の電圧を1/4にして入力すれば良い。
グラフィックス液晶の利点を使って、レベルバーも表示してある。
LCD の下に破線が表示されていて、プロトコルを受信している場合に、アニメーションする。
一応、プロトコルの生データを16進で表示している。
この LCD は、アイコンの表示があり、最下位の4ピクセルの On/Off で表示するのだけど、役に立たないので、63ラインは使わない事にする。IMG_0410s

自分で作ると、専用のカスタマイズを作成する事が出来るのが良い。

※ソースコード

※回路は、mainloop.cpp にポートと、LCD の接続をコメントしてあるので、それを参考に。
※液晶は低速で、コマンドを書き込んでから、それが有効になり次のコマンドを発行するまで待たないといけない、一般的には、ステータスを読み取るのだけど、
液晶を外した状態にすると、プログラムが進まなくなるし、ポートの制御が面倒なので、プログラムループで遅延している、その為 R/W は書き込みしか行わないので、GND に落とす。
※シリアルは、RXD、TXD を RS-232C のコンバーターを通して接続する、DJT:RXD と AVR:TXD、DJT:TXD、AVR:RXD となる事に注意されたい。
※そのうち、KiCAD のプロジェクトをアーカイブに含めるつもり。