micro:bitはMicrosoftの提供するMakeCodeでプログラミングすることができます。
私がビギナー競技のために準備したサンプルを公開しますのでぜひご覧ください。
Line&Servo(https://makecode.microbit.org/_hkM8L7PJggA4)
1画面に収まってしまうコンパクトですが、ちゃんと動きます。
楽しい工夫も満載ですよ。
このプログラムは以下の4つの部分から成り立っています。
① さいしょだけ
最初に変数を初期化します。変数というのは、数字を覚えておくための箱のようなものです。これを使うと、ロボットが今の状態を覚えておいて、次の動きを決めることができるようになります。このあと使うので覚えておいてください。
次に笑顔のアイコンをLEDに表示しています。
次にオレンジ色の音ブロックで、真中のドを鳴らした後、上のドを鳴らします。「ド↑ド♪」って起動音が鳴ります。そのあと、1秒(1000ミリ秒)一旦停止しています。
② ボタン操作A
Aボタンを押したときの動きをプログラミングしています。ピンクのボタンAが押されたときブロックではさみます。
分岐ブロックで、変数servoが0の時と1の時に分けてそれぞれの動きを決めています。
servoが0の時は、サーボが付いているP1の端子に180度にするように命令します。そのあと300ミリ秒(0.3秒)待ちます。そのあと、90度に戻して、変数servoを1にします。
servoが0でないとき、つまり1の時(一度Aボタンが押された後)は、サーボを0度にして300ミリ秒待ち、90度にしてから変数servoを0にしています。つまり押される前に戻しています。
こうやって、Aボタンを押したらアームを上げて、もう一度押したらアームを下げるという、上げ下げの繰り返しを行っています。
変数の使い方が分かりますね。
③ ライントレース
ここが一番面白いところです。
Maqueenの裏側には、二つのラインセンサーが付いています。
この黒っぽい方から赤外線という光の一種を発射し、その反射を下の透明な方で読み取っています。しかし、このセンサーは単純に白か黒かを読み取るだけのセンサーなので、環境によってはちゃんと読み取れないことがあります。
そこで、反射光を調節するためにかっこ悪いし、ベタベタするのですが、両面テープを貼り付けています。(職人ぽいですね)
プログラムの中身は、まず先ほどのservoの時と同じように「1ならそれ以外なら」でBボタンを押すたびに走り出したり止まったりするようにしています。
その中身は、ラインセンサーの右側と左側が0(黒)のときと1(白)とときで場合分けしてロボットの走り方を変えています。それを表にしてみます。
右側0(黒) | 右側1(白) | |
左側0(黒) | 右モーター30 左モーター30 (直進) | 右モーター30 左モーター0 (左に曲がる) |
左側1(白) | 右モーター0 左モーター30 (右に曲がる) | 右モーター40 左モーター40 (高速直進) |
右と左のモーターを走らせたり、止まらせたりすることでロボットの動きを決めることができます。
たったこれだけで、ロボットは黒い線の上をたどって走ることができます。
④ ボタン操作B
最後はボタンBのプログラミングです。
拍子抜けするくらいに簡単ですね。
ボタンBが押されたら、lineが1なら0に、lineが0なら1にするだけです。
lineは③のプログラムの最初にありました。このプログラムがロボットがライントレースするか、そのまま止まっているかを決定しているのです。
終わりに
さて、ここまでできれば、あなたも高岡市ロボットプログラミング競技大会に出場できます。ただ、ロボットプログラミングの難しさは、パソコンの中だけのヴァーチャルな世界ではなく、摩擦や空気抵抗、電池の消耗など、もっともっとたくさんの要因が絡まる複雑な世界だってことです。
同じパーツを使っても動きはそれぞれですが、別のパーツを使うとそれはさらに予測が難しくなります。
ロボットが完成したら、プログラミングし、動かしてみて、自分の出した命令がどのように働いているかを確かめなければなりません。
そういった試行錯誤の中で、みなさんはひとつひとつ世界の理(ことわり)を知り、できることを増やしていくのです。
いつの間にか私たちの身の回りには、理解しやすいものばかりがあふれています。それは、私たち人間が理解できるものを好み、理解できるもので埋め尽くしてきたからです。
でも、本当はまだまだ知らないことばかりです。分かっていないことに気付き、自分の手で解き明かしていく楽しさを味わってください。
簡単にはうまくいかないから面白い。
そう思いませんか?
読みやすい資料にまとめましたので、作るときにはぜひこちらをご覧ください。
【追記2021.12.25】本物のサーボモーターを使ったプログラミング
安いレゴ系サーボを見つけては買い漁っているのですが、上記のサーボ(オレンジとグリーン)はインチキサーボ。まるでモーターと変わりません。
同じGeekServoでグレーのものは本物でした。
ちゃんと絶対位置を覚えていて、角度を指定するとその位置できっちり止まってくれます。その場合のプログラムを書きましたので、参考にしてください。