今回からいよいよ火曜日のワークショップでとり扱かってきたArduinoと、この月曜のワークショップでやってきたPdを接続します。PdとArduinoで相互に通信ができるようにすることで、例えば曲げセンサーや加速度センサーを「楽器」のコントローラーとして使用したり、逆にPdで作成したパターンをLEDへにフィードバックさせたりといった相互の連携が可能となります。PdとArduinoを連携するには「Pduino」という外部オブジェクトをダウンロードして使用します。今回はまず、このPduinoを利用するための環境設定と動作確認を確実に行います。設定が完了したら、Pduinoを使用した簡単なパッチを作成し、実際にArduinoとの相互の連携を試してみましょう。必要となるハードウェアとソフトウェア今回必要となる機材は、以下の通りです。接続の方法やセットアップの方法は、手順を追って解説していきます。Xでの使用を前提に解説します。IDEFirmataPduinoArduinoの設定確認まずは、Arduinoの設定をします。Arduinoオフィシャルページの手順に従って、Arduinoの設定をしましょう。Xこの説明に従って、以下の順で進めていきます。FirmataのインストールArduinoとPdの連携は以下のようにイメージしてください。ここでは、ArduinoとPdが、2つの外部プログラムを通して相互に連携しています。Firmataのインストールでは、まずArduino側から準備を始めましょう。ArduinoにはFirmataと呼ばれる、ArduinoなどのマイコンとPCとのコミュニケーションのための汎用のプロトコルを使用します。そのために、ArduinoにFirmataのためのプログラムをアップロードして使用します。Firmata」というプログラムを使用していきます。Arduinoのメニューから以下のプログラムを開きます。StandardFirmataこのプログラムを、Arduinoに転送しましょう。これでArduino側の準備は完了です。今後Arduinoのプログラムを修正したり入れ替える必要はありません。Firmataの動作確認Firmataの動作確認には、プロジェクトページから配布されているテストプログラムを使用します。http://www.pjrc.com/teensy/firmata_test/firmata_test.dmgをダウンロードします。プログラムを展開し、FirmataをアップロードしたArduinoがUSBに接続されている状態で「firmata_test.app」を起動します。プログラムのメニューバー「Port」メニューから接続しているポートを選択すると、下記のようなテスト画面になります。21までの入出力をGUIで操作しながら試すことが可能です。次にPd側の準備をしましょう。PdにはPduinoという拡張機能を使用します。下記のPduinoのプロジェクトページからダウンロードします。http://at.or.at/hans/pd/objects.htmlこのページの中にある「Pduino-0.5.zip」をダウンロードします。Firmataは既に準備してあるので必要ありません。手始めに、展開したフォルダの中にある「arduino-test.pd」を起動してみましょう。下記のように全てのオブジェクトが点線にならずに実体として表示されたら、きちんとPduinoが読み込まれています。Pduinoの使用手順Pduinoを使用して、PdとArduinoを連携するには、いくつかの手順をふむ必要があります。下記のパッチはPduinoでArduinoへメッセージへ送るまでの手順を簡単に示したものです。このパッチを操作しながらPduinoの使用手順をみていきましょう。連携のためのメインのオブジェクトとなる「arduino」オブジェクトを配置します。このarduinoオブジェクトにメッセージを送ることで連携のための設定をしていきます。デバイスのシリアルポートの番号を調べるarduinoオブジェクトに「device」というメッセージ入力します。すると、Pdのコンソールに使用可能なシリアルポートの一覧とその番号が表示されます。以下のような形式になります。/dev/tty.usbserial-A900ceWs例えば、この場合は「/dev/tty.usbserial-A900ceWs」を使用するので、デバイス番号は「2」になります。デバイス番号を指定してシリアルポートをオープン次にこの取得したデバイス番号を利用して、シリアルポートをオープンします。《番号》」というメッセージをarduinoオブジェクトに入力します。念のため、openする前に「close」メッセージを入力して確実にポートを閉じておくと良いでしょう。このパッチではcloseの入力とあわせて、openのポート番号を変更できるよう工夫しています。IDEを使用する際と同様に、Arduinoの全ての入出力は、使用する前にPinModeを設定しなくてはいけません。《ピンNo.》《モードNo.》」というメッセージを入力することで設定します。モード以下のように決められています。値の送受信シリアルポートとPinModeの設定が完了したら、いよいよ値を送受信します。このパートは送受信する内容(Digital/Analog)(Input/Output/PWM/Servo)によってやり方が異る部分ですので、以下のセクションで順番に解説していきます。シリアルポートを閉じる終了する際には、最後にシリアルポートを閉じて他のプログラムからも使えるようデバイスを開放します。「close」メッセージを入力すると、シリアルポートが閉じられます。IDEで作成したLEDを点滅させる簡単なプログラム(Blink)のPdバージョンを作成してみましょう。Outなので、PinModeは「1」になります。LEDは、13番ピンに接続すると仮定します。PinModeの設定は以下のメッセージとなります。OutのOn/Offを切り替えます。そのためには「digital」メッセージをarduinoオブジェクトに入力します。具体的なメッセージは以下の形式となります(13番ピンにLEDが接続されていると仮定しています)。LED点灯この点灯消灯のタイミングをmetroを使用して定期的に切り替わるようにしてみましょう。以下のようなパッチとなります。modulation)を省略した名称です。高速に変化するパルス波の幅を調整することでLEDの明度をなめらかに変更したように錯覚させることが可能となります。UNOでは、3,5,6,9,10,11番)を活用してあらかじめPWMで制御する機能が付随しています。PWMにするためのPinModeの番号は「3」です。11番ピンを使用すると仮定した場合は、以下のメッセージを入力します。3あとは、0.0〜1.0の範囲で明さを指定します。《ピン番号》《値》」というメッセージにする必要があります。以下のようになります。通常の明るさこの仕組みを利用した、スライダーでLEDの明るさを調整するパッチを作成してみましょう。工夫を加えて、オシレータのSin波の波形を明るさに変換して、なめらかにフェードイン/フェードアウトするLEDを作成してみましょう。Inを試してみましょう。初めに単純な回路から試してみたいと思います。1に接続する回路をブレットボードで作成しましょう。このアナログ入力を受けとるには以下のようなパッチを使用します。《Pin番号》1」というメッセージをarduinoオブジェクトに入力してください。1番ピンをアナログ入力を使用したい場合には、以下のようなメッセージとなります。1Arduinoに入力されたアナログ値を取り出す際にも工夫が必要です。アナログの出力は以下のような形式のメッセージとして、arduinoオブジェクトの第1アウトレットから出力されます。アナログピンの1番に、0.25の値が入力された場合には以下のメッセージが出力されます。0.25このメッセージを分解して値だけをとりだすには、「route」オブジェクトを使用します。これらの機能を統合すると以下のようなパッチとなるでしょう。センサーを繋げてみるでは、可変抵抗ではなくセンサーをつないでその値が取得できるか試してみましょう。ここでは照度センサーを使用した例を示します。下記のようにブレッドボードで配線してください。Pd側のパッチは先程のままで値を取得できるはずです。まとめ今日の内容はここまでとします。ここまでで、PdとArduinoの連携の基礎は理解できたのではないでしょうか。次回はこの連携を使用して、Arduinoで取得したセンサーの情報をもとにPdで音響合成やサンプリングプレイバックを試していきます。