pdインストールはここから
error opening audio internal portaudio errorが出る場合はmacのsettings→プライバシーとセキュリティよりフルディスクアクセルの許可とマイクの許可をonに
PD→settingsからaudio preferencesでマイクを設定

pd使い方はこちら
完成した音階判別システム

振動モータの動かし方は以下を参考にした。
音階がCに近いほど振動モータの振動が強くなるように設計
振動モータを動かすためのarduinoの回路(動くかの動作確認)
トランジスタとダイオードと抵抗が必要だった。



振動モータのテストファイルを作り動作確認
arduinoをpd上で動かしてみる(先頭のpdファイルで書き込み済み)
ここからfimataをDownload Firmata-2.2.zip (only the Arduino library and example sketches)をダウンロードしてpuredataのexternalsファイルに入れる。
pduinoを使うためにpd→help→externalを探すからpduinoをインストールし、externalsフォルダにできたpduinoフォルダの中からarduino.pdを外に出すと使えるようになった。かなりややこしい。
複雑なので以下のexternalsをそのままPdフォルダの中に入れてもOK

arduinoがpuredataのコードで動くかを確認する
arduinoでfirmataファイルを実行して以下のpdを実行する

close、devices、openの順にクリックする。
最後にトグルをonにして振動すれば成功。
次にアナログ信号で動くかテストする

ピンを11に差し替えてスライダーを動かして振動の強さが変われば成功。
条件式を書く
振動モータはどうやら1に近づくにつれて強くなり、0で強さがなくなるっぽい。
それなら条件式でCの音に近くなれば1に近づき、Gに近づくほど0に近づくようなif文を書く


時計と似た原理で11から離れるほど振動は弱くなる。よって1と9や2と8
は強さが同じである。計算しやすくするために0から4はそれぞれ10から6に変換した。

全ての数値を5から11に変換できたのでこれを0から1に変換する。
以下の2手順で完了する。


完成したのがこれだ。
下のトグル付きのやつは動作確認するためのおまけ。

条件分岐が多すぎて動作が重くなりそうなので、もっと改良できるかも。
具体的なピンの位置
振動モータ→23j 28j
11pin → 23g
29i → GND
3.3v → 22f
抵抗器 → 23h 27h
コンデンサ → 27f 28f 29f
ダイオード → 23i 28i
手順
arduinoを開く
スケッチの例からstandardfirmataを開いて実行する
puredataを開く
DSPをオンにする
close, devices, openの順にクリックする
最後にサーボモータで音がズレている方向を示す
サーボモータが動くかテスト
黒が5V
赤がGND
白がピン
このファイルを実行してみる。
puredataでも確認

こっちも0から1で180度動くっぽい
カラオケのバーのようにしたいのでCを真ん中の番号の5にして他の音階も数値を変換していく。あとはこれを振動モータと同じ容量で0から1の範囲に変換する。

動いた。