マイクロマウス
頭はいいけど足腰が弱い / Smart Totter
関連サイトの URL
作品の簡単な説明
一定の規則のもとに用意された迷路を、独自の制御プログラムでバランスを取りながら進みます。その過程で得られた壁情報を自身の思考ルーチンで解き、ゴールを目指します。世界的にも有名な競技ロボットで、大会では、スタートからゴールまでに要した時間を競います。上級者になると、コースを斜めに直進して走らせたり、曲線的にターンしたりと、タイムを縮めるための様々なテクニックを使うようになりますが、私を含め初めたばかりの人はゴールさせるだけでも精一杯です。
作品の作り方 1ページ目 (全 1 ページ)

マイクロマウスの製作に要した時間は約半年、かかった費用は知人にモーターを借りることができたため、それを除いて約1万円です。高度な知識やテクニック、開発用の設備も求められることから、電子工作の中では難しい部類に属すると思います。とはいえ、製作自体はとても楽しいものですので、是非一度挑戦してみてはいかがでしょうか。以下にロボット開発のおおまかな流れを記載します。

工具およびパーツを用意

ニッパー、はんだごて、ラジオペンチといった必要な工具を揃えておきましょう。日用品売り場でもある程度は揃えられると思いますし、マルツパーツ館などの専門店に足を運ぶのもよいと思います。あるいは、Amazon等でインターネット購入するのが一番楽かもしれません。一方、パーツについてはさすがに専門の場所でないと入手できません。近場に東京の秋葉原や大阪の日本橋といった電気街があればいいのですが、ない場合は、秋月電子通商などの専門の販売サイトを利用しましょう。

シャーシおよびタイヤを作成

Uploaded Image

最初の難所がここです。電子回路一式やバッテリー等を乗せるシャーシ、およびタイヤとその車軸の機械製作です。フリーの2D CADを用いて設計し、紙に実物大で印刷します。これをアルミ版に貼り付け、切削時の目印にします。旋盤等の工作機械を利用できる環境がある場合はよいのですが、ない場合でも、マイクロマウス程度の機械工作であり細部にこだわらない場合は、糸鋸等を駆使すれば製作自体は何とかなります。ただ、この機械工作部分の出来栄えが、後々のソフトウェア開発における制御のしやすさに影響してくるので丁寧に仕上げるようにします。

バッテリーの作成


Uploaded ImageUploaded Image

エネループ等の充電池を、回路およびモーターの動作に必要な電圧になるよう直列に接続し、電池パック化します。具体的には、充電池の正極と負極をはんだづけしていった後、ペットボトルの包装プラスチックでつつみ、ドライヤーの熱風を当てることで収縮させ、パッキングします。この電池パックの充電には、市販のラジコン用バッテリーの充電器の中から、電圧が近いものを流用すればよいです。ただし、専用の充電器ではありませんので、発熱には十分に注意しましょう。

回路を作成

四種類の回路を製作します。それぞれの動作確認を行った後、ロボットとしてまとめます。

マイコン制御用の回路

Uploaded Image

SH7125Fというマイコン、およびそれに定電圧の電力を供給するためのレギュレータ、リセットスイッチ、プログラムの書き込みおよびデバッグ時にPCとシリアル通信するための端子等がすべてまとまった回路です。



(PCとのシリアル通信を行っている様子)Uploaded ImageUploaded Image



(マイコンでLEDを点灯させてみている様子)Uploaded ImageUploaded Image

センサ回路

Uploaded Image

迷路の壁に可視光を当て、反射された光の強さを感知して数値化し、その大きさを基準値と比較することで、壁からの距離を計算することができます。センサ回路はその計算に必要な情報を取得するための回路です。計算自体はマイコンが行います。




(ロボット本体に乗せてみた様子。気が早い...)Uploaded ImageUploaded ImageUploaded Image

モータドライバ回路

Uploaded Image

DCモーターを制御するためには、専用のモータードライバ回路が必要になります。上記写真はその回路を完全に自作してみたものです。ただ、実際は途中で壊れてしまい、市販のモータードライバICを利用するはめになりました。


(モーターを回している様子)Uploaded Image





(ロボット本体に乗せてみた様子)Uploaded ImageUploaded ImageUploaded ImageUploaded Image

昇圧回路

Uploaded Image

作成した電池パックの電圧が、市販のモータードライバIC (画像左) に供給するための電圧としては不足していたので、追加で昇圧回路 (画像右) を用意しました。

ソフトウェア開発

大きくは二種類、細かくは三種類のプログラムに分かれています。

ロボット本体を制御するためのプログラム

Uploaded Image

センサ回路から得られる情報から壁との距離を把握し、モータードライバ回路を利用して左右それぞれのDCモーターに電圧を加える時間を調整することで、進行方向や移動速度等を制御します。実装には、古典的なPID制御を利用しています。ちなみに、DCモーターに付属しているエンコーダーで単位時間あたりのモーターの回転量を把握することで速度を計算しています。

迷路を解くためのプログラム

Uploaded Image

制御プログラムで迷路を進む中で得られた壁情報をもとに、スタートからゴールまでの最短距離を計算します。今回採用したアルゴリズムのイメージは次のようになります。スタート地点で水を放出しつづけると、閉鎖的な迷路であれば、いずれ水はゴールに到達します。最初に到達した水が通ってきた経路が最短であるという仮定のもと、計算を行います。上の画像はその計算結果の一例です。

シミュレータプログラム

Uploaded Image

「迷路を解くためのプログラム」の動作テストを行うためのシミュレータプログラムです。キャッチコピーの「頭はいいけど足腰が弱い」とは、シミュレータ上では華麗な走りを見せる、つまり理論上は最短経路を発見できる頭脳を有しているにも関わらず、ロボット本体の制御がうまくいかず、そもそも壁情報が集められない、という残念な状況を表現したものです。

回路図 (主要なパーツ一覧)

実際に製作で利用した回路図、およびそれをどのように基板上に配置するかをまとめた資料です。

マイコン制御用の回路

Uploaded Image

Uploaded Image

配置図

Uploaded Image

センサ回路

Uploaded Image

配置図

Uploaded Image

モータードライバおよび昇圧回路

Uploaded Image

サンプルプログラム

製作したプログラムをすべてGitHubのページにアップロードしました。サンプルとしてご利用ください。

完成までの道程は長いのです

C++の勉強

Uploaded Image

形になっただけでも満足できます


Uploaded ImageUploaded Image

大変なのは制御パラメータの調整



Uploaded ImageUploaded ImageUploaded Image

完成!

Uploaded Image