クラシック機体紹介
人生で初めて製作したクラシックDCマウスの機体紹介記事です。
写真
機体情報
機体名 Meteorboy
size width: 70mm Length: 95mm
weight 117g
cpu STM32F446
sensor 受光部 st-1kl3a LED SFH4550
gyro ICM-20689
encoder IEH2-4095
motor 1717-6SR
motordriver TB67H450FNG
オーソドックスな4輪DCマウスです。DCマウスを自分で設計するのは初めてだったので,他の人の使っている部品を大いに参考にしました。なので,ハード設計において,オリジナリティーなんてものはありません(笑)
設計コンセプトとか
①かっこいいので変則4輪にしたい
②ある程度実績のある部品を利用する
③去年のステッパの経験から前壁センサーは1個にした。
⑤リポ逆挿しをしない構造←重要
なお逆挿ししなくても回路を壊した模様
①について
先輩や大会にいた他のマウサーの方の機体を見て,かっこいいと思ったので,
②について
初心者がデータシートを読みこなすのは困難なので,他の方のブログを参考にできるように,有名な部品を選ぶことを心掛けました。
以下に回路図を示します
いちおう受光回路にハイパスフィルタを入れてみたのですが,今のところあまり効果を実感できていません。アートワークの方はここには載せませんが,水晶の下を信号線が通っていたり,ベタGNDができていなかったり,配線が無理やりだったりと色々と怪しいです。今回は無理にすべて手動配線したので,次作るときはもっと部品の配置を練って,自動配線を使ってみようと思います。
③について
去年のステッパは何故か,左前壁センサーの感度が低く,ほぼ右前壁センサーのみを使って前壁認識を行っていました。そのため別に前にセンサーが2つなくてもいいんじゃないかと思って,なんとなく前壁センサー1つにしました。ただ,センサー5個の配置の場合,斜めの壁制御がセンサー4つとかなり異なるものになるらしいです。
④について
僕は前々からオブジェクト指向を用いてプログラミングしたいと思っていたので,ステッパからDCに移行する際にCからC++に切り替えました。ただ,周りの人は誰もCubeIDEでC++を使っていなかったので,C++への移行は結構詰まるところがありました。CubeIDEでのC++のプロジェクト作成するブログは少なかったので,今後備忘録として書いておこうかとも思っています。
さて,去年の僕のステッパのコードは1ファイルに1500行以上書かれていたりとひどいものでした。コードの綺麗さとかは特に考えずにテキトーに書いてたので,似た処理の関数が複数あったり,externを濫用して勝手にフラグが書き換わっていたり,なぜか迷路探索部の処理の中に,ペリフェラルの関数が入っていたりしました。このようになった原因の一つとして,機能をどんどん追加していくたびに,違法増築を繰り返し,プログラムが雑になっていったという事があります。そこで今年はある程度ソフトの全体設計を行ってからコードを書いていくことにしました。去年ステッパをまあまあちゃんとやったので,マイクロマウスにおいてどのような機能が必要かなどを見渡すことができました。今回はクラス図を書いて,その通りに実装していったのですが,図の作成はplantUMLを使用しました。
とりあえず,制御部だけですが,以下の写真のようなクラス図を書いてみました。設計時は要素間のつながりはできるだけ少なく(特に制御部,センサー,迷路探索部の名前空間の間のつながりは最小限にした),クラスに循環参照ができないように心がけました。実装の際にはsetter,getterを面倒くさがらずに書いて,関係ない所から参照できないようにする,インスタンスのメンバ変数の参照関係は極力クラス図の関係になるようするなどを気を付けました。
⑤について
去年の学生大会で大会前日にリポを逆挿しして悲しかったので,もう二度と逆挿ししまいと,電源のmosfetを2段にしました。そのため万が一逆挿ししても大丈夫だと思うのですが,怖いので試したことはありません。
↑スイッチを6角レンチで押そうとして手が滑り,回路を導通させ破壊した
おわりに
回路を破壊した後は,二日ほどかけてもう一度作り直し,現在は良好に動いています。これから迷路探索部のコードを書いていく予定です。