Prev / Next / カメ太の日記

Arduinoで音楽演奏[dolittle]

2011-08-31

大学1年生向けの授業で、Arduinoに傾きを検知する3軸加速度センサ(Wii
リモコンと同じ原理)を載せて、ドリトルの音楽演奏と組み合わせてみま
した。X軸が音階、Y軸が打楽器です。

演奏している様子をYouTubeに置きました。

Arduinoと3軸加速度センサの配線は、「ドリトルで学ぶプログラミングの
仕組み[第2版]
」の110ページの回路です。

kasokudo

これはプログラムです。2つの配列に打楽器と2オクターブの音階を入れて、
入力値に応じた楽器と音階を演奏しています。メロディの楽器には17番の
ドローバーオルガンを使いました。

打楽器=配列!(ドラム!"ド" 作る)(ドラム!"タ" 作る)(ドラム!"ツ" 作る)作る。
打楽器数=打楽器!要素数?。

音階=配列!作る。
音階名=配列!”ド" "レ" "ミ" "ファ" "ソ" "ラ" "シ” 作る。
音階名!「|x| 音階!(メロディ!("_"+x)作る)入れる」それぞれ実行。
音階名!「|x| 音階!(メロディ!(x)作る)入れる」それぞれ実行。
音階数=音階!要素数?。

システム!"arduino" 使う。
a=Arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

xin=a!0 アナログ入力。yin=a!1 アナログ入力。zin=a!2 アナログ入力。
x値=フィールド!作る。y値=フィールド!作る。z値=フィールド!作る。


  x=xin!読む。y=yin!読む。z=zin!読む。
  x値!(x)書く。y値!(y)書く。y値!(y)書く。

  x楽器=楽器!17 作る。
  x=(x-70)*音階数/100。
  x楽器!(音階!(x)読む)設定。

  y=(y-70)*打楽器数/100。
  y楽器=打楽器!(y)読む。

  バンド!作る 400 テンポ(x楽器)(y楽器)追加 演奏 待つ。
」!1000 繰り返す。

a!とじろごま。


これは授業で使ったプログラムです。配列を使わなくて済むように、入力
値を条件分岐(if)で判断して音階などを決定する例で示しました。

システム!"arduino" 使う。
a=Arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

xin=a!0 アナログ入力。yin=a!1 アナログ入力。zin=a!2 アナログ入力。
x値=フィールド!作る。y値=フィールド!作る。z値=フィールド!作る。

x楽器=楽器!17 作る。

  x=xin!読む。y=yin!読む。z=zin!読む。
  x値!(x)書く。y値!(y)書く。y値!(y)書く。

  「x<100」!なら「音階="ド"」実行。
  「x>=100」!なら「音階="ミ"」実行。
  x楽器!(メロディ!(音階)作る)設定。

  「y<100」!なら「たいこ="ド"」実行。
  「y>=100」!なら「たいこ="タ"」実行。
  y楽器=ドラム!(たいこ)作る。

  バンド!作る 300 テンポ(x楽器)(y楽器)追加 演奏 待つ。
」!1000 繰り返す。

a!とじろごま。

permlink