• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / microbit / micro:bitでSTEM教育:音楽機能を使ってみよう

micro:bitでSTEM教育:音楽機能を使ってみよう

2020年4月18日 by STEMSHIP コメントを書く

micro:bitは出力端子があり、これをスピーカと接続することで、音を出すことができます。MakeCodeは音楽ブロックがあり、ドレミ音階やメロディが用意されています。この音楽機能で、どのようなものが作れるのか?どうやってプログラムするのか?ということを紹介します。

なにができる?

MakeCodeには音楽機能のブロックがあります。micro:bitにはボタンが2つしかないので、これだけで演奏するのは難しいかもしれませんが、加速度センサや磁気センサの値に応じて、音階が変わるようなプログラムにすれば、オリジナルの楽器が作れます。

音楽機能とは?

MakeCodeの音楽機能は、micro:bitの端子P0から、ドレミ等の音階に相当する周波数の信号を出力します。例えば、「真ん中のド」の場合だと、262Hzの矩形波(PWM信号)を出力します。micro:bitにはスピーカーがないので、このP0端子とGND端子をイヤホンジャックや圧電スピーカ(パッシブブザー)に接続して音を鳴らします。

また、今回のプログラムでは使用しませんが、「メロディ」が用意されており、歓喜の歌・ハッピーバースデー・ウェディングマーチなどをリストから選択するだけで再生できます。

どんな物が作れる?

今回のサンプルでは、micro:bitの傾きを加速度センサで検知して、その傾きに応じて音階が変わるようにしました。音を鳴らす/鳴らさないは、ボタンAを押しているかどうかで判断します。

プログラミング

はじめに、「最初だけ」ループで、変数の初期化を行います。使用する変数は2つ、micro:bitの傾きを格納する「傾き」と、使用する音階真ん中のド~上のドを格納する「list」です。listは配列と呼ばれる変数ので、複数の値を格納することができます。このブロックは、「高度なブロック」の「配列」にあります。変数初期化が完了した印として、最後にスマイルマークを表示するようにしました。

「ずっと」ループでは、ボタンAが押されている場合は音を出し、押されていないときは音を出さないように、論理ブロックで条件分岐します。音を出さない場合は、音楽ブロックの「休符」を使用します。

音を鳴らすのは、「音を鳴らす 高さ(Hz)」ブロックを使用します。鳴らす音は、最初に準備した変数「list」に格納された音です。listには複数の音が格納されているので、何番目の音を鳴らすか選択します。先頭のブロックは0番目です。1番目ではないので注意が必要です。したがって、ここでは0~7番目の値を指定する必要があります。今回は、この値をmicro:bitの傾きと連携させたいので、「傾き」番目の値にします。

micro:bitの傾きは、「加速度Xの絶対値」を使用するのですが、この値は0~1023の範囲をとります。これをそのまま使用すると、配列listの項目数と異なるため、エラーになります。そこで使用するのでが、「変数をマップする」というブロックです。このブロックは「計算」の中にあります。このブロックを使用して、0~1023を0~7の範囲に変換します。

結果の上限を「7」ではなく、「変数listの長さ - 1」としました。「7」でもプログラムは動作しますが、プログラムを改造してlistの要素数が変わったとき、「7」だと思った動作になりません。プログラムを作ったときは、ここの値を変える必要があるのをすぐに気づくことができると思いますが。1ヶ月後、1年後はどうでしょうか?このようなことを防ぐため、「変数listの長さ - 1」としました。変数listの長さは、要素の数なので、今回の場合だと「8」です。そのため、-1をする必要があります。

これをJavascriptで書くと、下記のとおりです。音階が周波数で宣言されているので、スッキリして見えますね。

let 傾き = 0
let list = [262, 294, 330, 349, 392, 440, 494, 523]
basic.showIcon(IconNames.Happy)
basic.forever(function () {
    if (input.buttonIsPressed(Button.A)) {
        傾き = Math.map(Math.abs(input.acceleration(Dimension.X)), 0, 1023, 0, list.length - 1)
        led.plotBarGraph(
        傾き,
        list.length - 1
        )
        music.ringTone(list[傾き])
    } else {
        music.rest(music.beat(BeatFraction.Whole))
        basic.clearScreen()
    }
})

MakeCodeの操作方法がよくわからない場合は、プログラミングのキャプチャ動画を御覧ください。

まとめ

micro:bitで音を出すためには、スピーカを接続する必要があるため、少し敷居を感じたかもしれません。とはいえ、たった2本の線をクリップで接続するだけで、音を鳴らすことができるというのは、とても扱いやすいデバイスと言えます。今回は、ボタンAのみを使用しましたが、ボタンBを押したときに、音程を1オクターブ上げるなど、プログラムの改良余地は色々あると思いますので、オリジナルの楽器を創作してみてください。

Filed Under: microbit 関連タグ:音楽

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM