[Step0]考案

楽器を突然作ると言っても、音楽知識の無い自分にはせいぜいリコーダーや鍵盤ハーモニカしかやったことがないため、どんな楽器が未来的でかつ、使いやすいか全く思い浮かばなかった。

音楽を聴くときの癖→音階を高さにする

自分はよく、音楽を聴くときにたまに、音楽の音程に手を擬似的に合わせて、上げたり下げたりしているときがある。
ここから思いつき、音階を高さにすれば、誰でも簡単に演奏できるのではないかと言うことで、ここでこの作品の大部分のコンセプト「使いやすい」が大分固まってきた。

「未来的」とは何だろう?

次に、考えなければいけないのは「未来的」と言うことである。
高さ(距離)を使用しようと思っているのは、もう決まっているので…
ここで、思いついたのは「超音波距離センサ」である。
これを使うことによって、平たい壁面や机に向けて演奏できるので、思いついたときは「これだ!」と思った。

偶然出来た使い方(蛇足)

HOWTO映像の最後の方に、服につけて手を壁代わりにして演奏しているところがあるが、実はこの使い方は全く想定しておらず、動画撮影の際に思いついた物で、この映像を無理矢理入れ込んだ物なので、演奏の映像が結構圧迫されてしまった。

[Step1] 試作機の作成

まず、すべてのセンサーやディスプレイをつないだ時に干渉したりしないかを確かめるために、試しにすべてを繋いで簡易的な機械を作った。

使用する電子部品

  • Arduino Nano (互換機)
  • HC-SR04 超音波距離センサー
  • タッチセンサー CATALEX TTP233B
  • ジョイスティック
  • 電圧ブザー
  • SSD1306 小型OLED(有機EL)ディスプレイ

試作機について

試作機は、使う予定のセンサー,ディスプレイ,ブザーをすべて繋いで、動作に影響が無いか確かめる。

試作プログラムの作成・実行

試作機の回路の動作確認をするために各センサーの状態(例:JoyStick →XYZ座標)を表示させるプログラムを作って、実行した。

特に問題は起きなかったので、回路は変更なし。

[Step2] プログラムの作成

まずプログラム内に#define を使って音程の周波数(C2〜C7)を予め定義しておく。
ソースコード:Arduino Source Code

距離の計測→音階に振り分け

今回は5cmから45.5cmまでの距離を振り分け範囲に指定し、音階を振り分ける。(5cm以下は計測が難しく、45.5cm以上は腕が届かないため)
この間の40.5cm間を8等分(1つにつき約5cm)してそれぞれにド〜一つ上のド(C4〜C5)を振り分ける。

色は、後記のジョイスティック座標の選択と一致させてある。

タッチしたら音が出るように実装

さっきのステップで振り分けられた音階は数値で登録されている。
次に、振り分けられた音をタッチセンサーが押されたら鳴るようにする。
この時、重要なのは押された間だけ鳴る様にした。

ディスプレイに音程、その他ステータスを表示する。

次に、SSD1306で音階の表示、その他のステータスを表示するようにする。
表示するのは以下のステータス
  • 音階(C,D,E,F,G,A,B,C)
  • 距離センサーが計測出来ているか (Low or Over)
  • オクターブの選択(UP,UP2,DOWN,DOWN2)
  • シャープの選択(#)

ジョイスティックでオクターブ選択

次は、ジョイスティックの位置によってオクターブを変化できるようにする。
この時、オクターブは最大で2つ上げ下げ出来るようにする。
対応座標は図の通りです。

ジョイスティックで半音上げられるようにする

このジョイスティックは、押し込む事が出来るので、半音あげるスイッチとしてここに振り分ける。

[Step3]3Dプリンターでケースの作成

この楽器は、片手にコントローラー・服に距離センサーをつけるため、2つケースを作ります。

使用3Dプリンター

  • 武藤工業 MF-1100
  • XYZprinting DaVinci mini w
(MF-1100のノズルサイズは3mm)

超音波センサーのケース作成

  • 3Dデータ:距離センサーケース
まず、設計図や実際に測った寸法をもとにして3Dデータを作ります。
この時、センサーの下に半田などの所々凸があるので、それを浮かせるように足を作ります。
そして、最後に印刷します。

本体側のケース作成

  • 3Dデータ:本体ケース
距離センサーのケースと同じように、各センサー類の寸法をもとにして、作成します。
こちらには、Mini-USB用の穴と距離センサーのコード用の穴を開けておきます。
また、超音波センサーの時と同じように足や、ねじ穴に通す用の円柱も設計します。
そして、印刷します。

[Step4]組み立て

今まで作ってきたケース、電子部品を組み込みます。
この工程に移る前に、Arduino NANOの端子の写真を撮っておきましょう。

センサー類の仮設置・ケースが合体できるか確認

組み立てに入る前に以下のことを確認してください。
  • ケースにセンサー類を所定の場所に入れて、図のように固定される事を確認してください。
  • ケースのジョイントも実際にはめて確かめてください。
  • 図の様にMini-USB端子が接続できるか確認してください。

もし、ケースに問題がある場合

上記の工程で、いずれかの1つが出来なかった場合、以下のことを試してみてください。
  • ネジ穴固定支柱が通らない
   →引っかかっている支柱を折ってしまいましょう
    支柱は最低2本(ジョイスティックは3本)あれば十分に固定できます。
  • ケースがはまらない
  →全体的にヤスリか何かで削ってみましょう。
   特に、印刷時のレイヤーが変わる部分に凸が発生する場合が高いですので、そこを削ってみてください。
  • USBが接続できない。
  →ヤスリで削って見てください。
   ここの部分は上の辺部分が浮いて印刷されるため、誤差が生じる事が高いです。

回路の再接続 1回目

固定するために一度回路を切ってしまったので、はんだで再接続します。
このときには、まだ全部をつなげないでください。
この時、出来るだけコードは短く作って使います。

センサー類の固定

このケースには、それぞれの場所に付けた、ネジ穴用の柱にセンサー側のネジ穴に通します。
ここに、グルーガンで固定します。
(タッチセンサーは、しっかりとケースに押しつけて接着してください。でないと検出できません。)
✳︎本来であれば、ここのキャップも3Dプリンターを使って固定したかったのだが、制作環境のプリンターでは印刷できなかったため、今回断念した。

回路の再接続 2回目

次に回路を完全に接続します。
このとき、Arduino NANOは上下逆さまなので、事前に取っておいた端子写真を見て確認してからはんだ付けするといいと思います。

試験動作してみよう

ここまでの行程が終わったら、試しにMini-USB端子をつないで見ましょう
そして、ディスプレイ・センサー・ブザーが動作することを確認できたら、次の最後の工程です。

ケースの合体

全てのセンサー等の固定と再接続が完成したら、最後の工程です。
本体ケースの上と下を合体させます。

[Step5]完成

以上で完成です。お疲れ様でした!
基本的なプログラムは、非常に簡単なものなので是非、自分の拡張機能を付けてみてください。

例:MIDIで音を鳴らす

SampleCode→Github
サンプルなので、1オクターブ分しか書いていませんが、ArduinoのSerial.writeでデータをProcessingに受け渡して、MIDIで演奏することができます。

このように、Arduino→PCに受け渡せるので、拡張方法はさまざまな方法でできます。