前回までのあらすじ
前回の第三話で、ロボットに使用するセンサーの部品評価が無事終了しました。
今回はそのセンサーや地面を走るモータードライバーを制御するソフトウェアのお話です!
でもその前にはんだ付けをして基板の作成、ロボットの組み立てをしなければなりません。
去年、この製作実習を乗り切ったクロちゃん先輩はとてもはんだ付けが上手なことで有名です。
綺麗な半田付けでクロちゃん先輩を驚かせたいと思います。
半田付け基板から一部抜粋して、地面の黒と白を検知するためのフォトセンサの基板を皆さんにご覧頂きたいと思います!
さて、私の実力はいかに!!

フォトセンサーの基板(表面)

フォトセンサーの基板(裏面)
非常に上手、ですよね!(圧)
ソフトウェア制御開始
さて、製作実習の最大の山場のソフトウェア部分です。
今回はPSoCという可愛らしい名前のマイコンを使います。
このマイコンはPSoC Createrという統合開発環境でGUIベースでの設計ができるとのことです。
また、アナログやデジタルや通信などなど、サンプルコードも複数用意されています。
マイコン初心者の私にとってとてもありがたいです!

統合開発開発環境 - PSoC Creater -
今回はロボットに4つのフォトセンサーをつけ、地面の白と黒を検知します。
このフォトセンサーはそれぞれ、白を検知するとHighの電圧、黒を検知するとLowの電圧がマイコンに入力されるように基板を設計しました。
真理値表は以下の通りです。
今回はフォトセンサーをロボットの前面に4つ配置し、左から①、②、③、④としました。
それぞれのセンサーの出力のHigh(1)かLow(0)を元に筐体の動作を決め、
モータードライバー(MD)の入力ピン(AIN1, AIN2, BIN1, BIN2)に入力するHigh(1)とLow(0)を決めました。
この真理値表を元にロボットのモータードライバーの制御を行いたいと思います。

真理値表
モーターの選定
次に、ライントレースに欠かせないモーターの選定です。
事前にシリーズによって速さが異なるモーターを数多く購入し、何度かモーター単体の試験を行いました。
一番速く走れるモーターが一番良いと考えていたのですが、今回は直線の距離の速さに加え、いかにスムーズに曲がれるかも大事です。
回転数やトルク、スピードの制御のしやすさを考慮してこちらのタミヤのモーターを使いたいと思います。
あとはソフトウェアのPWM制御で直線の速さとスムーズな曲がりを実現するだけです。

タミヤのモーター『260タイプモーター』
いざ試運転
ー 数日後 ー
SWの実装ができ、いざ試運転です。
本番でもないのに緊張する私でしたが、無事ゴールまでたどり着きました!
ですが、ほっと胸を撫でおろしたのも束の間、直ぐに新たな壁にぶつかることになりました。
何度か練習を重ねるうちに、2,3回に1回は1塁にたどり着いた時に上手く左に曲がらず直進してしまうことに気付きました。


今回の競技フィールド


理想の動き


実際の動き
モーターの出力が強すぎるのが原因かと考え、PWM制御の実装も試みたのですがそれでも解決できずです。
うーんうーん、、、
地面を走るためのプログラムは主に、①地面の白と黒のセンシング、②モーターの出力制御の2つだけ。
そのためこれ以上ソースコードで修正を加えられそうな箇所はなさそうです。
PSoCにはハードウェアをConfigで設定できるという特徴を持っているのでPSoC Createrを使ってそこをもう一度見直すことにしました。
ここで思わぬ落とし穴に出会いました。
今回はデモコードを参考にしてperipheralのADCブロックのハードの構成を変えていたのですが、
今回の地面のセンシングタイミングはソースコードではなく、『Timer Counter』で決めていることが分かりました!

PSoC Createrのハードのコンフィグ画面

PSoC CreaterのClockの設定画面
このタイマーカウンターについているClockを変化させることで、1塁、2塁、3塁、ホームベースまでを全力で駆け抜けられるのではないでしょうか!
ー数時間後ー

フォトセンサーのセンシング周期と走行成功(〇)と失敗(×)の比較
結果は上の図のようになりました!
タイマーカウンターのClockを大きくし、各周波数に対して5回分、ベースを走らせましたが、周波数を大きくする(センシングの時間間隔を短くする)と最後まで走りきることができるようになりました!
これで万事解決です!
次回で最終話、第五話 『動くマクニカ?!君がNo.1のロボットだ』編でお会いしましょう。