HOI-LINKのELRS版~その2~

気づいたらまた長らくBLOGを放置していました。
HOI-LINKのELRS版のその後、割と直ぐに動作はしたのに改良しようとしたところでハマってそのままになったので、「とりあえず動作版」を公開いたします。
※このページの下の方にファームへのリンクを貼っています。

前回(いやもう4か月も前^^;)、JUMPER T8SGにBETAFPVの送信モジュールを接続して動作したところまでを書きました。その後の色々を書こうと思っていましたが時間が過ぎてしまったので以下簡単に済ませます。

まずELRS受信機が出すCRSFプロトコルをマイコンボードで読んでみました。420Kbpsで動作させたいのでArduinoUNO等ではスピードが足りず、いつかのトラ技の付録でESP32搭載のボードを使用。

そしてSTM32F411 Nuclero-64ボードでELRS版HOI-LINKとして動作を確認。
(これでドローンシミュレータVelocidroneで使えるぞー。 \^o^/ )

STM32F411のボードだと勿体ないのでSTM32F103ボードに移植。

その後、改良したい点があったのですが時間が過ぎてしまったので一旦この時点のファームをページの最下部に貼り付けました。

HOI-LINK ELRS版 を試す方法

使ったボードは秋月電子で購入したSTM32F103C8T6マイコンボードです。
ファームを解凍するとHOI-LINK-EX\Debug\HOI-LINK-EX.binというファイルが含まれているので、ボードの取説に従いFlash loader demonstratorを使って書き込みます。

書込み中の図。
左上のゴチャゴチャッとしたのはUSBシリアル変換です。

再コンパイルする場合はSTMicroelectronicsのCubeIDEを使用します(私が使ったバージョンは1.7.0でした)。上記バイナリを書込むだけなら再コンパイルは不要です。

書込み後、基板回りの接続は次の様に配線します。
・PB10(USART3TX)<–>ELRS受信機のRX
・PB11(USART3RX)<–>ELRS受信機のTX
・基板GND<–>ELRS受信機のGND
・基板5V<–>ELRS受信機の5V
※基板上に5Vという端子がないのでSW2の真ん中の端子に接続しました。
※ USBを使用するのでJ1,J2のジャンパーはハンダで短絡しておく必要があります。
※なおELRS受信機は420Kbpsで接続出来る様に予め設定しておきます。

裏面:赤い線がELRC受信機に5Vを入れる配線。

そうするとこんな感じでPCに繋がり、Velocidroneで練習できるのです。

注意:例によって正式なUSBベンダーIDがないので適当な値を書いています(VID:0xFFFF PID:0x0015) 。
よって使用する際は自己責任でお願いします。

改良したい点

ELRSの受信機はPCと接続して諸々の設定をする必要があります。その為にはHOI-LINKの回路をUSBシリアル変換としても使えると便利かなと思いますが、気軽に試し始めたらUSBとUART間のタイミングが結構難しくてハマっています。
またSBUS版HOI-LINKの時、このページで公開しただけでは世間に広まらず、NONSAYAさんが販売されて広まったという経緯がありました。しかし販売するためにはUSBのベンダーIDが必要なので、またマイクロチップテクノロジーのマイコンに移植してIDの分配を受けようかと考えています(実はPIC32MXでの動作は確認済なのです)。

ファームウェアのダウンロード:HOI-LINK-EX_20220919.zip

HOI-LINKのELRS版

先日JDL宮崎の会場で「HOI-LINKのELRS版ってできないの?」と聞かれました。

今までのHOI-LINKS-BUS信号をUSBに変換してPCに送っているので主にフタバ系のプロポシステムが対象になっています。
一方ELRSというのはこちらで開発されているラジコン電波のプロトコルで、昨年あたりからドローンレース界隈でちょっとしたブームになっているのです。

私は今までELRSを扱える機材を持っていなかったのですが、そう言われるとやってみたくなるのが人情というもの。。。

システムは大体この図の様な感じになるので、試すには最低でも送信モジュール、受信モジュールは購入する必要がありますね。あと送信機本体はどうかな?

送信、受信のどちらのモジュールもCRSFプロトコル(ハードウェア的にはUART)で接続するので、このCRSFプロトコルを知るのがキモとなりそうです。

送信機本体でよく使われているのはファームウェアがOPEN-TXのものですが、ウチにはありません。さすがにこのために送信機まで購入するのはちょっとですね。。。
で、色々調べていくとどうやらJumperのT8SGが使えそうという事が分かってきました。
というのも送信機と送信モジュールの間はCRSFプロトコルというシリアル通信で接続します。で、T8SGにもCRSFプロトコルを選択できるのです。
ならばT8SGにCRSFプロトコルを出力させてみましょう。信号をオシロスコープで見ると、420Kbpsのそれっぽい信号が出ています。

420Kbpsも速いしデータの繰返し周期が約2mSなのも速いですねー。

なんか、イケそうですね。
ならば送受信モジュールだけ購入して実験してみましょう。

という事で発注しました。・・・そして到着したのは盆休みの最終日。もう少し前に届くと着手しやすかったんですけど、仕方ないですね。

購入した送信モジュールはBETAFPV”ELRS NANO TX”。このモジュールは技適が取れているので、日本では殆どの人がこれを使っています。
そして受信モジュールもBETAFPV”ELRS Lite RX”。この受信モジュールはメチャクチャ小さいですね。

これで材料が揃ったので、まずは普通に使えるかというところから。
こちらのページを参考にしながら試していきます。

まず最初にELRSモジュールは諸々の設定をするためにPCと接続する必要があります。送信モジュールとはUSB Type-Cで接続できるので簡単です。受信モジュールはUARTで接続しますが、フライトコントローラー経由でもBetaflightがうまくやってくれる様です(なのでFC経由でやりました)。

そして今回設定したのはこの内容。まずは送信モジュール・・・

そして受信モジュール・・・

各モジュールの設定ができたので接続します。まず送信側・・・

なおT8SGとNANO-TXの間はこの様に配線しました。

そして受信モジュールをFCと接続(実際にはファームを設定したときに接続した)・・・

FCの右についているのがERLS受信モジュール。
なお上についている基板は別の実験用なので関係ないです。

受信モジュールはTX/RX両方の信号を接続する必要があります。(テレメトリを使わなければRX側は繋がなくても良さそうに思えますが、たぶんファームの書換えにも使うのやっぱり繋いでおきます)。

ところで送信機←→送信モジュールの間、および受信機←→FCの間、両方共CRSFプロトコルで接続するという事になっているのですが、送信機側の接続はシリアル信号線は1本、受信機側は2本となっています。
たぶん送信機側は半二重、受信機側は全二重なのかと思いますが、名称的には区別ないんですかね?

そして送信機の電源を入れ、FCをPCに接続してBetaflightConfiguratorの”受信機”ページで確認すると、あっさり接続できていました。

T8SGで問題なくELRSできる様ですね。

・・・でもここまでは準備段階。ここからELRS(というかCRSFプロトコル)に踏み込んでいきます。

Jumper T8SG V2 Plus ~その2~

前回紹介したJumper T8SG v2Plus、正常動作が確認できたので予定通りMODE2→MODE1に改造します。

その前にこのMODE1や2ってなんなのさ?という事を簡単に説明しておきます(このブログはラジコンやドローンよりもどちらかというと工作寄りなので)。
ラジコンの送信機で空モノを操縦するとき、基本の4つの軸(スロットル、ラダー、エルロン、エレベーター)を 2本のスティックで 操作します。2本のスティックそれぞれを縦と横に操作するので4つの軸を操作できるわけです。この時どのスティックにどの軸を割り当てるかで色々なMODEがあります。MODEには1から4までありますが大抵はMODE1かMODE2が使われています。日本では歴史的にMODE1が使われてきましたが海外ではMODE2が多いそうです(なぜなんでしょうね?)。

私も昔からMODE1を使ってきました。 どっちのモードが操縦し易いのかというと色々意見があるでしょうが、何にせよ最初に使い始めたモードに慣れると簡単に変更する事はできません(といいつつも息子は飛行機を飛ばしていた頃はMODE1でしたがマルチコプターを飛ばす様になってからMODE2に変更してしまいました)。

話は戻りますが今回購入したT8SGは前回書いた様にショップの在庫の関係でMODE2なので改造が必要なのです。大抵の送信機はジンバルの構造が似通っているので問題なく改造できると思います。

なおMODE1とMODE2の違いは2本のスティックの縦方向への割り当てが、MODE1だと右手がスロットル、左手がエレベーターですがMODE2だと逆になります。通常エレベーターはスティックから手を離すとバネで中立に戻りますがスロットルは手を放してもそのままの位置を保持します(そのため適度な摩擦感を持たせてある)。なので改造の主な内容は左右のバネ感と摩擦感を出すパーツの入れ替え作業となります。

では蓋を開けてみます。
本体裏側のネジを6本外して本体の肩の部分にあるスイッチを止めているプラスチックをこじ開けると裏蓋が外れます。
裏側から見ているので写真右側のスティックが左スティックで、このスティックの縦方向の操作がスロットルに割り当てられています。

中身

スロットルは摩擦感が必要なので金具で押さえつけてあります。

金具を取り外しました。

そして右ジンバルには中立に戻す為のバネがあります。バネ上側を取り付けてあるプラスチックパーツはバネの力だけで保持されているので引っ張り上げれば本体から外せます。

バネを保持していたプラパーツ
そしてカムを押さえつける為のレバーとバネ。
このレバーがスティック側のカムを押さえつける事で中立に戻るのです。

右スティックから外したバネとプラスチックパーツを左スティックに取付けます。

そして左スティックから外した押さえ金具を右スティックに取付けます。

ネジの締め具合で抑え圧を調整できる様です。

あとは元通りに裏蓋を取付けて電源を入れ、メニューからMODE1設定に変更すれば完了です。

これで暫く快適にシミュレーター(VelociDrone)をしていたのですが、突然右スティックを左右に動かしたときにキコキコという軋み音が出る様になったので、もう一度裏蓋をあけて右ジンバルを外してみました。


隙間が狭く当たりそうな箇所に細く切った紙を挟んで見ましたが接触している箇所はなく、やはりカムとレバーが擦れる部分で摩擦音が出ている様です。そこで 細いエナメル線にグリスを少しつけ、薄く塗ってみたら軋み音は消えました。

先日モーターのコイルを巻き直したエナメル線の切れっ端でグリスを塗った。


外したついでにジンバルを眺めまわします。この機種はホールジンバル採用というのがウリとなっていて、可変抵抗ではなく非接触のセンサーなのですり減る心配がないそうです。
恐らくこのコンデンサーマイクかと思う小さな部品と横の基板がホール素子を利用した角度センサーの様です。

これどういう仕組みなのでしょう?
ロボットなどではレゾルバという角度センサーがあります。こちらは直交コイルで回転磁界を作っておき、その中に可動するコイルを入れておくとコイルの角度によって誘導電圧の位相が変るので、位相のずれ角からコイルの角度を検出します。
実物のホールジンバルを見るまではレゾルバに似た仕組みかと想像していましたが、このサイズで実現できそうな気がしません(いや最近の中国の技術なら実現できるのか?)。
コンデンサーマイクっぽいのが磁石なのかな?

なにはともあれ軋み音は消えたのでフタを閉めました。
何となく3台並べて撮影。

左から息子のT10J、私のT6EX、そして今回のT8SGv2Plus

Jumper T8SG V2 Plus購入

今まで飛行機やマルチコプターを操作するのにフタバ T6EXという古い6チャンネルの送信機を使っていました。 6チャンネルしかないと先日書いた様に色々と苦労があるのに加えFASSTというプロトコルなのでこれに対応した受信機があまり売られていないという問題もあります。

今まで使っていたT6EX

という事で技適認証になって国内でも使えると話題のJumperの送信機、T8SG V2 Plusを購入する事にしました。マルチプロトコルなのでフタバのS-FHSSを含めDSMやFrskyなど色々な受信機と接続できるらしいです。さすがにFASSTは対象外ですが。
発注はBanggoodには長いあいだ品切れだったのでAliexpressのショップの中から技適マークありと明記してあるところに昨年11月11日のセール中に¥10,894で注文。しかし暫くしてショップから「発送したけど戻ってきた」という連絡があり、その後何度かやり取りしたけど「送れないから返金にしてくれ」の一点張りです。せっかく11.11のセールなので食い下がったのですが結局時間がもったいなくなり諦めて返金してもらいました。そしてAliexpress内の別のショップを探すと技適を明記していないけど写真には写っていたショップがあったので、ここに¥11,040(少し高くなった)で再注文。しかしこちらも暫くすると「MODE1が無いから返金するか MODE2に変更してくれ」と言ってきました。私はMODE1の人なのですがまあ改造も難しくはないだろうという事でMODE2タイプでOKにしました。

・・・という紆余曲折があり年も明けたところで到着です。

スティックの先が外れていて一瞬焦りましたが箱の中にありました。
本体と付属品一式。

電池BOXは一見すると単三用にみえますが18650サイズのリチウムイオン用です。ですが、バッテリートレイには3pinのXHコネクタが付いていて、2セルリポのバランスコネクタから電源を供給できるので実際はリポを使う方が便利です。なお電源電圧は4.5V~18Vで範囲が広くて何かと安心です。

バッテリートレイは結構広いので大き目のリポも入りそう。

ネットで他の方の画像を見るとキャリングケースや乾電池用の電池BOXが付いていたりしますが、これには付いていませんでした。送られてきた箱のサイズからしてキャリングケースは入らなさそうなので入れ忘れという訳ではなさそうです。

そして気になる技適マーク・・・

すぐに消えてしまいそうな印刷ですが、ちゃんとついています。

では早速息子のS-FHSS受信機との接続を試みます・・・が、バインドできません。
後で自分のやり方が間違っていた事がわかるのですが、当初はS-FHSS受信機3機種でバインドできず焦っておりました。
試しにと、これまた息子のトイドローンSymaX5Cとの接続を試みると正常にバインドできます。またFlyskyの受信機とも接続ができましたがS-FHSSはどれとも接続ができない状態に暫く悩まされました。

以下はおバカな私がおバカな事をやった記録なので読んでも面白くないと思いますが後々の為に書き記しておきます。
S-FHSSの受信機とつながらないのでダメ元ですがファームを上げてみる事にしました。
でもその前に現状のバックアップを取る事にします。この送信機はConfirmボタンを押しながら電源を入れるとPCからUSBメモリに見える様に接続できるので、この方法で中身をPCにコピーしておきます。しかし中に入っていたのはdeviation-t8sg_v2_plus-v5.0.0-e801244.dfuというファイルですが送信機立ち上げ時のメッセージはt8sg_v2-v5.0.0-abc5dcfと違う内容が表示されています。バージョン名も違うし’plus’の有無も違います。どこかのサイトでこの機種T8SG V2 Plusには’plus’の名前がつかないファームを入れろと書いてあったので t8sg_v2-v5.0.0-abc5dcf の方が正しい気がします。
これは謎ですがとりあえずは deviationのサイトから書き込みツールDeviationUploadとファーム最新版の’plus’有りと無しの両方を取ってきました。
そしてDeviationUploadを立上げ、まずは機種名通り’plus’ありのファームを書いてみます。書き込みは無事に完了メッセージまで進みましたが再起動すると画面が真っ黒になってしまいました。まあこれは先の情報から考えて想定内という事で、今度は’plus’なしのファームを書いて再起動します。すると一見正常に立ち上がるのですが飛行機やドローンのアイコンが表示されない上にモデル設定を変更しても保存されないという状態に陥りました。
そこで再びUSBメモリとして接続するとモデルやアイコンが入るべきフォルダが空っぽになっています。よく分かりませんが無いのなら先のバックアップから戻そうとしたら・・・何とPCにバックアップした筈のフォルダからもモデルやアイコンのファイルが消えていました(この原因は未だにわかっていません)。
今落ち着いて考えるとこの時点では、ダウンロードしてきた最新ファームのzipを解凍すればモデルやアイコンのフォルダが現れるので、これらをUSBメモリ(として接続した送信機)に放り込めばよかったのだと思います。
しかしこの時はDeviationUploadツール内の’Full Install’を実行してみました。こちらも一見正常に終了したのですが今度は全く立ち上がらず、その内にUSBメモリとして接続しようにもWindowsから「このデバイスはフォーマットを行う必要がある」という様なメッセージが出て接続されない状態になってしまいました。
もうこうなると何もできません。「終わらせてしまったかもしれない」という不安。唯一の残された手段はメッセージの通りフォーマットを行う事ですがかなり不安です。
恐る恐るフォーマットを実行すると、まずはUSBメモリとして接続できる様になりました。そしてそのメモリー(に見える送信機)にファーム(‘plus’無しの方)のzipを解凍して出てきた一式を放り込みます。
この状態だとまだ電源再投入しても立ち上がらなかったので再びDeviationUploadツールからファームをインストール(Full Installではないファームのみのインストール)をすると正常に立ち上がる様になりました。

結構危ない状態で焦りましたが何とかファームの最新化が完了しました。しかしS-FHSSがバインドできない状態は変わらず・・・。
ですが、結局バインドできないのは私がやり方を間違っていたのが原因でした。バインドする際、本来は「送信機がONの状態で受信機のバインドボタンを押しながら電源を入れる」というのが正解ですが私は受信機の電源を入れてからバインドボタンを長押ししていました。言い訳ですがT6EXにつないでいる受信機は大体この方式なんですよね。またバインドボタン長押しするとそれっぽくLEDが点滅するのでだまされたというのもあります。

何はともあれ正しい方法でやるとバインドできる様になりました。
こうなるとすごくイイです。息子の機体とバインドできますし、今後はDSMとかFlyskyの安い受信器を使う事も出来ます。またTinyドローン等はフライトコントローラーに受信機が内蔵されている場合が多く、これらのプロトコルは大抵
フタバ系ではなくFlyskyやFrskyだったりするので将来的にはこれらとも接続ができそうです。

という事で、まだ実物を飛ばしていませんがHOI-LINK経由でVelociDroneに接続してシミュレーションしています。