メトロノームをつくろう ①

 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画面に表示」ブロックでつくってみたぞ。それを、「ずっと」ブロックと組み合わせる。

単純に往復する振り子をLED画面に表示する

 シミュレーターで確認
かくにん
してみると、テンポが速すぎるね。でもこのプログラムでは変更できないので、ためしに「♩=60」の速さになるプログラムにしてみよう。振り子が中央から
はし
まで動いて、また中央に戻るまでにかかる時間が1秒なので、それぞれの「LED画面に表示」ブロックの後に「基本
きほん
」カテゴリーの「一時
いちじ停止
ていし
(ミリ秒)」ブロックを入れよう。1000ミリ秒(1秒)待つようにしてみた。

表示を1000ミリ秒待つプログラム

 もう一度シミュレーターで確認してみよう。時計の秒針
びょうしん
と同じ
はや
さのはずなので、時計と並べて比べてみてもいいね。

 よく見ていると、LED画面の針の動きは、時計の1秒よりやや
おそ
いようだ。その理由
りゆう
想像
そうぞう
できるかな。このプログラムでは一時停止の時間は1秒(1000ミリ秒)だけど、それに加えてLEDディスプレイでの表示にも、少し時間がかかっているのだろう。

3 時間のずれを測ってみよう

 そこで、探検ウォッチでの振り子の表示はどれくらいずれているのか、測ってみることにしよう。方法としては、振り子の表示を60回、つまり60秒間動かして、時間を測るんだ。

① さっきつくったプログラムを、「ずっと」ブロックから外して、「ループ」カテゴリーの「くりかえし“4”回」ブロックと組み合わせる。くりかえしの回数は30回にする。

② ここで、「変数
へんすう
」カテゴリーで新しく変数「time」をつくる。

③「変数“time”を“0”にする」ブロックの“0”に「計算」カテゴリーの「“0”÷“0”」ブロックを組み込む。
 左側の“0”は「入力」カテゴリーの「…その他」にある「稼働
かどう
時間(ミリ秒)」ブロックを組み込むよ。右側の“0”は“1000”を入力する(ミリ秒を秒にするため)。

④ ③でできたブロックは「くりかえし」ブロックの下に入れよう。

⑤ ④でつくったブロックを「最初だけ」ブロックと組み合わせるよ。

振り子の表示を60回、つまり60秒間動かして、時間を測るプログラム

 60回動かすのに、なぜくりかえしを30回にしているかわかるかな? 「LED画面に表示」ブロック2つで一往復分なので、60回ではなく半分の30回にしている。変数「time」は、振り子が30回往復したあと、その処理
しょり
にかかった時間が入っているよ。

 その時間は「ずっと」ブロックに「基本」カテゴリーの「数を表示」ブロックで表示させよう。アイコンを表示させてから数を表示させるとわかりやすい。

振り子が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に合わせるとベルの音はしなくなる。

拍子を打つベルの設定部分

 メトロノームとして使うには、次のような機能が必要そうだね。

・テンポを変更する
・拍子を変える

 さあ次回は、こうした機能もプログラムでつくって、メトロノームとして完成させよう。完成したら、楽器を演奏するときに使ってみたいね。お楽しみに!

最新号好評発売中!

子供の科学 2024年 5月号

CTR IMG