走れmicro:Maqueen 黒線を見つけろ!!

6.プログラムの改良

さて、ライントーレスはできているようですが、足りないところはないでしょうか。また、おかしい動きはないでしょうか?
 機能不足や不具合に気付いたら、対処を考えてプログラムをどんどん改良していきましょう。
問題に気づくことは、プログラミングでとても大事なことです。


6-1.スタートボタン(機能不足を追加する)

今の走行プログラムだと、電源ONでいきなり走り出してしまいます。
そこで、Maqueenへ合図をしたら、スタートするように改良しましょう。

合図には、micro:bitに付いているAボタンを利用します。
また、最初はモータを止めておきましょう。

次のように、プログラム(「最初だけ」ブロック)を追加してください。

・まず、モータを止めておきます。
こうしておくと、micro:bitのリセットボタンを押したときに、モータが回りっぱなしになることがありません。

・次に変数「走行モード」ブロックを新規に作成して、追加します。
値をは0に設定します。
micro:bitのブロックエディターでは、変数の初期値は0になるので、このブロックは必ずしも必要ないのですが、将来、他の言語を使用したときは必ずしもそうとは限らないので、明示的にプログラムを書くクセを付けておくとよいと思います。

・「もし、走行モード=0 なら くりかえし」ブロックで、Aボタンが押されるのを待ちます。
その間、ハート表示をドキドキさせます。
 Aボタンを押せば、「Aボタンが押されたとき」ブロックが実行され、変数「走行モード」が1(0以外)となって、このくりかえしブロックを抜けます。

・最後にニコニコ表示をさせます。
あとは、ライントレースのプログラムを実行していきます。

ライントレース中でも、Aボタンは機能して音が鳴りますが、他に影響はしないので、問題はないでしょう。


6-2.スタートしない??(不具合に対処する)

6-1を追加すると、白い紙の上ではスタートしないことに気付いたでしょうか。
スタートボタンの仕組みを加えると、黒線の上にあるときや、持ち上げているときにしか、モータが回らなくなりました。

 プログラミングでは、修正や追加をしたことによって、新たな問題が起こることがあります。
それでは、6-1で追加した「すべてのモータを止める」ブロックが悪いのでしょうか*5
このブロックをはずして試せばわかりますが、そうではありません。

 また、「ずっと」のブロックに、左右のラインセンサーが白(1)の時の条件が無いことに気付いた人もいるかもしれません。
 それでは、下図のように「ずっと」ブロックを追加して、モータ前進をすれば良いでしょうか。
しかし、これもうまくいかないはずです。

ややこしくなってきましたが、ラインセンサーが白-白の時の処理は、次の7章で詳しく説明します。

この問題を解決するシンプルな方法は、「ずっと」のブロックの最後で、ゆっくり前進させると、うまくいくでしょう。


6-3.キケンを察知!(新しい機能を追加する)

Maqueenには、超音波センサーが標準で付いています。
ライントレースとは直接関係しませんが、これを使って、コース上に障害物があれば停止する機能を追加してみましょう。

超音波センサーの詳しいしくみは別の機会にしますが、今回は測定できる距離が2cm~400cmであることだけ覚えておけばよいでしょう。

つぎのようなプログラムで止めることができます。

超音波センサーで測った障害物までの距離が、20cmより近ければ、ずっと止まったままになります。
障害物を取り除けば、このループを抜けるので、またライントレースを始めるはずです。

さて、このプログラムをどこに追加すればよいでしょうか。

実は、下図のA,B,C,D,のどこに追加しても、一応、障害物の検知ができるのです。
ただし、A,Bの位置のほうがB,C,よりも確実です。
その中で、Aの位置が一番具合が良いかもしれません。

障害物検知はどこに追加する?

Eのように、新しい「ずっと」ブロックを追加して、実行するのはどうでしょうか?。実際に試して、確認してみてください。
「並列処理」では、障害物検知の「ずっと」以外のブロックも、常に実行されていることに気付くと、よいプログラム方法ではないことがわかると思います。


6-4.うまく動かない??(プログラム以外の問題)

センサーを使った動く物を作成したときは、プログラムには問題ないのに、うまく動かないことが多々あります。
このような時は、ひとつづつ原因を探していくしかありません。
その探し方と対処ヒントをひとつ紹介します。

まず、最初に行うのは、症状の切り分けです。
どんな症状が出ているのか、書き出してみます。例えば、「スイッチを入れても走らない」とか、「ときどき黒線を外れる」などです。
また、どんなときに起きるのかも、いっしょに観察します。

dd

太陽光や白熱電球の光には、強力な赤外線が含まれているので、ラインセンサーが誤動作を起こす可能性があります。
Maqueenのラインセンサーは車体の中央部に隠れるように付いているので、外光の影響は受けにくいのですが、できるだけ室内の蛍光灯やLEDライトの下で実験するのがよいでしょう。


※5 スタートボタン機能を追加する前は、白い紙の上でも走り出していなかったでしょうか。本来は、白い紙の上では走りださないハズなのです。
 実は、人間に都合よく動いていたため、本当の不具合が分からなかったのです。
 スタートボタン機能を追加することで、本来の不具合が表面に現れた例です。
本来の不具合は、電源を入れた直後は、ラインセンサーの値がしばらく0になってしまう問題です(将来、拡張機能の中で修正されるかもしれません)。