はじめに
2019/11/17に大阪で開催されたdotFesにKANSAI TouchDesigner Users with SPEKTRAでTouchDesignerを用いた作品の展示をデジタルアートと電子音楽ユニットの∀RroWsでさせていただきました。その際に展示したものがこれ。
#dotFes での∀RroWsの展示はIoTバナナを使った音と映像、センサを連携した作品になります。映像制作して頂いている江口さんから映像が届きました。これに音楽が加わりバナナでセッションできます。ぜひ遊びに来てください。
— Tomoya@∀RroWs (@snufkinliberty) November 12, 2019
当日までさらに作り込んでいきます! pic.twitter.com/wwutWHy6ux
今日は #dotFes でバナナ展示でした!実はこれ…時間がたつと(次のツイート) pic.twitter.com/IuqSb0oYjJ
— Tomoya@∀RroWs (@snufkinliberty) November 17, 2019
バナナを曲げたり、振ると音が出たり、合わせて映像が変化するものになります。動画では分かりにくいですが、展示ではこれにAbletonLiveと連携しPushというデバイスでボタンを押すと簡単に音楽を生成でき、音楽を鳴らしながら、合わせてバナナを操作して楽しむものです。
単純ではありますが、TouchDesignerを使うと、簡単に、音と映像、センサ、他ソフトウェア連携ができることを紹介したいと制作しました。 # センサ連携 センサのデータを取得し、そのデータに応じて簡単に映像や音などを変化させることができるのが、TouchDesignerの面白いところです。しかし、特にセンサを扱う情報が少ないように思います。今回、加速度センサと曲げセンサをESP32というデバイスに接続して、Wi-Fi経由、または有線でデータを送れる仕組みを作りましたので、そのあたり詳しくご紹介します。なお、実際作るには半田付けとか電子工作が必要になります。TDabletonでTouchDesignerとAbletonLive連携したら色々やれますね。今回、IoTバナナで音やエフェクトかけれますが、Pushで演奏し、テンポをOSCで送って映像と同期したりセッションしよう。
— Tomoya@∀RroWs (@snufkinliberty) November 11, 2019
dotFesはTouchDesignerで音と映像、センサ、ソフトウェア連携と盛り盛りにしたので、みんなで遊ぼう! pic.twitter.com/CFdflf2dPz
<使用したもの>
以下、amazonやスイッチサイエンスにリンクを貼っています。
①ESP32
バナナに埋め込むため、コンパクトにする必要があり、ピンヘッダは未装着のものをあえて使っています。
②加速度センサ
③曲げセンサ
④9V 充電式電池(ESP32給電用)
バナナを充電できるように充電式を選定
⑤USB変換コネクタ
バナナの外へUSB端子引き出すのに用いました
⑥バナナ
スクイーズと言う、伸びるバナナのおもちゃです。
センサデータの送信
センサは今回、加速度センサと曲げセンサを使用しました。センサを使うには、センサと、そのセンサからのデータを読み取り、PCに送信するためにArduinoなどのマイコンボードが必要になります。今回は無線でPCへデータ送信したく、Wi-Fiを使えるESP32を使用しました。
データは無線ならOSC通信で、有線ならSerial通信送ります。ESP32のプログラムを詳しく紹介したいところですが、長くなるので、githubにあげますので、参考にしていただければと思います。
単純にサンプルを探して、並べたようなプログラムですが、Arduinoのプログラム経験者なら読めば分かると思います。プログラム内にコメントで解説をいれておきます。逆にArduino経験がないと難しいので、ぜひ、Arduinoでセンサを使うところから始めてみて下さい。
ここでは簡単にポイントだけ説明しておくと、データの送信に関しては、Serial通信なら、Serial.print("____")など書くと思いますが、この”____”をTouchDesignerならSerialDatで取れます。
OSC通信なら、Wi-Fi接続やOSC送信用のプログラムを追加し、指定したポート番号にデータを送ることになります。
①加速度センサについて
I2C接続で使用します。x,y,z3軸の情報を得られます。やや情報がなく試行錯誤しましたが、プログラムはサンプルプログラムを参照/流用ください。ESP32とはリード線を別途容易して半田付けをしています。
②曲げセンサについて
曲げセンサは曲げ量に応じて抵抗が変化します。定電圧をかけると流れる電流が変化します。分圧回路で抵抗を直列に2つつなげ、抵抗間の電圧を読めば、抵抗の変化量を電圧で測定できます。この測定した電圧値をanalogReadで取得し、送信しています。ESP32とはリード線や上記抵抗を別途容易して半田付けをしています。
参考サイト
③ESP32への接続
ESP32はVin/GNDに9V電池を接続しています。スイッチON/OFFをしたいので、この間にスイッチを組み込んでいます。
某部材にミニマムに組み込む必要があり、加速度センサをESP32基板上に半田付け。とりあえずシリアル通信でデータは取り出せる。お次はOSCにトライ。 pic.twitter.com/nF2DQq1h1H
— Tomoya@∀RroWs (@snufkinliberty) October 21, 2019
ESP32からTouchDesignerへOSC送受信がうまくいかないと思ったら、以前のVer.の入ってるノートPCに変えたら問題なくいける。ハード(デスクトップPC)なのか(以前はいけてた)、ソフトのVer.依存だろうか。検証要。とりあえず前のようにデータは送れることを確認。もう一個センサ追加予定。 pic.twitter.com/h6jVEL2FkU
— Tomoya@∀RroWs (@snufkinliberty) October 21, 2019
半田付け完了。
— Tomoya@∀RroWs (@snufkinliberty) October 22, 2019
加速度に加え、曲げのデータのOSC送信もいけました。
これで例のブツに埋め込める( ̄▽ ̄) pic.twitter.com/iTgKwxbSaH
④バナナへの組み込み
充電式の9V電池を用いてESP32に給電しました。また、充電やESP32のプログラム更新ができるようにUSB端子をバナナの端から出せるように、microUSB→USB typeC変換パーツを用いました。
充電式の9V電池。変換プラグをさすことで、バナナの根元にコネクタを取り付けられるようにできないかと、これはいけるのでは。バナナは中にセンサ類入れて、切口は塞ぐので、電池交換がネックだったのがこれで解決できるかな。 pic.twitter.com/ax70gU8uls
— Tomoya@∀RroWs (@snufkinliberty) October 24, 2019
IoTバナナは上にコネクタとスイッチを仕込んでます。9V電池充電用とESP32のプログラム変更用のUSB typeC。TouchDesignerゆえバナナです。 pic.twitter.com/cW6mJe4svp
— Tomoya@∀RroWs (@snufkinliberty) November 4, 2019
IoTバナナのセンサ部を製造中。2個完成ですが、計4個とりあえず用意しよう。今週全部完成させよう。お次は合わせる音も選ばないと。サンプル音源は色々あるけど、どんなの合うかな。音のイメージも固めて、音との連携も仕上げよう。 pic.twitter.com/dYAv53rxVC
— Tomoya@∀RroWs (@snufkinliberty) October 29, 2019
センサデータの取得
ここからようやくTouchDesignerですが、センサデータの取得はSerial通信ならSerialDat、OSC通信ならOSCinDatを用います。あとはこのDatから得られたデータを加工して、センサのオンオフを取れるように加工します。
SerialDatから数値データを取得するまでを紹介します。
全体イメージ
まずは、ESP32をPCに接続時、SerialDatでCOMポートを指定します。COMポートが分からない場合はデバイスマネージャーを開いてポート番号を確認しましょう。
OSCinDatを用いる場合は、esp32のプログラム内で指定したポート番号を入力すれば、同じWi-Fiネットワークに接続していれば、データを受信できると思います。以下のオペレータの接続方法は同じです。
次にConvertDatでテーブルデータに変換します。Split Cells atに実は半角スペース入れています。これで1行のデータをテーブルに分割しています。ここはESP32のプログラムでどうSerial.print("_______")を記述するかで変わります。僕はスペース区切りにしたので、スペースを入れています。
次いでSelectDatでテーブルのうち欲しいデータを選択します。
Start Row/Col IndexやEnd Row/Col Indexを変えて欲しいデータを抽出します。
今回、ESP32 からは加速度のx,y,zと曲げ量のbで4つのデータを取得しています。それぞれSelectDatで取得します。
最後にConstantChopでSelectDataの値を取得すれば、あとは閾値設けてオンオフをさせればよく(例えばMathChopで閾値分を差し引き、LogicChopで0以上の時、1にするとか)、やりたい放題ですね!
映像の方は簡単に動作確認のため作成しましたが、実際は∀RroWs Eguchiさんに担当頂きました。詳しくはきっと12/24の本AdventCalenderで紹介してくれると思います。
最後に
今回、実際にセンサ連携するにはセンサを組み込んだデバイスするのが、やや難しいかもしれません。これができると映像のみではなくインスタレーションなど制作できるようになるので、オススメです。
今回展示でお客さんと話していて、関西でもWorkShopをやって欲しいとのリクエストがたくさんありました。∀RroWs Eguchiさんと実際に準備を進めています。年明け以降で開催する予定です。
また、学んでも発表できる場が少ないこともあり、現在、そのような場をセットで考えています。実際、電子音楽祭などでライブをしていてVJのニーズがあったり(関西TD会メンバーに今年はVJ出演していただきました。)、ライブハウスや商店街/農作物販売所などでインスタレーションの相談もあり、ぜひ、一緒に学んで展示などし、合わせて社会問題解決に貢献したり、独自に関西の文化を構築できればと考えています。その際は別途案内しますので、興味のある方は、ぜひご参加下さい。
今回、情報が多く、説明が不十分な箇所もあります。随時加筆していきます。