Touch De Banana

# はじめに
　2019/11/17に大阪で開催された[dotFes](https://www.dotfes.jp/2019osaka/)にKANSAI TouchDesigner Users with SPEKTRAでTouchDesignerを用いた作品の展示をデジタルアートと電子音楽ユニットの∀RroWsでさせていただきました。その際に展示したものがこれ。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/dotFes?src=hash&amp;ref_src=twsrc%5Etfw">#dotFes</a> での∀RroWsの展示はIoTバナナを使った音と映像、センサを連携した作品になります。映像制作して頂いている江口さんから映像が届きました。これに音楽が加わりバナナでセッションできます。ぜひ遊びに来てください。<br>当日までさらに作り込んでいきます！ <a href="https://t.co/wwutWHy6ux">pic.twitter.com/wwutWHy6ux</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1194391400994918400?ref_src=twsrc%5Etfw">November 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今日は <a href="https://twitter.com/hashtag/dotFes?src=hash&amp;ref_src=twsrc%5Etfw">#dotFes</a> でバナナ展示でした！実はこれ…時間がたつと(次のツイート) <a href="https://t.co/IuqSb0oYjJ">pic.twitter.com/IuqSb0oYjJ</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1196029594807046144?ref_src=twsrc%5Etfw">November 17, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

　バナナを曲げたり、振ると音が出たり、合わせて映像が変化するものになります。動画では分かりにくいですが、展示ではこれにAbletonLiveと連携しPushというデバイスでボタンを押すと簡単に音楽を生成でき、音楽を鳴らしながら、合わせてバナナを操作して楽しむものです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">TDabletonでTouchDesignerとAbletonLive連携したら色々やれますね。今回、IoTバナナで音やエフェクトかけれますが、Pushで演奏し、テンポをOSCで送って映像と同期したりセッションしよう。<br>dotFesはTouchDesignerで音と映像、センサ、ソフトウェア連携と盛り盛りにしたので、みんなで遊ぼう！ <a href="https://t.co/CFdflf2dPz">pic.twitter.com/CFdflf2dPz</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1193888034363600896?ref_src=twsrc%5Etfw">November 11, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
　単純ではありますが、TouchDesignerを使うと、簡単に、音と映像、センサ、他ソフトウェア連携ができることを紹介したいと制作しました。
　
# センサ連携
　センサのデータを取得し、そのデータに応じて簡単に映像や音などを変化させることができるのが、TouchDesignerの面白いところです。しかし、特にセンサを扱う情報が少ないように思います。今回、加速度センサと曲げセンサをESP32というデバイスに接続して、Wi-Fi経由、または有線でデータを送れる仕組みを作りましたので、そのあたり詳しくご紹介します。なお、実際作るには半田付けとか電子工作が必要になります。

**＜使用したもの＞**
　以下、amazonやスイッチサイエンスにリンクを貼っています。
①[ESP32](https://www.amazon.co.jp/waves-NodeMCU-32S-ピンヘッダ未装着-Bluetooth-ワイドバージョン/dp/B07M88PQTR/ref=sr_1_37?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=esp32&qid=1576410256&sr=8-37)
　バナナに埋め込むため、コンパクトにする必要があり、ピンヘッダは未装着のものをあえて使っています。
②[加速度センサ](https://www.amazon.co.jp/HiLetgo®-ADXL345-加速度モジュール-チルトセンサモジュール-傾斜センサモジュール/dp/B01N632NWF/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E5%8A%A0%E9%80%9F%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5&qid=1576410407&sr=8-5)
③[曲げセンサ](https://www.switch-science.com/catalog/4062/)
④[9V 充電式電池(ESP32給電用)](https://www.amazon.co.jp/【充電器不要%EF%BC%81USB充電可能】9v-elzle-リチウムイオン充電池-屋内煙探知機対応-USBケーブル付き/dp/B07TJGS7L8/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=9V+%E5%85%85%E9%9B%BB%E9%9B%BB%E6%B1%A0&qid=1576410453&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzUklHMlZaSThOWUoxJmVuY3J5cHRlZElkPUEwOTQ4NzE2MVU3WFBQSTc5S1BXRyZlbmNyeXB0ZWRBZElkPUEyTzQ1STRFS1U4VkVQJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)
　バナナを充電できるように充電式を選定
⑤[USB変換コネクタ](https://www.amazon.co.jp/gp/product/B071WBG5GL/ref=ppx_yo_dt_b_asin_title_o08_s00?ie=UTF8&psc=1)
　バナナの外へUSB端子引き出すのに用いました　
⑥[バナナ](https://www.amazon.co.jp/gp/product/B06XJSDPYR/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1)
　スクイーズと言う、伸びるバナナのおもちゃです。

# センサデータの送信
　センサは今回、加速度センサと曲げセンサを使用しました。センサを使うには、センサと、そのセンサからのデータを読み取り、PCに送信するためにArduinoなどのマイコンボードが必要になります。今回は無線でPCへデータ送信したく、Wi-Fiを使えるESP32を使用しました。

　データは無線ならOSC通信で、有線ならSerial通信送ります。ESP32のプログラムを詳しく紹介したいところですが、長くなるので、[github](https://github.com/snafkinliberty/TouchDesigner)にあげますので、参考にしていただければと思います。
　単純にサンプルを探して、並べたようなプログラムですが、Arduinoのプログラム経験者なら読めば分かると思います。プログラム内にコメントで解説をいれておきます。逆にArduino経験がないと難しいので、ぜひ、Arduinoでセンサを使うところから始めてみて下さい。

　ここでは簡単にポイントだけ説明しておくと、データの送信に関しては、Serial通信なら、Serial.print("＿＿＿＿")など書くと思いますが、この”＿＿＿＿”をTouchDesignerならSerialDatで取れます。
　OSC通信なら、Wi-Fi接続やOSC送信用のプログラムを追加し、指定したポート番号にデータを送ることになります。

①加速度センサについて
　I2C接続で使用します。x,y,z3軸の情報を得られます。やや情報がなく試行錯誤しましたが、プログラムはサンプルプログラムを参照/流用ください。ESP32とはリード線を別途容易して半田付けをしています。

②曲げセンサについて
　曲げセンサは曲げ量に応じて抵抗が変化します。定電圧をかけると流れる電流が変化します。分圧回路で抵抗を直列に2つつなげ、抵抗間の電圧を読めば、抵抗の変化量を電圧で測定できます。この測定した電圧値をanalogReadで取得し、送信しています。ESP32とはリード線や上記抵抗を別途容易して半田付けをしています。
[参考サイト](https://hsh.s2jp.com/2011/09/arduino-voltmeter/)

③ESP32への接続
　ESP32はVin/GNDに9V電池を接続しています。スイッチON/OFFをしたいので、この間にスイッチを組み込んでいます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">某部材にミニマムに組み込む必要があり、加速度センサをESP32基板上に半田付け。とりあえずシリアル通信でデータは取り出せる。お次はOSCにトライ。 <a href="https://t.co/nF2DQq1h1H">pic.twitter.com/nF2DQq1h1H</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1186310519013048320?ref_src=twsrc%5Etfw">October 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ESP32からTouchDesignerへOSC送受信がうまくいかないと思ったら、以前のVer.の入ってるノートPCに変えたら問題なくいける。ハード(デスクトップPC)なのか(以前はいけてた)、ソフトのVer.依存だろうか。検証要。とりあえず前のようにデータは送れることを確認。もう一個センサ追加予定。 <a href="https://t.co/h6jVEL2FkU">pic.twitter.com/h6jVEL2FkU</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1186332964646338560?ref_src=twsrc%5Etfw">October 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">半田付け完了。<br>加速度に加え、曲げのデータのOSC送信もいけました。<br>これで例のブツに埋め込める(￣▽￣) <a href="https://t.co/iTgKwxbSaH">pic.twitter.com/iTgKwxbSaH</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1186472834098323456?ref_src=twsrc%5Etfw">October 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

④バナナへの組み込み
　充電式の9V電池を用いてESP32に給電しました。また、充電やESP32のプログラム更新ができるようにUSB端子をバナナの端から出せるように、microUSB→USB typeC変換パーツを用いました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">充電式の9V電池。変換プラグをさすことで、バナナの根元にコネクタを取り付けられるようにできないかと、これはいけるのでは。バナナは中にセンサ類入れて、切口は塞ぐので、電池交換がネックだったのがこれで解決できるかな。 <a href="https://t.co/ax70gU8uls">pic.twitter.com/ax70gU8uls</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1187335539189374976?ref_src=twsrc%5Etfw">October 24, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">IoTバナナは上にコネクタとスイッチを仕込んでます。9V電池充電用とESP32のプログラム変更用のUSB typeC。TouchDesignerゆえバナナです。 <a href="https://t.co/cW6mJe4svp">pic.twitter.com/cW6mJe4svp</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1191384975079198723?ref_src=twsrc%5Etfw">November 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">IoTバナナのセンサ部を製造中。2個完成ですが、計4個とりあえず用意しよう。今週全部完成させよう。お次は合わせる音も選ばないと。サンプル音源は色々あるけど、どんなの合うかな。音のイメージも固めて、音との連携も仕上げよう。 <a href="https://t.co/dYAv53rxVC">pic.twitter.com/dYAv53rxVC</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1189198548874608641?ref_src=twsrc%5Etfw">October 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

# センサデータの取得
　ここからようやくTouchDesignerですが、センサデータの取得はSerial通信ならSerialDat、OSC通信ならOSCinDatを用います。あとはこのDatから得られたデータを加工して、センサのオンオフを取れるように加工します。

　SerialDatから数値データを取得するまでを紹介します。
全体イメージ
![5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/ce67b231-8763-6b44-965f-e2d53a1d0b4c.jpeg)
まずは、ESP32をPCに接続時、SerialDatでCOMポートを指定します。COMポートが分からない場合はデバイスマネージャーを開いてポート番号を確認しましょう。
OSCinDatを用いる場合は、esp32のプログラム内で指定したポート番号を入力すれば、同じWi-Fiネットワークに接続していれば、データを受信できると思います。以下のオペレータの接続方法は同じです。

![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/2f9cdaf0-31bb-dcd3-e1ac-6427b902db3a.jpeg)
次にConvertDatでテーブルデータに変換します。Split Cells atに実は半角スペース入れています。これで1行のデータをテーブルに分割しています。ここはESP32のプログラムでどうSerial.print("_______")を記述するかで変わります。僕はスペース区切りにしたので、スペースを入れています。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/d86802a6-af17-e33e-189e-e1f25e1f96a7.jpeg)
次いでSelectDatでテーブルのうち欲しいデータを選択します。
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/ddfdfcf8-c313-59d0-4c92-37cafe08fe67.jpeg)
Start Row/Col IndexやEnd Row/Col Indexを変えて欲しいデータを抽出します。
今回、ESP32 からは加速度のx,y,zと曲げ量のbで4つのデータを取得しています。それぞれSelectDatで取得します。
![4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/2b37b5d1-ed23-5641-3bd9-d433deb6ad68.jpeg)
最後にConstantChopでSelectDataの値を取得すれば、あとは閾値設けてオンオフをさせればよく(例えばMathChopで閾値分を差し引き、LogicChopで0以上の時、1にするとか)、やりたい放題ですね！

　映像の方は簡単に動作確認のため作成しましたが、実際は∀RroWs Eguchiさんに担当頂きました。詳しくはきっと12/24の本AdventCalenderで紹介してくれると思います。

# 最後に
　今回、実際にセンサ連携するにはセンサを組み込んだデバイスするのが、やや難しいかもしれません。これができると映像のみではなくインスタレーションなど制作できるようになるので、オススメです。
　
　今回展示でお客さんと話していて、関西でもWorkShopをやって欲しいとのリクエストがたくさんありました。∀RroWs Eguchiさんと実際に準備を進めています。年明け以降で開催する予定です。

　また、学んでも発表できる場が少ないこともあり、現在、そのような場をセットで考えています。実際、電子音楽祭などでライブをしていてVJのニーズがあったり(関西TD会メンバーに今年はVJ出演していただきました。)、ライブハウスや商店街/農作物販売所などでインスタレーションの相談もあり、ぜひ、一緒に学んで展示などし、合わせて社会問題解決に貢献したり、独自に関西の文化を構築できればと考えています。その際は別途案内しますので、興味のある方は、ぜひご参加下さい。

　今回、情報が多く、説明が不十分な箇所もあります。随時加筆していきます。