ArduinoIDEが保存するスケッチの改行コードが変わった?

最近ArduinoIDEでスケッチを保存し、gitにコミットする前にdiffを取ってみたら、数行しか変更していないはずなのに全行が不一致として表示されました。
どうやらArduinoIDEのバージョンを上げたのが絡んでいて、以前は改行コードがLFのみだったのが今はCR+LFに変っている様です。

リリースノートにはそのあたりの記述は見当たりません(英語なので見落としているかもしれないけど)。

そこでArduinoのサイトから旧バージョンのIDEを取ってきて色々試したところ、バージョン1.8.5から1.8.6になる時に変った様です。

Arduiooのフォーラムで検索すると次のやり取りが見つかりました。そのうち治してくれるんちゃう?っぽい会話みたいですが最新の1.8.12でも戻っていない様です。
https://forum.arduino.cc/index.php?topic=575025.0

致命的な問題ではないんですが、できれば統一したいところです。
どなたか、このあたりの経緯をご存じですか?

フライトコントローラーを自作してみる。~その3~

前回まででとりあえず’飛ぶ’という事については何とかなったので引き続きOSD機能を試してみます。
OSDはOnScreenDisplayの略で、テレビの映像に文字等をスーパーインポーズする機能です。よくアナログ時代末期のテレビではチャンネル番号や音量が画面上に表示されていたアレです(今もあるか)。
フライトコントローラーではFPV画像に重ねてバッテリー電圧とか諸々の情報を表示する為に使用します。

大抵のフライトコントローラはマキシムのMAX7456及びその互換ICを使っている様で、これを使えば問題なくBetaflightのファームウェアがコントロールしてくれるはず。

という事でAliexpressからMAX7456Eを3個買っておきました。
SOPパッケージなのでピッチ変換基板に実装します。

そしてほぼデーターシート通りの次の回路図でやってみます。

ブレッドボード上に回路を組んで・・・

ちょっとゴチャゴチャしています。
画像の上の方に適当なカメラを仮止めしています。

実行してみるとあっけなく表示されました。
まあソフトもハードも既存の物なので当然といえば当然ですが。

次はそろそろ基板化を考えたいところですが、その前にもう一つ、最近のフライトコントローラーには動作中のログをSDカードやSPIフラッシュに残す機能があります。
調子よく動作しているときは良いのですが不調の場合には必要となる可能性があり、できれば搭載しておきたいと思います。メモリーにはマイクロSDカードが安くて容量も大きいのですが、SDソケットを載せると基板の面積を喰って設計が難しくなるので今回はSPIフラッシュで試そうと思います。
そこでRSコンポーネンツにSPIフラッシュを発注し、入着を待ちながら基板の検討を進ていめます。

Maker Faire Kyoto Online

5/2(土)にMaker Faire Kyoto Onlineが開催されました。
Maker Faire Kyotoは昨年からスタートした、京都で開催されるMaker Faireで、本来なら今年は第二回として’けいはんなオープンイノベーションセンター‘で開催される予定でた。

ほいほい堂本舗としては昨年はモーション・フライトシミュレーターを運び込んで展示をしましたが、今年は日程的に合わないので出展はせず、スケジュールが許せば見学だけ行こうと思っていました。

しかしご存じの通り世の中は新型コロナウィルスでえらい事になっており、MakerFaireKyotoも人が集まるイベントとしては行わず、代わりにTwitterを使ったOnlineでの開催となりました。
Online版は事前の出展申し込みはなく、だれでもその日にTwitterで「#MFKyoto2020 #作品発表」というハッシュタグと共に呟けば作品を紹介できるのです。

という事で、ほいほい堂本舗でも幾つかつぶやいてきました。正直言うと私、Twitterはアカウントだけ以前からあったのですがつぶやいた事がなかったんですよね。そこでTwitter初心者向けの使い方サイトを見ながら参加です。

Online版の良いところは熊本からでも気軽に参加できます(MakerFaireKyotoというタイトルになっていますが、もう京都とは直接関係なくなってしまっています)。
また実物を運ぶ必要がないのでサイズの大きなものや、昔作ったもの等、幾つでも紹介できます。

という事で一日中Twitterを眺めていた日でした。

今回コロナ対策でオンライン開催となりましたが、平時でもリアル版MakerFaireと並行してオンライン版も開催されたらいいなと思っていたらMake:japanのサイトで、今年10月のMakerFaireTokyoではリアル版が開催できてもできなくてもオンライン版はやるとのアナウンスが出ていました。


フライトコントローラーを自作してみる。~その2~

前回STM32F411Nucleo64ボードでフライトコントローラーを作ってホバーリングさせてみたら斜めに振動したところまで書きました。その続き。

「斜めに振動」といっているのはこういう風に、黄色線を軸にして赤矢印の方向に2~3Hz程度で揺れ、PIDをいじっても改善しないのです。

最初はプロペラとジャイロセンサーの高さが違うのが原因かと考えました。高さが違うと上図の様に揺れた振動をジャイロだけでなく加速度センサーまで拾ってしまいおかしくなるのかと・・・

一番上の基板にセンサーが載っているのでプロペラから2cmくらい高いのです。

そこでモーターの高さを上げてみましたが効果ありません。

この時はまだ レーザー管も元気だったので簡単に作れました。
前回書いた様に、この後レーザー管が弱ってしまったのです。

次にFCを90度回して取り付けてみました。こうするとジャイロ/加速度センサーも90度回るので揺れる方向も90度回るかと思ったのですが、変わらず同じ方向に揺れました。という事はセンサーがらみではないんじゃないかな?

試しに市販のFCに載せ変えてみたら、やはり同じ様に揺れます。という事は自作FCの問題ではなく、モーターやESCを含む機体側の問題っぽい・・・

ESCは得体のしれないセパレートタイプ(4in1ではない) を4つ載せています。4個が同じ設定ではないのかと疑いましたが、ファームがBLHeil等ではなく、特に資料もないので確かめ方がわかりません。そこで先日激安で購入したESCに載せ変えてみましたが・・・これでも変化ありません。

激安ESC

残るはモーターかとも思いましたが交換できるモノがないのです。また4つとも見た感じでは元気に回っています。

ここで一旦行き詰ったのですが、以前コアレスモーターの機体にBetaflightの最新バージョンを載せたら不安定になった事があったので、ダメ元でBetaflightのバージョンを下げてみ見ました。

今までVer.4.2.0だったのをVer3.5.7に変更したところ揺れが収まったじゃないですか。最新版の何が問題なのかは判りませんが自作FC,市販FC共にVer3.5.7だと安定しています。

Ver4.2.0の何が問題かは気になるのでいずれ調べたいと思います。

・・・という事で最終的にこんなゴチャゴチャな機体になりましたがちゃんと飛ぶ様になりました。

動画です。
なんかもう、とにかく飛べば良しという機体

次はOSDの回路を載せてみたいと思います。

レーザー管劣化

レーザー管が劣化してしまいました。

いきさつ・・・

前に冷却水をこういうのにした事を書いたのですが・・・

Water2_7
不凍液を電動ポンプで回し、ラジエーターで冷却していますが
水流がちょっと弱めでした。
手押しポンプが付いているのは電動ポンプまで水を通す為です。

あまり冷却が弱いとレーザー管が劣化するという事を読んだので直ぐに元の風呂水ポンプに戻していました。

今まで使っていた風呂水ポンプ

この状態で使っていても徐々に劣化感はあったのですが、先日MDF材を切っていたら途中でレーザーが出なくなっていました。みるとポンプが壊れてセンサーが水流を検出しなくなり、レーザーを停止させていた様です。

水流センサー
水流センサーのインジケーター

ポンプはもうウンともスンともいいません。でもこれは予備として買っておいたこちらの水中ポンプに交換します。

いつだか買っておいた水中ポンプに交換。

これで水は依然よりも良く流れるようになったのですが・・・・レーザーが弱々しくなり、フルパワーでも2.5mm厚のMDFが切れなくなってしまいました。

水流センサーが働いてレーザーは止まっていた筈ですが、余熱が逃げないだけで劣化してしまうのでしょうか?

ためし撃ち
購入時の試し打ち風景。
ブログを見返すとこのレーザー管は2015年に購入しています。
約5年使ったと考えれば諦めもつくかな。

という事で・・・

とりあえずレーザー加工機のない生活は考えられないので新たなレーザー管を発注しましたが、新型コロナで世の中おかしくなっているこのご時世、いつ届くのでしょうか?

フライトコントローラーを自作してみる。

ドローンレースの練習をしていると色々なところを壊します。
ほいほい堂本舗は貧乏性なのでできる限り修理して再利用したり、また可能なところは自作してみたくなります。

という事でフライトコントローラーを作ってみたいと思います。フライトコントローラーとは一言でいうとマルチローター系の機体を制御するマイコンボードです。固定翼の飛行機は構造的に自立安定して飛行しますが、これと違ってマルチローターは特に制御しなければ安定して飛び続けられません。そこでジャイロや加速度センサーで機体の姿勢を検出しどのモーターをどの程度のパワーで回すかを決めるのがフライトコントローラー(以下FCと略す)です。

自作フライトコントローラーの構想

近年の(ホビー系の)FCは殆どがSTマイクロエレクトロニクス製のSTM32Fxx マイコンが使われています。これにジャイロ/加速度センサーを載せるのですがマイコンとの接続はSPIやI2Cですし、モーターを回すためのドライバ(ラジコン界ではESCという)へはPWM(およびその変形)で信号を送るので、ほぼマイコン工作で作れそうです。

またソフトについては優秀なオープンソースのファームウェアが多数出ているのでこれらを用いることができます。

といっても、いきなりプリント基板を作る勇気はないのでまずはマイコンボードを使って動作を確認してみます。マイコンボードにはSTM32F411 Nucleo-64を使う予定。

STM32F411 Nucleo-64

全体像はこのブロック図の様に考えています。このうち水色で囲んだ部分をここではフライトコントローラー(FC)と呼ぶ事にします。

実用的にレースで使うにはこの他にOSD(On Screen Display:FPVの映像に諸々の情報をスーパーインポーズして表示する機能)も必要になりますが、まずは飛べる事を確認出来た後でこれらも試したいと思います(実はOSD用ICも入手済)。

Betaflightをビルドする。

ファームウェアはいつも使っているBetaFlightを書き込む予定ですが、その前にファームウェアをビルドする環境を作っておこうと思います。
BetaFlightのビルドはUNIX環境上で行うのが基本となっている様で、Windows上のWSL(Windows Subsystem for Linux)でも実行できます。詳細はBetaflight Wikiのこのページに説明されており、この通りにやれば構築できました。
手順通りに構築するとWSL環境内の~/Git/Betaflightというディテクトリ以下にファイル一式ができています。更に下には~/Git/betaflight/src/main/targetというディレクトリがあり、ここには下図の様に各種FC毎の設定があります。

このディレクトリ下に今回作るFC用として’HOIHOIF411’というディレクトリを作るのですが、まずは似たFCである’MATEKF411’の内容を丸コピーし、そこから変更していくことにします。

HOIHOIF411ディレクトリの中にはtarget.mk、target.h、target.cの3本のファイルがあります。ここら辺の詳しい説明資料が見つからないのですが、この3本のファイルを変更するとそれぞれのFC固有のファームウェアが出来上がる様です。で、いろいろ試行錯誤した結果のファイルを添付しておきます。→HOIHOIF411.tar.gz

targetディレクトリの設定ファイルができたらカレントディレクトリを
~/Git/Betaflight に設定し、ここで’make HOIHOIF411’とコマンドを実行すると ~/Git/Betaflight/binの下にファームウェアが出来上がります。このファイルをBetaflightConfiguratorのファームフラッシャーを使って書き込んでやる訳です。

ジャイロ/加速度センサー

当初ジャイロ/加速度センサーにはモーション・フライトシミュレーターで使ったので手元にあった MPU6050ボードを使ってみました。市販のFCは大抵SPIで接続できるセンサーを使っていますがMPU6050はI2C接続専用です。一応これもBetaflightにサポートされているっぽいのですが、しかし何故かうまく接続できません。mbedで書いたプログラムだとセンサー値を取れるのですがBetaflightのファームからは取れないのです。

MPU6050ボード

そうこうしている内にポチッていたMPU6500ボードが届いたのでこれをSPIで接すると問題なく接続できました。 名前が似ていてややこしいですがMPU6500はSPIで接続するタイプで市販のFCでも結構使われています。
どのみち最終的にはMPU6500を使うつもりなのでこれで行きます。

MPU6500ボード


回路図

こんな感じで行こうと思います。
NucleoボードはArduino互換ソケットが付いているので、なるべくこれを利用する事で、Arduino用シールド基板を使って配線し易い様にします。
なおOSDは後で追加予定です。

機体

動作確認用に、息子が作って今は使っていないこの機体に乗せてみます。

製作

まずはブレッドボードで動作を確認して・・・

大体動作したのでArduino用シールド基板上に回路を載せて・・・

機体に乗せてみます。

飛ばしてみる

で、飛ばしてみると・・・一応浮き上がるのですが斜めに振動して止まりません。
原因調査中ですが、市販のFCに載せ変えても同じ様に振動するのでFCの問題ではないのかもしれません。
この続きは後日・・・

レーザーカットしてマスクを作ってみた。~その2~

先日のマスク作成の続きです。

前回のデーターは片方のパーツを裏返し忘れていました。材料となる生地に裏表の区別がなければ特に問題はないのですが、区別がある場合は面倒になるので修正データを作りました。

また私にはサイズが小さい感じがしたのと鼻の横に隙間ができるので改良しようと思います。まず全体を10%大きくし、鼻側をちょっと広く取る事にします。あと縫い合わせがし易い様に2枚を中央で連結させてみました。

早速改良版をカットして縫います。

鼻の横には使い捨てマスクから取った針金を入れてみます。

大小並べて撮影。もうちょっと明るい色の生地にしようかな・・

まだミシンに慣ませんがなんとかできました。

今回のカットデータです。
<前回サイズの修正版>
MASKDATA2.jww
MASKDATA2.dxf
<サイズアップ版>
MASKDATA3.jww
MASKDATA3.dxf

レーザーカットしてマスクを作ってみた。

新型コロナウィルスで世の中えらい事になっています。
オリンピックもMakerFaireKyotoも中止だそうですね。(オリンピックは中止ではなく延期でしたね。訂正します。)
熊本でもマスクは全く手に入りません。仕方ないので使い捨てマスクを洗って消毒して使いまわしていますが、あまり何度も使えるとは思えません。

そんな中、家族がダイソーに行ったらマスク自作用の型紙を配っていたそうで、1枚もらってきました。

いずれ大量に作る必要があるかもしれないので、これをJw-cadに入力してレーザーカットしてみます。

これを2セット、合計4枚を切り出します。

適当な布をセットして・・・

布がラクダ色っぽい・・・

布を切るのは初めてなので条件設定を探りながら・・・
速度はF1200、レーザーパワーは40%で切りました(なおウチのレーザーは40WのCO2ですが最近パワーが下がってきている気がしています)。
でもまあ相手は布なので問題なく切れました。

4枚で一組のマスクになります。

そして不慣れなミシンで縫ったのがこれ。

二重構造で本来は中央と上下の縫い目を内側に折り返して見えなくするのですが、間違って縫ったのでどちらかの縫い目が表に出てくる様になってしまいました(上下の切り口がギザギザに見えるのはその為です)。
嫁曰く「初心者がやりがちな事」だそうです。

Jw-cadとDXFのデーターをアップしておきます。
MASKDATA.jww
MASKDATA.dxf

スイッチングBECの製作

最近ラジコン/ドローンの投稿が多くなっていますがまたまたラジコン/ドローンネタです。

息子が通販で激安のESCを見つけてきました。スチレンペーパーの飛行機を作ったりするので多めに買ってストックしておくと便利です。

※ラジコン用語で ESCとはElectricSpeedControllerの略で要するにブラシレスモーターのドライバーです。ラジコン受信機やドローンのフライトコントローラーからの信号に合わせてモーターの出力を制御します。

見ると税別880円で20AのESCが4個入っています。但しBECが内蔵されていません。

※ ラジコン用語でBECとはBatteryEliminateCircuitの略で要はレギュレータです。独特な用語に思えますがプロペラを回すためのバッテリー電圧(7.4Vや11.1V)から受信機やサーボを動かす為の5V電圧を作り出す事で5Vのバッテリーを載せなくて済むという意味からバッテリー除外(eliminate)という事らしいです。

1個あたり220円。消費税と送料を入れても安いじゃないですか。BECだけ別に準備すれば安くESCが手に入るので早速購入しました。

4個入りを私が2セット、息子が3セットで、合計20個のESCを購入!
さすがにこんなに使うか?

そしてBECをどうするかですが、Aliexpressで見ると降圧DCDCコンバーターが80円くらいで売られているのでこれを買うのが簡単です。しかし最近はコロナウィルスの影響かAliexpressで買っても中々発送されないんですよね。という事で作ってみようかと思った次第です。

どんなのを作るか考えるに、負荷の電流が少なければ単純に3端子レギュレータ(シリーズレギュレータ)でも良いですが、飛行機に載せるとサーボを動かすのでそれなりに電流を流したいです。また発熱が多くて放熱板を取付けたりすると重くなってしまいます。となるとスイッチングレギュレータですよね。

部品箱には300円で大量に入っていたスイッチングレギュレータIC、LM2576があります。当初これを使おうかと考えたのですが結構古いのでスイッチング周波数が52KHzと低いんですよね。するとインダクターが100μHくらいのを付ける必要があり、コンデンサもそれなりに大きいのを使う必要があります。

そこで先日フライトコントローラーを修理した時に買ったMP2359のデーターシートを見ると、こちらはスイッチング1.5MHzで動作するとの事。これだとインダクターは4.7μH程度、またコンデンサーも小さくて済みます。

10個入り140円。2個使ったのであと8個残っている。

という事でMP2359を使ってみる事にしました。
いつもの様にKicadで回路図を書きます・・・

ほぼデーターシート記載のリファレンス回路図通りですがインダクタは部品箱にあった10μH(電流2.3A)の品に、その他もあり合わせの部品に合わせています。 MP2359はFB端子が0.81Vを保つ様に制御されるので6.8Kと1.2Kの抵抗分割だと計算上5.4Vの出力で若干高め狙いです。実際には抵抗の精度が5%なので動作後に実測する事にします。

Kicadでパターンを書き、久々にCNCで基板を削りました。

上がMP2359
下が切削後の基板

MP2359を搭載する部分は細かいのでショートさせてしまいそうです。そこで危なそうな部分にサンハヤトのレジスト補修材を塗って保護しました。

このレジスト補修材、何故か近所のホームセンターHANDSMANで売ってるんですよ。
1年に何個売れるんでしょう?

そして部品を載せました。基板の上の方にある大きな抵抗みたいなのが10μHのインダクタです。入口の10μFは回路図では電界コンでしたが部品箱に積層セラミックがあったのでそっちにしました。

もっと小型化できるなー。

裏側に表面実装部品を載せています。MP2359の取り付けに失敗してリードを折り、1個無駄にしましたが何とか完成。

こっち側に表面実装部品のMP2359とショットキーダイオードが載っています。

電源を入れるとほぼ思った電圧が出ているのでサーボ(4グラムタイプ)を動かしてみます。動画で・・・

動作は問題なさそうですが抵抗やコンデンサをチップ型にしてもう少し小型化したいところです。また幾つも作るなら基板も発注したくなりますが・・・しかしお金をかけるなら結局は上記の80円のDCDCコンバータを買う方が安いかもしれません。

まあこれでESC大量&BECの目途が付きましたが、どんな機体をつくりましょう?

MAX10-FB基板に秋月電子購入のSDRAM(EDS1216AGTA-75-E)を接続

CQ出版のFPGA電子工作スーパーキット付属のMAX10基板にはSDRAMを搭載できるスペースがありますが、SDRAM自体は別に買わなければなりません。

書籍で推奨されているのはAlliancememoryのAS4C32M16SAまたは
AS4C16M16SAですが、秋月電子でも買えるELPIDA(現Micron)のEDS1216AGTAを搭載してみました。

なお AS4C32M16SAは64Mバイト、AS4C16M16SAは32Mバイトで、これに比べると今回取付けるEDS1216AGTAは16Mバイトと少な目ですが、これだけあれば大抵の事には困らないと思います。

取付けるにあたってまずAS4C16M16SAとEDS1216AGTAのデータシートを見比べるとEDS1216AGTA の方がアドレスピンが一本少ない(NCになっている)事以外はピン配置は同じです。なのでそのままハンダ付けしました。

動作確認のため、書籍「FPGA電子工作スーパーキット」の15章に従いQuartusPrimeを立ち上げてQsysを開きます。

QsysのSDRAMコントローラの設定ではRowアドレス幅を12本、Columnアドレス幅を9本にするのが書籍の説明と異なるところです。

Bits,Chipselect,Banksは表示が見えていませんが、それぞれ16,1,4です。

以上のままでも動作したのですが、一応データーシートとにらめっこして最適と思うタイミングにしたのが下の設定。

たぶんこれで良いと思いますが・・・変なところがあればご指摘ください

あとは書籍の通りでコンフィグは完了し、NiosⅡ上でSDRAMのチェックプログラムを実行するためmain.cの先頭部分にあるSDRAMサイズ設定を次の様に変更しました。

#define SDRAM_SIZE (16 * 1024 * 1024) // 128Mbit

以上でメモリーチェックも問題なくパスしています。