micro:bit(マイクロビット)は手のひらサイズの小さなコンピューター。いろいろな機能
が備
わっていて、自分でプログラミングをすることができるよ。ブログラミングは「MakeCode(メイクコード) for micro:bit」を使えば、初心者でもかんたんにできるんだ。
『子供の科学』本誌
の連載
「micro:bitでレッツプログラミング!」では、micro:bitを使った「探検
ウォッチ」というツールを使って、その機能をプログラミングでつくったけれど、この連載が「コカネット」にお引っ越し。Web連載でも、探検ウォッチのいろいろな機能をプログラミングでつくっていくぞ!
これまでの本誌連載のバックナンバーは、micro:bit特設サイトで公開しているよ(コカネットの無料会員登録が必要)。本誌の連載を見たことがないという人は、まずこちらを見てみてね。Web連載は、本誌の連載の続きになっているから、基本的なことがわからなくなったら本誌のバックナンバーを振
り返ろう。
さて今回は、探検ウォッチを使ってメトロノームをつくってみるぞ。
この連載では「KoKa micro:bit探検ウォッチキット」が必要なので、持っていない人は「KoKa Shop!」で手に入れて、探検ウォッチをつくっておこう。
1 メトロノームのしくみ
メトロノームを使ったことがあるかな? 楽器を演奏
するとき、テンポを合わせるために使う道具だ。おもりがついている振り子が左右に振れるたびに「カチッ」と音がする。楽器の演奏をするときはこの音に合わせるよ。 楽譜
を見ると「♩=60」などと書いてあるよね。この場合は、1分間に四分音符
を60回打つ速さという意味だ。メトロノームをこのテンポに合わせた場合、振り子は1秒刻みに動作するよ。
2 振り子を表現するプログラムをつくる
それでは、探検ウォッチをメトロノームにするための機能をつくっていくぞ。まずは単純
に往復
する振り子を「基本」カテゴリーの「LED画面に表示」ブロックでつくってみたぞ。それを、「ずっと」ブロックと組み合わせる。
シミュレーターで確認
してみると、テンポが速すぎるね。でもこのプログラムでは変更できないので、ためしに「♩=60」の速さになるプログラムにしてみよう。振り子が中央から端
まで動いて、また中央に戻るまでにかかる時間が1秒なので、それぞれの「LED画面に表示」ブロックの後に「基本
」カテゴリーの「一時
停止
(ミリ秒)」ブロックを入れよう。1000ミリ秒(1秒)待つようにしてみた。
もう一度シミュレーターで確認してみよう。時計の秒針
と同じ速
さのはずなので、時計と並べて比べてみてもいいね。
よく見ていると、LED画面の針の動きは、時計の1秒よりやや遅
いようだ。その理由
は想像
できるかな。このプログラムでは一時停止の時間は1秒(1000ミリ秒)だけど、それに加えてLEDディスプレイでの表示にも、少し時間がかかっているのだろう。
3 時間のずれを測ってみよう
そこで、探検ウォッチでの振り子の表示はどれくらいずれているのか、測ってみることにしよう。方法としては、振り子の表示を60回、つまり60秒間動かして、時間を測るんだ。
① さっきつくったプログラムを、「ずっと」ブロックから外して、「ループ」カテゴリーの「くりかえし“4”回」ブロックと組み合わせる。くりかえしの回数は30回にする。
② ここで、「変数
」カテゴリーで新しく変数「time」をつくる。
③「変数“time”を“0”にする」ブロックの“0”に「計算」カテゴリーの「“0”÷“0”」ブロックを組み込む。
左側の“0”は「入力」カテゴリーの「…その他」にある「稼働
時間(ミリ秒)」ブロックを組み込むよ。右側の“0”は“1000”を入力する(ミリ秒を秒にするため)。
④ ③でできたブロックは「くりかえし」ブロックの下に入れよう。
⑤ ④でつくったブロックを「最初だけ」ブロックと組み合わせるよ。
60回動かすのに、なぜくりかえしを30回にしているかわかるかな? 「LED画面に表示」ブロック2つで一往復分なので、60回ではなく半分の30回にしている。変数「time」は、振り子が30回往復したあと、その処理
にかかった時間が入っているよ。
その時間は「ずっと」ブロックに「基本」カテゴリーの「数を表示」ブロックで表示させよう。アイコンを表示させてから数を表示させるとわかりやすい。
このプログラムを、micro:bitに書き込んで実行してみよう。60回振り子が動いた後に、LED画面に秒数が表示される。おそらく84〜5秒くらいになるのではないかな。60秒のはずなのに、けっこうずれていることがわかるね。
4 時間の誤差を調整する
さて、誤差
があるとメトロノームとしては使えないね。なので、誤差を吸収
できるようにプログラムで調整
しよう。
振り子のテンポを調整するために入れた「一時停止(ミリ秒)」ブロックで調整できないだろうか。今は1000ミリ秒で設定しているので、ここをもう少し短くしてみよう。
どれくらい短くするかは、2でつくったプログラムで計測した時間が使える。60回くりかえして60秒かかることを期待していたが、84秒かかっているということは、
1-(84-60)/60 秒待つ
ということだ。実際にはミリ秒になるので、プログラムは次のようにつくろう。まず、「変数」カテゴリーで新しく変数「pausetime」をつくる。
「計算」カテゴリーのブロックを組み合わせるので、順番に注意しよう。
①「“0”-“0”」ブロックを、「“84500”-“60000”」にする。
② ①のブロックを「“0”÷“0”」ブロックの左側の“0”に入れる。右側の“0”は“60”にする。
③ ②できたブロックは「“0”-“0”」ブロックの右側に組み込んで、左側の“0”は“1000”にする。
④ ③でできたブロックを「変数“pausetime”を“0”にする」ブロックの“0”に組み込む。
⑤ ④でできたブロックを、「くりかえし“30”回」ブロックの上に入れる。
⑥「LED画面に表示」ブロックの下の、「一時停止(ミリ秒)」ブロックに、変数「pausetime」を組み込む。
さて、micro:bitに書き込んで、実行してみよう。最後に表示される時間が60に近付いただろうか。
もし小数点以下第一位で四捨五入して60になればまずまずの結果だろう。あまり大きくずれていたら、59.5〜60.4になるように上の計算式の84500の部分を増やしたり減らしたりして、調整してみよう。
実際は実行するたびに結果が違うこともあるよ。さらにはくりかえしの処理時間や、最初に変数「pausetime」に入れる数を計算する時間もかかってくるので、厳密
に60秒ぴったりにはならない。多少ずれていてもだいじょうぶだ。
5 本物のメトロノームを見てみよう
ここまでで、探検ウォッチでテンポを刻む方法がわかったね。
そこで、今度は本物のメトロノームを観察
してみよう。このプログラムをもっと高機能にしていくのに役立つはずだ。メトロノームをさわったことがある人も、全くない人も、写真を見てどんな機能があるか見てみよう。
メトロノームの構造
で特徴的
なのは、逆さまになった振り子だ。振り子についている遊錘
を上下にずらしてそのテンポを調整する。テンポを合わせるときは遊錘の上辺をパネルのメモリに合わせる。動きを持続
させるためにゼンマイもついているね。
また、拍子
を打つベルの設定も変えられる。写真のメトロノームは2、3、4、8、0となっていて、二分の一拍子、三分の一拍子…となっている。0に合わせるとベルの音はしなくなる。
メトロノームとして使うには、次のような機能が必要そうだね。
・テンポを変更する
・拍子を変える
さあ次回は、こうした機能もプログラムでつくって、メトロノームとして完成させよう。完成したら、楽器を演奏するときに使ってみたいね。お楽しみに!