HOI-Link:S-BUS→PC接続 完成

前回の続きです。前回は秋月電子のPIC18F14K50搭載基板をブレッドボードに挿して実験していました。今回は完成版として基板に収めるのでDIPパッケージで製作します。

まずKi-cadで回路図を書いて・・・

基板のパターンを作って・・・

片面基板なので表パターン(赤の配線)は実装時に導線で接続します。

CNCで削って基板を作ります。

FRISKケース(何年か前から大きくなった120%Booster版)に入れてみました。

寸法を合わせて作ったので当然ですがピッタリです。

ところでFRISKケースの場合ソケットを使ってマイコンを実装すると高すぎて蓋が閉まらなくなります。なので基板に直付けする前にブートローダーを書き込んでおきます(後からでも書けるけどブレッドボードに載せられる実装前の方がやりやすいので)。前に書いた9V電池書きこみ方式で・・・

006Pの9V電池書き込み方式

そして部品取り付け。
私のコントローラーはフタバのFASST方式ですが息子はFHSS方式なので受信機を取り替えられる様にします。最初はXHコネクタの3ピンを使うつもりでしたがL字型のポストが部品箱にありません。L字型でないとコネクタを刺す方向が縦になっておさまりが悪いのです。
代りにL字のピンヘッダがあったのでこれを基板にとりつけ、ここにRCサーボ等で使う3pinコネクタ(QIとかデュポンコネクタとか呼ぶやつ)で接続します。
但し逆刺しができてしまうのは要注意。

完成の図。

そして当初の目的であったドローンシミュレータ実行中。

参考のためマイコンに書いたファームウェアを載せておきます(例によってソースは試行錯誤の後が残ったままで汚いです)。コンパイルはMPLAB-IDEのバージョン8で行っていますが今となってはかなり古い環境だと思います。最新の環境でビルドできるかどうかは確かめていません。
また本来USB機器には固有のVID,PIDを書き込んでおく必要がありますがこのプログラムには適当な値を書いてあるのでそのまま使われる場合は自己責任でお願いします( 確率は低いですがもしVID,PIDがダブった機器を接続した場合に上手くつながらなくなる可能性あり)。
なおOpenStickLiteで使ったのと同じブートローダーから書き込む仕様でビルドしています。

HOI-Link:S-BUS→PC接続

PC上でドローンシミューレータを動かすとき、今までこんなコントローラーを使っていました。

10年くらい前、ムサシノ模型のモスキートモス号を作った時に練習用に買ったコントローラー

私レベルだとこれで問題ありません。しかし息子によると実物の送信機とは感覚が違うのでレースの練習はやりにくいとの事。
そこでトレーナーコネクタからPCに接続するインターフェースの購入も検討したのですが、その前に手元にあるものでなんとかできないか考えました。

まずトレーナーコネクタというのは送信機の裏についているこういう四角いコネクタ。ここからPWM信号が出ているらしいです。

右上の四角いコネクタがトレーナーポートです。

まずこのコネクタをどこで入手できるかというところから検討しなければなりません。またここから信号を取出せたとしてパルス幅をチャンネル数分カウントし、HIDデバイスとしてUSBに伝える処理も必要で何となく面倒です。

そこでRC受信機が出すS-BUS信号をマイコンで取り込んでUSBに伝えるのなら、OpenStickのファームウェアを少し改造して実現できそうです。しかもシリアル通信なのでパルス幅を数えるよりも精度が良い筈。但し受信機が一つ余分に必要なのと電波が出っぱなしになるのがちょっと気が引けますが、たぶんトレーナーコネクタから取り出す方式でも電波は出ているんではないですかね?(想像ですが)

こんな構造にしようと思います。

受信機はSBUSが出せれば何でもよいので、まずはこれで試してみます。

REDCON FT4X
ケースは外していました。

マイコンは秋月電子で買って放置していたPIC18C14K50搭載ボードです。このマイコンはOpenStickLiteでも採用しているので馴染みがあります。

そしてRAM領域の不足に悩まされましたが何とか動作し始めました。S-BUSは18チャンネル分のデータが含まれていますが私のT6EXで出せる6CHまでしか確認していません。あとで息子のT10Jで10chを試してみようと思います。


T6EXで実験中。ちょっと古いFASST方式ですが現役です。

実物のコントローラーだしケーブルをつなぐ必要もなく操作性は良いです。
何か他の事にも使えそうな気がします・・・今すぐ思いつきませんが・・ラジコン送信機でPCを操作する何か・・・
またPCの画面の前にカメラを置いてVTXで画像を飛ばし、ゴーグルで見ながらシミュレーターをやったらもっとリアルになるかも(かなりオタクだなぁ)。

現状はブレッドボードですが、この後ちゃんとした基板に載せ、ケースにも入れて完成させたいと思います。FRISKのケースあたりが良いかな?

いろいろやりかけ

最近、色んな事がやりかけのままです。

FPV LAPタイマー

前投稿に書いた様に受信機を壊したので、新たにモジュールだけ注文して既に届いています。ところが到着を待っている間に熱が冷めたというか、なんとなくそのままになっています。更にはGithubにこんなのが上がっているのを発見してしまったので、こちらでいいかと思っています。

まだ開けていない・・・

どどーんFPV化

私のどどーんもFPV化しました(※FPVとはドローンに搭載したカメラから送られてくる画像を見ながら飛ばすアレです)。このVTX(※画像の送信機です)は約1年前に購入していたのに無線免許の変更申請が面倒でそのままにしていました、しかし最近意を決して申請し、既に免許が届いています。でFPVしてみたのですが、画面を見ていたらどこを飛んでいるのかわかりません、そのうち畑のどこかに墜落して一時は行方不明になりかけました。機体発見用のブザーは載せていたのですが無理に取付けていたので時々外れており、この肝心な時にも外れて鳴らないという失態。結局FPVの電波を頼りにFOXハンティングして見つけ出しました。その後何度も墜落しているうちにFPVモジュールから煙がでて終わってしまいました。仕方なくFPVモジュールを再発注。

壊れる前の写真

FPV用ゴーグル

いつまでも息子のゴーグルを借りる訳に行かないので自分用を購入しました。本格的な人はFatSharkを使っている様ですが高いので、これにくらべてだいぶ安いEachineのEV100を購入。しかし息子の海女さんゴーグルと比べても視野角が狭く、画像が小さく見えます。ちょっとミスったかも。

Eachine EV100
息子の海女さんゴーグル

ゴーグルを買ったらブリキのロボットが付いてきました。何故か2台も。

オマケのロボット

TWEプロポ

MONOワイヤレスのTWE-Liteをプロポ代りにしてマルチコプターを飛ばす計画、こんなコントローラを作ったけど全く制御できなかった事を前回書きました。

加速度センサーでロール、ピッチを制御しようと思ったけど無理でした。

もうこの方式は止めて普通のスティック式にしようと思います。トイドローンの送信機からジョイスティックを取出して使う計画です。

息子から奪ったトイドローン用送信機

そして基板を作成中。

頂き物のCNC。以前の木製に比べ見ていて安心。

ぽんさんから頂いた旋盤

11.11にAliexpressから四つ爪チャックを購入しています。これでセンター出しを完璧にやれる予定(腕さえあれば)。

ソーラー鹿威し

水量安定化の為こういうのを作りましたが、外が寒くなってきてそのままです。

その他

ほかにも色々手を付けたり計画倒れだったりしていますが、そのうち紹介させてください。

FPV LAPタイマーを作ってみる。

先日のドローンレースのタイムアタックではFPV LAPタイマーなる物を使っていました。これはドローンが出すFPVの電波を (ゲート近くの) 受信機が受けて通過した時間を測定するというもの。スタート前にこんな感じで受信感度を調整します。

これ作れないかなーと考えています。そこで手元にあってあまり使っていない受信機RC832のフタを空けてみました。ここから電界強度を示す信号が取り出せないかと。

中身はこんなの。高周波のフロントエンドはシールドされたモジュールになっています。

表側
裏側

このモジュールはおそらくこちらで紹介されているRX5808というモノだと思います。だとするとRSSIという端子が信号強度を出しているはず。電波を受信しながらテスターで当たってみると確かにその様です。

ならばこの端子から電線を引っ張り出します。

リード線をはんだ付けして・・・
プレートに穴をあけて・・・
電線を引き出しました。

引っ張り出した信号の電圧を測定しながらVTXを近づけたり遠ざけたりすると無信号時は約0.5Vで信号が入ると最大1.5V程度に上がります。アンテナを外した状態でVTXを部屋の端まで離しても信号が1.5Vに上がり切ってしまうので最も近づいた瞬間を検出するのは結構難しそうです。受信機全体をアルミホイルで包んでもまだ強力に受信しています。

当初は微分回路でピークを検出できるかと考えていましたが1.5Vに貼り付いてしまうとこの方法が使えません。そこで立上りと立下りの中間時刻を採用しようと思います。途中で速度が変ったり受信機のすぐ近くに墜落したりすると正確に測れないですが、まずは練習用には使えるかと。

またどっちみち信号が飽和するならとコンパレータでデジタルにしてしまってArduinoに入れます。オペアンプをブレッドボードに乗っけて実験・・・

まだ試行錯誤中の回路

まずはどんな感じで受信できるか試す為、 庭に持ち出して信号の立上りと立下りで割り込みが掛かった時刻(millis()関数の結果)をSerial.printでPCに表示させてみます。

・・・が、庭程度の広さだと一番離した位置でも電波を受信してしまいまうのでもっと広いところで試す必要があります。また近づいたときでも結構揺れがあり、H/Lを細かく繰り返していて判定が難しそうです。
本当は広いところでドローンが通過する時の波形をオシロで取りたいのですが、野外で使えるオシロを持っていません。
当面はソフト側で一定時間以上信号アリが続いたらドローンが通過したと判断する方式でやってみます。

・・・という事で練習場に持っていきました。ところが上手く受信できません。
調べたところRC832から引き出した信号線を間違って5V電源につないでいました。マズイ!
これくらいでは壊れないだろうと思いましたが・・・その後RSSI信号が出てこないし画像も受信できていません。
やっちまいました。

この後どうしましょう。折角ここまでやったのに止めたくないし、でもわざわざ受信機を買うか?とも思うし。。。
結局RX5808モジュール単体をAliexpressに発注しました。送料込みで¥1070円、あーもったいない。


鹿児島県出水市ドローンレース

息子が初めてドローンレースに出るというので鹿児島県出水市まで連れて行きました。 出水市は鹿児島県ですが熊本県とは隣接しており、最近津奈木まで高速道路が開通したので約2時間の道のりです。 この陸上競技場でU199クラスのドローンレースが開催されます。

到着すると既に皆さん練習飛行をされていますが、これまで見ていた息子の飛行と比べると次元が違う速さで目がついていきません。いくら初出場とはいえレベルが違うのは歴然としています。でも練習だと思ってやるしかありません。

最初は3台ずつの模擬レース、その後タイムアタックですが、やはり速度の差は圧倒的です。それでも何とか落とさずに2分間飛び続けました。

控室はこんな感じ。ベテランの方々に色々な事を親切に教えて頂きました。機体が振動する症状への対処方法や、墜落して裏返しになった時に片側だけプロペラを逆転させて元に戻す方法等、知らなかった事を色々と。。。

また息子は3セルのリポバッテリーで飛ばしていたのですが皆さん4セルを使われている様です。そこで「一回これでやってみろ」と4セルリポを渡されました。コイツ、いきなり4セルなんか使って大丈夫かいな?とみていたら本人は「これ、イイ!」と言って飛ばしています。確かに見るからに早くなっているし音も全く違います。 結局この4セルリポを頂いてしまいました(すみません。ありがとうございました)。

ところでこのレースは出水市の大産業祭というイベントの一環なので子供たちにも見てもらうという意図があるのだと思われ、模擬レースの順番が結構な周期で回ってきます。これが息子には素晴らしく練習になった様です。飛ばしたらバッテリが冷えるのを待ってすぐに充電をします。

昼休みには出場者にお弁当を頂けました。私も出場者ではないのに頂いてしまいました(ごちそうさまです)。

最後のタイムアタックに息子は4セルリポで挑戦。明らかにタイムが縮まっています。結構いいタイムで回った周があったのですが最後にゲートをくぐり損なって無効に。勿体ない。

参加賞として (有)エアクラフトさんからHYPERIONのリポ保管バッグと、参加者のTed Tさんが作られているFPVアンテナを頂きました。

帰宅後、出水ドローンクラブのサイトに順位が公表されていました。息子は8人中5位だそうです。初出場にしては頑張ったのではないかと思います。

という事で楽しい一日を過ごさせていただきました。運営をされた方々、色々教えてくださった参加者の方々、ありがとうございました。来年も開催されたら是非参加させていただきたいと思います。
息子だけでなく今度は自分も・・おい大丈夫か?

どどーんはじめました。~その5~

FULL SPEED製F411miniF4というフライトコントローラにSBUS受信機を接続する時にハマったので覚え書き。

先ずはいきさつから・・・
息子が11月にU199ドローンレースに出るのだといって練習をしています。
しかし先日、モーターが1個故障したのをきっかけに4in1 ESC基板が煙を吐いて壊れてしまいました。恐らくモーター交換の際にハンダ付けをミスったのではないかと思っています。

いずれにしてもこのままではレースには出られないのでAliexpressからESCと、予備を兼ねてフライトコントローラもセットで購入しました。フライトコントローラはFULL SPEEDというメーカーのF411という物です。
結構なお値段がしますが小遣いをほとんど注ぎこんでいるようです

そして到着したのでドローンに載せ換えました。が、RC受信機とフライトコントローラーの接続が上手くいきません。
受信機とはS-BUSで接続しており、Aliexpressのページに書かれているこの図に従っています・・・

色々試しましたが接続できません。
そこでFULL SPEEDで検索したところ下の情報が・・・


要は普通のSBUS信号を使う時は基板の裏側の端子に接続しろという事です。
そういえば以前SBUSの信号をArduinoで解読した時、SBUSは普通のUARTと論理が逆なのでインバータを入れた記憶があります。どうやらFULL SPEED製のレシーバは最初から論理を逆転(本来のSBUSとは逆で普通のUARTと同じに)してあってこの場合は基板の表側に接続し、本来のSBUS信号だと裏側に接続するみたいです。

という事で裏側のSUBS端子に接続したところ使える様になりました。
・・・という事で覚え書きでした。

TWE-Liteプロポ化計画~その2~

前回は受信機を作ったところまで書きました。あれから2カ月も過ぎてしまいましたが、Maker Faireも終わったことだし送信機に取り掛かります。

どんな形にしようかと考えた結果、こういうラジコンカーっぽいコントローラになりました。スロットルは引き金、ヨー(ラダー)がホイール、そしてピッチとロールは加速度センサーでコントローラの傾きを検出します。
正規のプロポではなくTWE-Liteなので自由なコントローラを試せるのです。

TWEpropo2_1

送信機とクワッドコプター

電源は2セルのLi-po。レギュレータで3.3Vに落としてTWE-Liteに入れています。
TWEpropo2_2

・・・実はこの機体とコントローラは先日のMFT2018で息子のブースを間借りして展示しました(自分のブースの展示物とは少し毛色が違ったので)。しかしまだ一度も飛ばしていません。というのも機体は開催1週間前に宅配便で発送し、そのあとで送信機を作ったので一度も飛ばす機会が無かったのです。MFT会場で初飛行する訳にもいかない(まず一発では飛ばないし)ので今回が初めてとなります。

で・・・やっと飛ばしてみましたが、ものすごく難しいです。コントローラの傾きでロール・ピッチを制御するのが敏感すぎてまともに飛び上がれません。フライトコントローラの設定で感度を下げたり色々やってみようと思います。

上手くいったらまた報告します。

MFT2018説明資料

MFT2018で説明に使った資料です。

モーションシミュレータ
MotionSim説明1MotionSim説明2

 

MONO WIRELESSのTWE-Liteを使用したマルチコプター(こちらは息子のブースにおいてもらってました)。

MotionSim説明2

 

その他、ヨットシミュレータはここ(別ページ)
またOpenStickのページはここです。

TWE-Liteプロポ化計画

久々にMONOワイヤレスのページを見たらTWE-Liteの電波強力版である”RED”というのが出ていました。最大3Kmぐらい届くとの事。これなら空ものラジコンでも全く問題なく飛ばせそうです(実際は私が飛ばすものなんて100m程しか離れないんですけどね)。
そこでTWE-Liteを使ってラジコンプロポの代りにならないか試してみたくなりました。

なおTWE-Liteとは、当初は東京コスモス電機でしたが今はそこから分離したMONOワイヤレスが出している無線モジュールです。

こんなの・・・

TWEpropo_1

TWE-Lite(下) とTWE-Lite DIP(上)

TWE-Liteは内蔵マイコンのプログラムを書き換える事ができるので、MONOワイヤレス社からは色々な用途のプログラムをダウンロードできる様になっています。この中にはラジコン用のアプリもあるのですが、ラジコンカーを前提にされたもので、そのままで飛行機やマルチコプターを制御するのには向きません。

これを何とかして受信側TWE-LiteからS-BUS信号を出せれば小さなマルチコプターぐらい飛ばせるんじゃないかと考えています。するとフタバとかの立派なプロポを使わなくても済むし、またフライトヨークやラダーペダルで操縦したり、ちょっと夢が広がるじゃないですか

で、試してみる事にします。でもいきなり高出力版のREDを買うのもなんなので、まずは手持ちの通常出力版(こちらはBLUEという名前になったらしい)で試します。
まず送信側のTWE-Liteにはボリューム4個+スイッチ4個を付けて状態を発信します。この部分は「OpenStick無線化実験」の時のプログラムをほぼ流用です。
これを受けて受信側TWE-LiteがS-BUS信号を生成してフライトコントローラ(F3EVO)に入れるという計画です。

という事で早速プログラムを書いてデバッグです。受信側TWE-Liteが出すS-BUS信号を先日作成したS-BUS信号解読機(ArduinoMEGA256)に入力してデバッグを開始したのですが・・・受信機のデバッグ以前にS-BUS解読機側のスケッチがミスっていたのを発見。修正しました。

~~修正版S-BUS解読スケッチ(11bitデータに並び替える部分のミス修正)~~

int count;
long interval;
void setup() {
 Serial.begin(115200); // Terminal
 Serial1.begin(100000,SERIAL_8E2); // S-BUS
 count=0;
}

void loop() {
 int data[26];
 int val[19];
 int i;
 if (Serial1.available() > 0) {
 data[count]=Serial1.read();
 interval=millis();
 count++;
 }
 if ((interval+4 < millis()) && (0 < count) ) {
  count=0;

  val[0] =((data[1] & 0xff)<<0) + ((data[2] & 0x07)<<8);
  val[1] =((data[2] & 0xf8)>>3) + ((data[3] & 0x3f)<<5);
  val[2] =((data[3] & 0xc0)>>6) + ((data[4] & 0xff)<<2) + ((data[5] & 0x01)<<10);
  val[3] =((data[5] & 0xfe)>>1) + ((data[6] & 0x0f)<<7);
  val[4] =((data[6] & 0xf0)>>4) + ((data[7] & 0x7f)<<4);
  val[5] =((data[7] & 0x80)>>7) + ((data[8] & 0xff)<<1) + ((data[9] & 0x03) <<9);
  val[6] =((data[9] & 0xfc)>>2) + ((data[10] & 0x1f)<<6);
  val[7] =((data[10] & 0xe0)>>5) + ((data[11] & 0xff)<<3);
  val[8] =((data[12] & 0xff)<<0) + ((data[13] & 0x07)<<8);
  val[9] =((data[13] & 0xf8)>>3) + ((data[14] & 0x3f)<<5);
  val[10]=((data[14] & 0xc0)>>6) + ((data[15] & 0xff)<<2) + ((data[16] & 0x01)<<10);
  val[11]=((data[16] & 0xfe)>>1) + ((data[17] & 0x0f)<<7);
  val[12]=((data[17] & 0xf0)>>4) + ((data[18] & 0x7f)<<4);
  val[13]=((data[18] & 0x80)>>7) + ((data[19] & 0xff)<<1) + ((data[20] & 0x03) <<9);
  val[14]=((data[20] & 0xfc)>>2) + ((data[21] & 0x1f)<<6);
  val[15]=((data[21] & 0xe0)>>5) + ((data[22] & 0xff)<<3);
  val[16] = (data[23] & 0x1) ? 0x7ff : 0 ;
  val[17] = (data[23] & 0x2) ? 0x7ff : 0 ;
  val[18] = (data[23] & 0x8) ? 0x7ff : 0 ; // Failsafe
  for (i=0 ; i<19; i++ ) {
   Serial.print(val[i],DEC);
   Serial.print(F(" "));
  }
  Serial.print(F("\n"));
 }
}

 

大体動作がOKになったところでフライトコントローラ’F3EVO’に接続してみます。
フライトコントローラはUSBでPCに接続しておき、設定ソフト ’CleanFlight’ の ’Receiver‘ タブ使うと送信機の操作に合わせて信号が変化するのが確認できました。

CleanFlight

CleanFlightで受信機の信号をモニター中。

 

ここまではTWE-LiteのDIPタイプをブレッドボードに載せて試していました。
大体イケてるっぽいので次は表面実装版のTWE-Liteモジュールを使い、実際に機体に載せる基板を作ります。

いつもの様にKicadでパターンを書いてガーバーデータを出力して・・・

TWEpropo-Rxガーバー

Kicadで出力したパターン

 

でもウチのCNCの精度でこのパターンそのままでは削れる気がしません。そこでガーバーデータの座標値をテキストエディタで抜き出してJw-cadに読み込ませ、これを下書きにしてカットする部分を手書きしていきました。
こうしてカットラインの間隔を極力広いパターンに作り変えます。

TWEpropo-Rx Cutpattern

ピンク色がガーバーから抜き出した下書き。
黒線が手書きのカットライン。

そして切削。

TWEropo-Rx

切削完了。

と、軽く書きましたが何だかんだで失敗しながら3回切削しました。
チップ抵抗、チップコンデンサを1608サイズにしたのも失敗で、ルーペを見て汗をかきながらハンダ付けを行いました。
そして実装したのがこれ。

TWEpropo

クワッドコプターと接続したところ。
まだ受信機は固定していません。

次は送信機を作っていきたいと思います。

どどーんはじめました。~その4~

先日作成したマルチコプターは重量が50グラム程度なので室内でも飛ばせます。
しかし何しろ初心者につき、あちこちにぶつけてしまうのでプロペラガードを取付ける事にしました。

まずデータを作って・・・

PropellerGuard

プロペラガード

4つプリントして取付けました。

PropellerGuard

プロペラガード取付け完了。

壁に軽く当たってもバウンドするのでダメージがありません。
安心して操縦の練習ができます。