micro:bit(MakeCode環境)で腕の振り角度を検知し、指定の範囲で1回とカウントするプログラムを作成したい場合、どのようにブロックを使って実装するかが問題となります。この記事では、具体的なコード例とともに、その作り方をわかりやすく解説します。
1. プログラムの目的と動作
このプログラムでは、micro:bitを使って、腕の振り角度を検知し、一定範囲で前後に振れたら「1回」とカウントします。目的の動作としては、垂直(下向き)を0°として、前方向:+20〜25°、後方向:-35〜45°の範囲をカウントする形になります。また、100BPMでメトロノームのように音を鳴らし続ける仕様も含まれています。
2. 必要なブロックの説明
MakeCode環境では、以下のブロックを使用してプログラムを作成します。
- 入力ブロック – ボタンの押下やセンサーの状態を読み取ります。
- 制御ブロック – 条件分岐や繰り返し処理を設定します。
- 音楽ブロック – メトロノーム音を鳴らすために使用します。
- 表示ブロック – 画面にカウント数を表示します。
3. 実際のブロックプログラム例
以下のブロックでプログラムを作成できます。
まず、腕の振り角度を読み取るために、rotationブロックを使ってPitch(前後)の角度を取得します。次に、前方向に振った場合や後方向に振った場合の状態を条件分岐で判定し、一定範囲内でカウントします。
let count = 0
let angle = 0
let state = "neutral"
let forwardLimit = 20
let backwardLimit = -35
let tempo = 600 // 100BPM(1拍=600ms)
// Aボタンでカウントリセット
input.onButtonPressed(Button.A, function () {
count = 0
basic.showNumber(0)
})
// メトロノーム音を別ループで鳴らす
control.inBackground(function () {
while (true) {
music.playTone(440, music.beat(BeatFraction.Sixteenth))
basic.pause(tempo)
}
})
// 腕の振りを検知してカウント
basic.forever(function () {
angle = input.rotation(Rotation.Pitch)
// 前方向に振ったら状態変更
if (state == "neutral" && angle > forwardLimit) {
state = "forward"
}
// 後方向まで戻ったら1往復カウント
if (state == "forward" && angle < backwardLimit) {
count += 1
basic.showNumber(count)
state = "neutral"
basic.pause(500)
}
basic.pause(50)
})
4. 解決策とポイント
MakeCode環境でのプログラム作成には、ブロックをうまく使いこなすことが重要です。特に、条件分岐を使って腕の振りを検知し、カウントのロジックを組み立てることがカギとなります。また、メトロノーム音を鳴らすためには、別スレッドで音を鳴らし続ける必要があります。
5. まとめとアドバイス
micro:bitを使用したプログラム作成は、最初は難しく感じるかもしれませんが、ブロックプログラムを使えば視覚的に理解しやすくなります。上記のコード例を参考に、MakeCode環境で自分のプログラムを作成してみてください。ぜひチャレンジしてみましょう!


コメント