マイクロマウスの製作に要した時間は約半年、かかった費用は知人にモーターを借りることができたため、それを除いて約1万円です。高度な知識やテクニック、開発用の設備も求められることから、電子工作の中では難しい部類に属すると思います。とはいえ、製作自体はとても楽しいものですので、是非一度挑戦してみてはいかがでしょうか。以下にロボット開発のおおまかな流れを記載します。
ニッパー、はんだごて、ラジオペンチといった必要な工具を揃えておきましょう。日用品売り場でもある程度は揃えられると思いますし、マルツパーツ館などの専門店に足を運ぶのもよいと思います。あるいは、Amazon等でインターネット購入するのが一番楽かもしれません。一方、パーツについてはさすがに専門の場所でないと入手できません。近場に東京の秋葉原や大阪の日本橋といった電気街があればいいのですが、ない場合は、秋月電子通商などの専門の販売サイトを利用しましょう。
最初の難所がここです。電子回路一式やバッテリー等を乗せるシャーシ、およびタイヤとその車軸の機械製作です。フリーの2D CADを用いて設計し、紙に実物大で印刷します。これをアルミ版に貼り付け、切削時の目印にします。旋盤等の工作機械を利用できる環境がある場合はよいのですが、ない場合でも、マイクロマウス程度の機械工作であり細部にこだわらない場合は、糸鋸等を駆使すれば製作自体は何とかなります。ただ、この機械工作部分の出来栄えが、後々のソフトウェア開発における制御のしやすさに影響してくるので丁寧に仕上げるようにします。
エネループ等の充電池を、回路およびモーターの動作に必要な電圧になるよう直列に接続し、電池パック化します。具体的には、充電池の正極と負極をはんだづけしていった後、ペットボトルの包装プラスチックでつつみ、ドライヤーの熱風を当てることで収縮させ、パッキングします。この電池パックの充電には、市販のラジコン用バッテリーの充電器の中から、電圧が近いものを流用すればよいです。ただし、専用の充電器ではありませんので、発熱には十分に注意しましょう。
四種類の回路を製作します。それぞれの動作確認を行った後、ロボットとしてまとめます。
SH7125Fというマイコン、およびそれに定電圧の電力を供給するためのレギュレータ、リセットスイッチ、プログラムの書き込みおよびデバッグ時にPCとシリアル通信するための端子等がすべてまとまった回路です。
迷路の壁に可視光を当て、反射された光の強さを感知して数値化し、その大きさを基準値と比較することで、壁からの距離を計算することができます。センサ回路はその計算に必要な情報を取得するための回路です。計算自体はマイコンが行います。
DCモーターを制御するためには、専用のモータードライバ回路が必要になります。上記写真はその回路を完全に自作してみたものです。ただ、実際は途中で壊れてしまい、市販のモータードライバICを利用するはめになりました。
作成した電池パックの電圧が、市販のモータードライバIC (画像左) に供給するための電圧としては不足していたので、追加で昇圧回路 (画像右) を用意しました。
大きくは二種類、細かくは三種類のプログラムに分かれています。
センサ回路から得られる情報から壁との距離を把握し、モータードライバ回路を利用して左右それぞれのDCモーターに電圧を加える時間を調整することで、進行方向や移動速度等を制御します。実装には、古典的なPID制御を利用しています。ちなみに、DCモーターに付属しているエンコーダーで単位時間あたりのモーターの回転量を把握することで速度を計算しています。
制御プログラムで迷路を進む中で得られた壁情報をもとに、スタートからゴールまでの最短距離を計算します。今回採用したアルゴリズムのイメージは次のようになります。スタート地点で水を放出しつづけると、閉鎖的な迷路であれば、いずれ水はゴールに到達します。最初に到達した水が通ってきた経路が最短であるという仮定のもと、計算を行います。上の画像はその計算結果の一例です。
「迷路を解くためのプログラム」の動作テストを行うためのシミュレータプログラムです。キャッチコピーの「頭はいいけど足腰が弱い」とは、シミュレータ上では華麗な走りを見せる、つまり理論上は最短経路を発見できる頭脳を有しているにも関わらず、ロボット本体の制御がうまくいかず、そもそも壁情報が集められない、という残念な状況を表現したものです。
実際に製作で利用した回路図、およびそれをどのように基板上に配置するかをまとめた資料です。
製作したプログラムをすべてGitHubのページにアップロードしました。サンプルとしてご利用ください。