5188円で始めるフィジカルコンピューティング 第4回 〜テルミンつくってみるミン テルミンできたミンの巻〜

今までの連載:
5188円で始めるフィジカルコンピューティング 第1回 〜テルミンつくってみるミン イントロの巻〜
5188円で始めるフィジカルコンピューティング 第2回 〜テルミンつくってみるミン 動けArduinoさん!の巻〜
5188円で始めるフィジカルコンピューティング 第3回 〜テルミンつくってみるミン センサを使ってみるの巻〜

 やってきました連載第4回。ついに今回でテルミン(もどき)完成ですよおほほ。まずはArduinoテルミンに便宜上名前をつけてやります。イタリア製のArduinoにちなみ、イタリアっぽい名前がいいだろうということでアバッキオ(Abbacchio)と名づけます。名作、ジョジョの奇妙な冒険第5部の主人公の名前にあやかりました。
 まずは、テルミンについての説明ですが、一言で言うとテルミンについているアンテナと手の距離を近づけたり離したりすることで音の高さを調節できる楽器です。詳細な解説はWikipediaにゆずるとして、そのテルミンをどうやって実現するかというのを絵にしてあらわしてみました。

090601_テルミン解説
090601_テルミン解説 posted by (C)karaage
 あら!わかりやすい☆

 理解を簡単にするため、わざと色々な要素を省略していますが、本質的なところはそこそこ正しくモデリングできているんじゃないかなと勝手に思っています。

 じゃあこいつを実現するため、まずはハードウェアですね。Arduinoの入力に赤外線センサ、出力に圧電スピーカを繋ぎましょう。下の写真みたいに接続して下さい。

090601_ArduinoTheremin_01
090601_ArduinoTheremin_01 posted by (C)karaage
 ハードはこれで完成。なんてお手軽なんでしょう。

 次はソフトです。勝手にコピペしてもらっていいです。

/* Abbacchio
 * http://d.hatena.ne.jp/karaage/
 */

#define ANALOGMAX 1024
#define SPEAKERPIN 9 // 出力ピン
#define POTPIN 2    // 入力ピン

int val = 0;       // 入力した電圧値を格納する変数

// thermin parameter
float basetone = 2500; // 基準音
float sensivity = 5.8; // センサの感度調整
float valoffset = ANALOGMAX/5*0.5; // オフセット

void setup() {
  pinMode(SPEAKERPIN, OUTPUT);
}

// output audio
void playTone(int tone) {
  digitalWrite(SPEAKERPIN, HIGH);
  delayMicroseconds(tone);
  digitalWrite(SPEAKERPIN, LOW);
  delayMicroseconds(tone);
}

void loop() {
  val = analogRead(POTPIN);    // センサの電圧値を変数に格納

  // オフセット調整
  float tmpval = val - valoffset;
  if(tmpval < 0){
    tmpval = 0;
  }

  // 電圧値の調整
  float tone;
  tone = basetone - (tmpval * sensivity);
  if(tone < 1){
    tone = 1;
  }

  playTone((int)tone); // 音声出力
}

 手を近づけるほど、高い周波数の方形波が出るようなプログラムになっています。詳細な説明は相変わらずしません。わかる人にはわかる!変数の型は無駄な使い方をしているかも…興味ある人は、basetone, sensivity, valoffsetらへんの値を変えると音がどう変わるか、色々試してみるとよいかと思います。こいつをコンパイルしてアップロードすればアバッキオの完成です。


Arduinoテルミン Abbacchio零号機 テストラン01
 成功した図。蚊の鳴くような声で叫ぶアバッキオ君を堪能して下さい。

 ただ、音がかなり残念なためもうちょっとなんとかしたいな、しょうがないなぁのび太君は、というわけで、家になぜかギターアンプとギターのシールド(ケーブルのこと)がころがっているぜ的な人のために+600円でいい音を出す方法を伝授します。といっても、ブザーの代わりにギターのアンプに繋いでやるだけだったりします。要は方形波が出ているので、アンプで増幅してやれば大きい音がでるのです。そして、いい音のためにはお金がいるのが音楽界の常なのです。必要な部品は以下2つ。

■6.3mmモノラルジャック
 ギターのシールドが刺さるジャックです。

■ジャンプワイヤーセット
 ジャックとArduinoの接続に。半田付けしなくても接続できます。これはとにかく繋げればいいので「どんなものだって繋げてやんぜ!」的な電波な人は好きな方法で繋げてください。


090601_ArduinoTheremin_02
090601_ArduinoTheremin_02 posted by (C)karaage
 まずは、図のようにジャックとジャンプワイヤーをつないでやります。あとは、ブザーの代わりにこいつを繋げてやればOK。

090601_ArduinoTheremin_03
090601_ArduinoTheremin_03 posted by (C)karaage
 こんな感じにつなげたら完成。

 あと、補足ですが電源はUSBの電源からとるとあんまり安定しないです。原因は恥ずかしながら不明(赤外線センサが電流引っ張ってるのか、パソコンの電源ノイズかな)。とりあえず9Vの電源で動かすと安定しました(ArduinoはUSBの5V電源の代わりに、7V〜12Vの電源から5Vをつくることもできる)。気になる人は、ACアダプタ買って下さい。いい音のためにはお金がいるのが音楽界の常なのです。あと、必ず中心電極が+のACアダプタを使うようにしてください。よくわからない人はこれとか買えば多分大丈夫です。

 それではレッツプレイ!ということで、演奏してみました。曲はヨハン・ゼバスティアン・バッハで「小フーガト短調 BWV578」。


Arduinoテルミン Abbacchio零号機 テストラン02
 気分はバッハ。

 まあ、そんな感じで4回目にしてやっとしょぼいものが出来ました。ただ、色々不満点は隠せません。

1.音量の調整ができない
→本当のテルミンは2本アンテナがあり、1本で音の高さを、もう1本で音量を調整するのです。

2.音色が変えられない
→テルミンも基本は変えられない(はず)なので、これができたらテルミンより凄いかも。

3.色々むき出しでかっこ悪い
→これでは素敵女子なんて夢のまた夢。

 上記の問題解決するために、もうちょっとだけ続くかもしれません。無理かも。無理だったら今回でなんとなく最終回です。とりあえず5188円でできるのはここまで(すでに若干はみ出ていますが)なので、後はどんどんオプション料金追加していくんでそこんとこヨロシク!