魔改造toioでサーボモータを制御する
2020年末のtoioアドベントカレンダー企画で書く予定だったのですが、大変遅くなりました!
MITメディアラボの中垣です。HCI(Human Computer Interaction)領域で研究者をしております。Actuated Tangible UI (変形・動く実体インタフェース)の研究をしております。(最近新しくしたのでポートフォリオ見てね -> link
今回書くのは、HERMITSという研究プロジェクトのために発見したtoioハック術です。UIST2020で発表した論文には細かく書いていない内容ですが、toioがメイカーコミュニティなどでプロトタイピングツールとして注目されているし、HCI分野でいうと最近ホットなSwarm User Interface領域の開発にめちゃくちゃ使えそうなので、何かの参考になればとシェアいたします。toioを知らない方は、こちらから。SONYのロボットトイです。
導入として研究の背景などについて紹介していますが、ハックだけ知りたい場合は、3.まで飛ばしてください。
※このハックはtoioの分解や少し細かな半田づけ作業を必要とします。自己責任でお願いします。(僕も何個かtoioが動かなくなりました。)
1. HERMITSについて
まずは、今回toioを用いて実装したHERMITSの動画をご覧ください。
ざっくりとアイデアとしては、toioのような車輪駆動ロボットが、専用の物理メカアタッチメント(これを'メカニカルシェル'と定義)を纏い・切り替えることで、タンジブルな物理インタフェースとしての動きや機能、表現をダイナミックに変換・拡張できるというもの。
関連して、以前にはTRANS-DOCKという研究でも、ピンディスプレイの動きを変換・拡張するインタラクティブなシステムを提案した。
これらの論文の意図としては、モータやコンピュータ、電源などが詰まったアクティブなマシン(ロボット・変形デバイスなど)の機能を、それらを含まないパッシブなマシン(メカニカルシェル)の組み合わせでその可能性とインタラクティビティを最大限に拡大しようという、フィジカルなインタラクションデザインのためのアーキテクチャを提案すること。
2. ハックの目的 - ドッキング機能
HERMITSのアイデアをtoioを用いて実現するために、色々と手を動かして試作していたところ、toioとメカニカルシェルがしっかりとドッキングするためには、モータをもう一つ追加したい、ということになった。
以下の動画のように、モータによってピンが上に動くことで、メカニカルシェルとドッキングする機能のこと。合体メカ的な。
しかし、このようにモータを足したいものの、toioには外部端子などがない。toioそのものに新しくモータを追加するためには、他にもマイコン、無線、バッテリーなどが必要になってくるが、場所も取るし、見た目も悪くなるし、面倒臭いし、頭が悪い感じがする。
何かしらtoioで直接サーボモータを動かせないかなあと考えを巡らせて、toio魔改造アイデアを思いついた。
3. 魔改造? - 圧電スピーカ制御回路からサーボを動かす
toioには、サウンド機能があり圧電スピーカが搭載されている。toio APIからは、MIDI note numberを用いて、特定の周波数の音を鳴らすことができる(toioのサウンド機能参照)。これを使って、サーボモータを動かすことができないか?というのが思いついたハックのアイデアだった。
一般的にサーボモータの制御は、PWM(パルス幅)で行う。パルス幅に応じて、動作角度が調整される仕組みだ。(下記参照)
圧電スピーカに出力する周波数の波で、サーボ側にパルス幅の変化に使うことで、サーボを自由にコントロールできる可能性があると感じた。
4. ハックのための配線と制御
テスターでなんとなーく、どこが電源・グラウンド・定常波の信号が来てる端子かを探る。僕は、比較的技術的な詳細は適当な人間なので、この辺からかなり手探りで、色々細かい原理の精査はしていないのであしからず。(皆さんハックするときもテスターなどでチェックしながら配線することをお勧めします。
と、そうこうして以下のような配線で動くことが判明!
これが最初にサーボ動かせたときの動画(テンション上がった)。(今回使用したサーボはこちらのようなリニア型のもの。
ちなみに、サーボの位置制御については、手打ちで、サウンド出力の値(音程・再生時間)を変えながらサーボの動きを見て、割り出した。
今は以下の二つの値でドッキングのON-OFF(ピンを上・下に動かす)を切り替えている。(*Firmwareのバージョンが2の状態のもの・なぜかv1のときに動作した値がv2では動かなかったので、手打ちで再調整が必要となった。
MIDI note number: 47, 再生時間: 100ミリ秒
MIDI note number: 58, 再生時間: 100ミリ秒
他の値を入れると、上下の二極だけでなく、間の細かい位置制御ができたはず。
ここで、定常波の出力(パルス幅でいうと50%?)で、PWM制御ができているのは謎かもしれない。僕の予想としては、再生時間によって、波形の終わり部分が可変のパルス幅のようになっていることで、そこだけPWM波形っぽくサーボ側から認識していることで、位置制御ができているのではないかと推測している。
他のサーボモータではテストしてないのが、動くのではないだろうか。(誰か試してみて!*自己責任で
そうしていくつか試作した上で、シンプルに上下に駆動する機構を採用した。こちらは論文にも載せたいくつかの図である。
5. ハックのプロセス
最後に、分解とハックの様子を良い感じにまとめた動画もどうぞ!慣れれば一連のハックは10-15分ぐらいでできると思います。
何度も言いますがあくまでも分解は、自己責任でお願いします。特に配線がうまくできたとしても、サーボに負荷を加えると、回路が熱くなってtoioもろとも動かなくなることがよくあったので、その辺り特に注意。
もし質問・感想・訂正などあればTwitter:@ken0324などにメンション飛ばしてみてください。これを参考に、ハックしたよーみたいな報告も聞きたい。
ex. おまけ - プロトタイピング研究と分解のススメ
このハックアイデアは、以前にtoioを分解していた経験から思いついた節がある。
身近にあるデバイスを分解して仕組みを学ぶことで、実現したいアイデアを最短距離で実装できる。
そんな話を #分解のススメ というトークイベントでも以前話したことがあるのでそちらもご参照あれ。