TouchDesigner×NefryBT(Arduino)×Grove Sensor(超音波センサー)連携まとめ
最近これ作りました。↓
赤いスマホスタンドに乗っている青いセンサーの前で手を前後にかざすと波の動き方が変わるインタラクティブな作品です。早速ですが、仕組みについて解説したいと思います。
仕組み
手を前後に動かす
↓
超音波センサー(手とセンサーまでの距離を測定)
↓
NefryBT(距離の測定結果をリアルタイムに取得)
↓
TouchDesigner(NefryBTで取得した値を取得して波の動きをリアルタイムに反映する)
環境
・TouchDesigner(2017.16360)
→今回はMac環境で実施
・NefryBT(Arduino)
→今回はNefryBTというArduino互換のものを利用しましたが、Groveのセンサーが取り付けやすいというだけで採用しました。ディスプレイもくっついていますがあってもなくても良いです。
・Grove - Ultrasonic Ranger
→超音波センサーです。物体とセンサーとの距離を測定します。
NefryBTでGroveセンサーの値の取得の仕方
NefryBTでGroveセンサーをつなげる時の?について
→実装時に調べたのがこちらの記事のまんまで同じように取れるのでほぼこれコピペで良いです。非常に助かりましたw
NefryBTで値が取れたら
TouchDesignerで取得したい値をSerial.printlnで取得します。print系の関数を利用するということがポイントです。今回はcmで取得した値を渡したいのでRangeInCentimetersをprintで実行してます。これでスクリプトをNefryBTに書き込んで実行しておいてください。
TouchDesignerでシリアルポート経由で値を取得する。
1.DAT系のOPにあるSerialを選択する。
2.選択するとこんな感じで2個出ると思います。
3.SerialのプロパティのPortから今接続されているNefryBTのシリアルポートのものを選択します。
4.選択後NefryBTから取得した値が取れます。
5.パラメータとして渡すのであれば1つ分で良いのにデフォルトだと値が10個分の表示ずつ取れてこれだと渡しづらいのでRecivedDataのMaximumLinesを1にします。すると1個だけ取れるようになるのでパラメータが渡しやすくなります。
6.次にSerialの次にSelectを選択します。
7.そしてSelectのプロパティからSelect Rowsのby Indexを選択し、Start Row Indexを1にするとパラメータのみ取得できるようになります。
8.次にSelectからDAT to CHOPを選択します。実際の値として利用したいのでオペレーターをCHOPに変換します。
9.接続したらFirst Column isをValuesにします。するとCHOPで扱える値になりました。
10.あとはTOPでの設定値に+ボタンを押してExport ChopすればNefryBTで取得した値が色々な場所で活用できると思います。(波表現の作り方は長いので今回は割愛します)
NefryBT(Arduino)との連携でハマったところ
1.ArduinoのIDE側のシリアルモニタを表示しながらTouchDesignerで値を取得しようとしたら、エラーが出て値が取れなくなる。
→こちらはシリアルモニタは非表示にしないとダメみたいです。
2.SerialでArduinoに書き込む前にPort選択をSerialの設定をするとエラーになる。
→こちらはArduinoに書き込んでからTouchDesignerのSerialのプロパティでPortの設定をしないとエラーになるようです。
まとめ
以上の手順を応用すれば他のArduinoの機器とTouchDesignerの連携は色々できると思います。良かったら、参考にしてみてください。
今度はGroveのGesture Sensorを連携させてみたいと思います。