フライトコントローラーを自作してみる。~その16~ JDLで飛ばす。

自作フライトコントローラーの目標の一つにレースで飛ばすというのがありました。
そこで今回 JDL(ジャパン・ドローン・リーグ) 2021年Round4の宮崎戦に息子と共に参加してきました。
実は昨年の宮崎戦にも参加したのですが結果はボロボロで、今回は少しはマシに飛ばせるでしょうか? なお息子は今回本気で臨んでいます。

こんなコースです。

通常JDLは土・日の二日間あり、初日は練習日、二日目が実際のレースとなります。しかし今回は土曜日が雨(雷も!)のため中止となり、日曜日のみの開催となりました。実は中止を知らず早起きして宮崎まで行ってしまったので、初日は宮崎ドローンクラブSkyDRONEの方々と一緒に練習させていただきました。

なお私が飛ばす機体はこれ。
これTyro99というかなり安物で普通レースに使う人は見かけない機体をベースに、上側だけ載せ替えて軽量化したもので、元は息子のお古なのです。

ここに自作フライトコントローラー’HOIHOI-FC’を載せています。
がんばってくれよー(というか自分が操縦頑張らにゃならんのですが)。

緑の基板がHOIHO-FC

・・・そして日曜日。
時間を詰めて朝イチに一回だけ練習フライトが設けられる事になりました。

という事で早々に(一度きりの)練習フライトの順番が回ってきます。
スタート位置に機体を並べ、ゴーグルをつけて他の選手と3人で操縦席に座ります。そしてスタート・・・と思ったら私の機体はモーターだけブンブン回って離陸しません。なんと、プロペラ2枚を逆に取付けていたのです。やってもうた~!
他の選手はフライトしているのでコースに入る訳にはいかず、一度きりの練習フライトは飛べずに終わりです。

あとはぶっつけ本番で2回の予選フライトを飛ぶのみ。

そして予選フライト1回目。機体をセットした時に少しモーターを回して確認したので今回はちゃんと離陸しました。
操縦席の後ろで、以前我が家の工作室に来られた事のあるNONSAYAさん(井上さん)がアドバイスして頂けたので落ち着いて飛ばすことができました。
でもシミュレーターではもっとスロットルを開けれたんですがねー。実機だと辛うじて落ちずに飛んでいる程度です。結局既定の時間内にコースを2周して終了。
でもまあ、自作フライトコントローラーでJDLを飛ぶという目標は達成したので良しとしましょう。

私が参加しているオープンクラスは多くの人が規定時間内にコースを3周回ります。そして4周できれば予選通過というのが今回の目安になりそうです。
私としては次は3周を目指さねば(最初っから4周とは言わない)。

そして予選フライト2回目。
今度は先程よりもスロットルを開け気味で飛んだのですが、2周目の最終ゲート直前(ここって直角に曲がる初心者泣かせのポイントなのです)でフラッグに接触して墜落。リスタートして最終ゲートを通過したのですが約1.5秒足りず結局2周で終了です。

以上で私のJDL2021 Round4は終了しました。

息子はというと、9人が予選を通過できる内の8位で何とか準決勝に進んだ様です。
そして準決勝も他の選手がミスってくれたおかげで決勝に進み、この時点でオープンクラスからエキスパートクラスに昇格決定!
決勝戦ではもう飛ばすしかないという事で何か吹っ切れた様にスロットルを開けて2周目の時点では先頭を飛んでいたのですが、煙を吐いた機体が騒ぎになった(その瞬間息子の機体かと思ったのですが別の選手の機体でした)のに動揺してクラッシュ、何とかリスタートしたのですが結果は3位で終了です。

3位なので表彰状をもらっています。

結果として・・・
・自作フライトコントローラーでレースを飛べた。
・息子はエキスパートクラスに昇格した。
という事で収穫ありとしましょう。


Prusa i1を復活させてTPUをプリントする

ドローンパーツを3DプリントするのにTPUのフィラメントを使いたくなりました。TPUというのはゴムっぽい素材で柔軟性がある為、ぶつけても壊れにくく、バンパーの様にショックを吸収してくれるのです。

現在我が家の3Dプリンターは2号機が稼働しておりABS素材を調子よくプリントしています。

3Dプリンター2号機

しかしこれ、ボーデンタイプなのでエクストルーダーからホットエンドまでパイプの中をフィラメントが通っていきます。この場合TPUの様に伸縮性があると上手くプリントできる気がしません。
いや、世の中ではボーデンタイプでTPUを出力されている方も居られる様なので試してみるのもアリなのですが、それよりも以前使っていたPrusa Mendel(今はi3が主流ですがこれは初期型だからi1なのです)を使う方が可能性がありそうです。

という事で引っ張り出してきます。
まだバラしてなくてよかった。

Prusa Mendel (MakerGearのキット)

コントローラーのArduinoMegaは外してあったので取り付け直し、ファームウェアとしてMarlinを書き込みました(この辺りは勉強を兼ねて息子にやらせています)。

そしてプリントしてみると・・・
上がTPU、下は2号機を使ってABSで出したもの。出したデータは若干異なりますが、TPUの方は形がいびつで表面もデコボコのゴーヤみたいな仕上がりです。

で、色々条件を変えて試しました。

試行錯誤の後・・・

そして分かってきたのは、速度をかなり落とす必要がある事。最初は30mm/Sでプリントしていましたが20mm/Sに落とすとまあまあ。10mm/Sだとだいぶマシになります。しかし全部10mm/Sだとものすごく遅いので外側だけ10mm/Sで内部は15mm/Sあたりに設定しました。
これで全体の形はまあ納得がいくプリントになったのですが、やっぱりまだ表面がゴーヤ肌で、温度を変えてもある程度以上改善しないんですよね。

ひとつ気になったのはノズルを少し浮かせて空中に樹脂を出した時、出口で縮れた様になって真っすぐ出ないので、これがゴーヤ肌になる原因かと・・・
ならばとノズルの掃除をしてみたけど改善しません(上手く掃除できていなかったのかもしれない)。
そこで2号機を2ヘッド化してやろうと入手していたJ-Headのホットエンドがあったので、これに交換したところ縮れ麵だった樹脂がかほぼ真っすぐになり、プリントするとゴーヤ肌だったのがほぼ納得のいく積層跡となりました。

旧ホットエンド。
MakerGear製
J-Headに交換してプリント中。

余談ですがガラスを止めているのは「バチクリップ」という名前のクリップです。良くある黒くて針金を折りたためる様なタイプのクリップよりも薄型なので邪魔になりにくくて気に入っています。

という事でTPUが使える様になったので色々とパーツを出力中です。

2号機xABSには負けるけど
まあ納得できる仕上がりになった。

MP1584EN その3

FCをもう一枚組み立てたらDCDCコンバーターが動作しなかった。
一通り調べて原因が分からなかったのでIC(MP1584EN)を外してみたら・・・

裏面のパッドが無いよー!!
ハズレを引いたか(左側)?

表側
左がハズレで右は正常。

基板から外す時に傷がついてますがマーキングされた文字は同じ。
10個買った中の1個だけこの状態でした。

で、正常品と取り替えてみたらちゃんと動作しました。

フライトコントローラーを自作してみる。~その15~ 基板データ公開

フライトコントローラーを作ってみませんか~?
HOIHOI-FC F411 Rev2基板のKi-cadデータとガーバーを公開します。

基板データ

Ki-cadデータ→HOIHOIFCF411R2.zip
ガーバーデータ→HOIHOIFCF411R2_gerber20210314.zip
※Ki-cadはVer5.1.9で作成しました。
 ライブラリのキャッシュファイルも含んでいるので大丈夫なつもりですが、
 もし何か不足していたら連絡ください。
※そのままの形で基板を発注するならガーバーデーターだけで大丈夫です。

部品表

部品表→HOIHOIFCF411Rev2BOM.ods
※参考に私の購入先も記載しています。

部品配置図

部品配置図(表)→HOIHOIFCF411R2PlaceFront.png
部品配置図(裏)→ HOIHOIFCF411R2PlaceBack.png

基板データの使用に関する表示

今までこのサイトの掲載物に著作権的な表示をしてこなかったのですが、利用しやすくする為、きちんと表示したいと思います。
どういう形式が良いか考えた結果、クリエイティブコモンズ CC BYとして公開するのが良かろうという結論になりました。詳細はこちらを参照ください。

クリエイティブ・コモンズ・ライセンス
上記基板パターンはクリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供しています。

Betaflightファームウェア

ファーム→ betaflight_4.2.8_HOIHOIF411R2_101738d8e.zip

FCを作るには

もっと詳細に書くべきですが取り合えず簡単にいうと・・・
まず基板メーカーにガーバーデーターを送って発注します。この時メタルマスク(裏/表)も一緒に作成します(私はPCBGOGOに発注しました)。
並行して部品表に記載した部品を入手します。
メタルマスクを使って基板にクリームハンダを塗ります。
配置図に従って部品を載せ、リフローすれば完成!
あとはBetaflightConfiguratorを使ってファームを書き込んで使います。
※細かい所は過去に書いたブログを参照願います。

フライトコントローラーを自作してみる。~その13~ Rev2基板動作確認

いよいよ電源を入れて動作を確認します。
まずは実験用電源からUSBコネクタへ、電流制限しながら5Vを印可・・・問題なし。

ではBOOTボタンを押しながらUSBケーブルでPCと接続・・・BetaflightConfiguratorを立ち上げておくとDFUモードに入る筈ですが反応ありません。
調べていくとR1とC7が入替わって取り付けていることに気づきました。
パターン上の近い場所にあったので間違った様です。リセットかかりっぱなしだしクロックも発振しないし、こりゃ動作しませんよね。

R1とC7が入替っていた。動く訳ないっす。

R1とC7を正しく取り付けなおすとDFUモードに入る様になったのでBetaflightのファームウェアを書き込んでリブート。すると今度はBOOTボタンを押していなくてもDFUモードに入る様になってしまいました。
原因はBOOT0端子のプルダウン抵抗R11のはんだ付け不良で、クリームハンダの乗りが少なかった様です。

ここまでで安定に動作モードに入る様になり、BetaflightConfiguratorからも認識されましたが、今度はジャイロ(加速度機能も)が認識されません。基板を傾けても画面上の機体は静止したままなのです。
ここは色々悩んだのですが結局はこれもジャイロの接続不良でMPU-6000を取り付け直したら正常動作となりました。

どうも今回ははんだ付け不良が多いなぁ。Rev1基板の時はもっとリードが細かいジャイロIC(MPU-6500)でも接続不良は無かったのに。。。
やっぱり固まったクリームハンダを溶かして使ったのが原因でしょうか?

まあナンダカンダで正常動作する様になりました。OSDも正常です。
また手持ち数が少ないので取り付けていなかったフラッシュメモリ(BlackBOX用)も取付けてログが取れる様にもなりました。

では5インチ機に積んでホバーリングテスト

特に問題なく飛びます。この後FPVでも問題ありませんでした。

という事でFC完成とします。
この後は処理能力の高いSTM32F405やSTM32F722を試そうと思ったのですが、昨今の半導体不足の為か入手できません。Aliexpressでは何度もキャンセル食らうし、RSやチップワンストップも入荷未定になっています。

STM32F411ならあと数個持っているのですが出来れば早いマイコンで試したいですよね。

フライトコントローラーを自作してみる。~その11~ Rev2基板

ブログを遡って読むと、ほぼ1年前からフライトコントローラー(以下FC)を作り始めていました。当初はFCを何度も壊すので自作して安く済まそうという魂胆でしたが、だんだんとFCを作る事自体が目的になっている気がします。

前回はRev1基板を使って3インチ機でFPVしたところまで書きました。その後5インチ機でも問題なく飛行できる事を確認しています(まあ3インチで飛べりゃ5インチでも飛べますよね)。

HOIHOIFC-F411 Rev1
ツギハギだらけです。パターンも何か無駄に遠回りしているところがあるし

という事で、Rev1基板の不具合修正や改良を加えたRev2基板を作っていきます。

まずはRev1基板の不具合点を振り返ると・・・

・USB信号のプラスとマイナスが入れ替わっていた。
・ブザー駆動トランジスタのピン配置を間違っていた。
・ブザー駆動トランジスタのベース100KΩという大きな抵抗値になっていた。
・DCDCコンバータ周りの配線が長すぎて電圧が揺れていた。
・取付穴位置を30mm角ジャストにしていた(一般的なサイズは30mmジャストではなく30.5mmでした)

当然ながらこれらは修正します。

BEC(DCDCコンバータ)について

バッテリー電圧から5Vを作り出すDCDCコンバーターICについて、前回はMonolithicPower社MP2359を使っていました。これは出力1.2A、最大入力24Vでしたが6セルバッテリーにすると耐圧が足りないのでMP1584に変更します。これだと出力3A、最大入力28Vです。
実際にはショットキーダイオードの3A品はサイズが大きいので2A品を使う事にして定格2A(瞬間的には3Aいける)BECです。
事前にMP1584を試した話はこの辺りに書きました。

左がMP2359,右がMP1584。
MP1584にするとだいぶ大きくなるなぁ。

DFUモード安定化

前回DFUモードに入りにくい(不安定)という問題があり、BOOT0に加えてBOOT1端子もLに落としたりしてみましたが今ひとつすっきりしていませんでした。
でも今回原因が分かった気がします。
STM32マイコンはBOOT1端子=H状態で起動するとブートローダーが立上るのですが、この時USARTやCAN等、幾つかのシリアルポートに信号が来ているかどうかをチェックし、その後USBを見に行きます。 この時USART端子に信号が入っているとその端子からプログラム書き込み信号を待つ様になってしまいます。
STM32F411の場合、USART1と3がブートローダー端子として動作します。そしてRev1基板ではUSART1にSBUS受信機を接続していました。
恐らくこれが邪魔してUSBを受け付ける状態まで進めなかったのだと思います。なのでRev2基板ではSBUS受信をUSART6に変更します。
そういえば市販FCもUSART6にSBUSを入るのが多いと思ったら恐らくこの理由なんだと思います。

ジャイロ

前回InvenSenseMPU6500を使っていました。
どうやらこれだと感度が高すぎて振動対策をしっかりする必要があるらしく、市販FCは大抵MPU6000を使っています。
という事でRev2もMPU6000に変更します。
またMPU6500はリードが0.4mmピッチに対しMPU6000は0.5mmピッチなので実装し易くなる事も期待しています。

左がMPU6500、右がMPU6000。
これも見比べると差が大きい。

マイコン本体

これまで最初に入手した評価基板に合わせてSTM32F411を使ってきたので今回もこのマイコンで進めます。
でもよりクロック周波数が高いマイコンにSTM32F405があり、ピン配置を調べたら1か所だけ変更すれば載せ替え出来そうなので後で試せる様に作っておきます。更にSTM32F722にも同じパッケージの製品があり、これもピン配置がほぼ同じなので使えるかもしれません(でも値段が高いんですよね)。

モーターの数

Rev1では基本の4本に加え予備として2本のモーター出力端子を持っていました。これでヘキサコプターを作れる筈なのです。
そしてRev2では更に2本追加し計8本にするので、その内オクタコプターを試してみたいと思います。

その他

発振子を小型の物に変えたり部品の配置を変更したり、結局かなりの変更量となりました。

最終的な回路図はこれ

そして基板パターン設計(これが一番大変だった)。

部品配置を変更したのでちょっと余裕ができた。
やっぱり基板設計は最初の部品配置が大事ですねー。

基板発注

基板はPCBGOGOに発注します。約500円の格安基板で作る場合、FusionPCBだとソルダーレジストの最小値が0.4mmなのでマイコンやジャイロのピン間隔(0.5mm)に対しては無理があるのです。
これに対しPCBGOGOは0.1mmなので多分大丈夫。(ただし送料が若干高い気がするし、また面付けすると高くなるので用途によって使い分けてます)

つづく・・・

コンデンサーマイク大量

前回に続き、共立エレショップで購入したパーツの話です。
デジットが移転(で一時期閉める)という事で色々なパーツが放出されているのです(もうだいぶ終わった感じですが)。
そこでコンデンサーマイクが200個で¥200円というのがあり、先日の超音波振動子と一緒にポチっていました。
でも冷静に考えるとマイクを使った工作って殆どしないので、これで今後まず一生コンデンサーマイクを買う事は無いと思います。

そして実物。シリコン製のカバーみたいなのを被っています。
電極が3本出ているけどこれも導電ゴムっぽい柔らかい素材なのでハンダ付けはできそうにありません。

何はともあれ動作させ見たいと思いますが、あまり情報がないんですよね。
とりあえずカバーを外してみるとこんな感じ。同心円上に電極があり、外から見ると端子は3極に見えましたが実際には2極です。

ちょっと細かくてやりずらいですが何とかハンダ付けして・・・

とりあえず外側がGND,中心が信号および電源と予想して動作させてみました(もし壊してもあと199個もあるし)。

出力波形。
ちゃんと音を拾っています。

そのままPCのライン入力にいれるとちょっとレベルが低めですが動作しました。オペアンプで少しレベルを上げれば丁度良くなると思います。

もう一度ネットで調べると、どうもホシデン製のこれっぽいですね。
・・・という事で次にマイクを使う事があれば(あるのか?)活用しようと思います。

超音波振動子

みら太さん共立エレショップの超音波振動子(特価¥1000)の事をツィートされており、見てたら自分も欲しくなったのでポチりました。

ドライブ基板とはこんな感じで接続します。

ランジュバン型ボルト締め超音波振動子というもので、ググってみると圧電素子をボルトで締め付ける事で壊れにくくしているらしいです。なので大きなナットがついているネジは振動子を固定する為のものではなく、付属の説明書にも緩めてはいけないと書かれています。

ではどうやって固定するのでしょう?またまたググると超音波洗浄機の例では洗浄槽に接着しているとの記載を見つけました。方法は追々考えるとして、まずは実験的にやってみます。
振動子を上向きにするとぴったり合う穴をJw-cadで書いて・・・

MDFの端材をレーザーで切りました。

この穴に振動子をはめ込んで適当な梱包材の上に乗せてみます。

振動面には細かい金網がねじ止めされており、説明書によるとここに水を垂らせば霧が発生すると書かれています。
ではやってみます。

確かに霧が発生しますね。なおジリジリという音は金網が振動している様です。

金網を外すとジリジリ音はなくなり、あまり霧は出ません。

次に超音波洗浄を試してみます。
金網を外した面に両面テープを貼り・・・

洗浄槽としてタッパーを貼り付けます。
両面テープでいくらかは超音波が遮断されるかもしれませんが、まあやってみましょう。
ところで超音波洗浄としてまず思いつくのは眼鏡ですよね。入れてみました。

その他、ピンセットやネジや・・・

適当なものをぶち込んで・・・

綺麗になったのかというと良くわかりません。
振動でネジが移動していくのでそれなりに超音波が伝わっているのだと思いますが。

ところで説明書に周波数等は不明と書かれているので測ってみます。
両面テープに磁石をくっつけて適当なコイルで検出しようとしましたが何も現れません。コイルの巻き数が少ない気が・・・

そこでクリスタルイヤホンをマイク代わりにしてオシロにつなぐと・・・

こんな波形が出てきました。
周波数は33.5KHz。
なんか中途半端な気もしますが周波数精度にこだわる感じでもないのでこんなものなのでしょう。

という事で、もう少し色々と試してみようと思います。

MP1584,MP1854,MP8514???

自分で書いた記事を読み返したらスイッチングレギュレーターICのMP1584の事をMP1854と書いたりMP8514と書いたりメチャクチャになっていました。
この時なんかはタイトルからして間違ったまま最後までMP1854で通していて、あまりにヒドイので本日修正しました。

正しくはMP1584です(もう間違えない様自分に言い聞かせる)。
メーカーサイトはここ→https://www.monolithicpower.com/jp/mp1584.html

しかしブログをもっと読み返したらいろんなのが出てくるんだろうな。

RotorHazard

NonsayaDroneWorksにRotorHazardの記事が載っていました。

私はドローンレースを主催する事はありませんが、練習の時にはラップタイムを計測したくて、この記事と同じ様にARマーカーを試したりしましたがやっぱり時々読み取りミスが発生するんですよね。また、かつてこんな記事を書いたこともありましたがその後まったく手を付けていません。
そこでこのRotorHazardなるラップタイマーを試してみようと思います。

RotorHazardはRX5808レシーバーが受信したFPV信号強度をArduinoを経由してRasberry Pi(以下ラズパイ)に渡します。ラスパイはWebサーバーとして動作し、PCのブラウザーで接続して操作できます。
RX5808とArduinoは受信するチャンネル数だけ必要なので最終的には3セット欲しいところですが、取り合えず手元にある1セット分で、またラズパイ3がおすすめらしいですが無いので手持ちのラスパイ2でやってみます。

最初RotorHazardのリリース版(RotorHazard-2.2.0)だとエラーが出たのでRotorHazard-2.3.0-beta2で実行できました。ライブラリバージョンとのからみっぽいです。
まあ何はともあれ上手く動作している様なのでAliexpressにRX5808モジュールを追加注文して2チャンネルにしてみました。
なおシールドしておかないと離れていても電波を受信してしまうのでお菓子の空き缶に収めています。

そして庭でTinyレース。庭だとどうしても計測ゲート以外を飛んでいる時の電波を拾いやすくなるのでコース設定に工夫が必要です。

こうなると野外に出て3インチや5インチの機体で試したくなります。その為にはちゃんとした基板とケースに収めたいと思います。
基板はRotorHazardのサイトにガーバーデータが掲載されているのでこのまま作ればよいと思ったのですが・・・

どうやら最小のビアサイズが小さすぎて約500円の激安仕様では作れず、見積もり価格が3000円を超えてしまいます。また基板の元データが無くてガーバーのみなので簡単には修正できないのです。

ならば新たに基板パターンを作ってみようと思った訳です。
日本では大抵3チャンネルで足りるしArduinoNANOを載せるのも勿体ないので直接ATmega328のフラットパッケージ版を載せたらコンパクトにできそうです。
また屋外のインターネットがつながらない場所で使うならリアルタイムクロックも搭載すると便利です(ラズパイ標準ではリアルタイムクロックを持っていないので電源を切ると時計がリセットされるのです)。

そして10枚500円仕様で作った基板がこれ。 。

マイコンの上を跨いで受信モジュールを実装する立体構造。

今回メタルマスクは注文せず、紙をレーザーカットしたマスクでハンダペーストを塗ってみました。ちょっと塗り辛いけど何とかなります。もしかすると塗り辛いのはハンダペーストが乾き気味だったせいかもしれません。
ただ何枚も塗るだけの耐久性はありません。

メタルだとそうでもないのに紙だと何だか汚く見える。

そしてリフロー

やっぱりリフロー炉作って良かったですねー。
表面実装できると何かと便利です。

リフローの結果。
一か所抵抗が立ち上がっています。これがマンハッタン現象ってやつですかね。
ハンダペーストの塗りが薄かったのかも。ここはコテで修正しました。

そしてブートローダー書込み×3回。

基板の裏に書き込み用パッドを設けているのです。

次にファームウェア書き込み×3回。

一旦ファームを書き込めば以降のアップグレードはラスパイからできる仕様になっています。(試してませんが)

ここでミスに気づきます。RX5808のピン並びが逆になっていて裏返しでしか実装できません。ま、とりあえず裏返しに実装します。

ラスパイに載せて動作確認OK!
ラスパイはメルカリで格安だったラズパイ3にアップグレードしています。

ボタン電池が載っているモジュールがリアルタイムクロック。

先日のMP1854ENモジュールを取り付けてリポから電源を取れるようにしました。

ケースに使う空き缶を探しましたがちょうど良いのがなかったので、2.5mm厚のMDFをレーザーで切って箱を作り、ダイソーの0.3mm厚アルミ板(裏面テープ付き)を貼り付けてシールドしました。

ケースのアルミシールドは回路のGNDに接続。

電源の入り口

XT60コネクタで給電

蓋を一部切って電波を取り入れます。ここの開き具合で感度を調整する予定。

ここの空け具合は色々調整してみます。

なおWi-Fiのアクセスポイントがない屋外で使うときは 、ラスパイとPCとの間をアドホックモードでつなごうと思いましたが設定変更が面倒です。
結局リサイクルショップに行ったらWi-Fiルーターが¥770だったのでこれを使う事にしました。

Wi-Fiルーター。中古とはいえ安くなったもんです。

これで完成かな。今度練習する時に使ってみようと思います。

ところでいまRotorHazardのページを見たらこんな基板がリリースされています。Arduinoの代わりにSTM32を使い、マイコン1個でRX5808モジュール8枚(ドミノ倒しみたいに縦に実装!)を制御するという構造。進化してます。
しかし8台同時にレースできるんですね、海外って。