#toio で 鐘を 108回つく【 #大晦日ハッカソン 】

年末に行われた「大晦日ハッカソン」というイベントに参加（といっても、各自が自宅で参加）した際、toio を使って作った作品の話です。

内容は以下のとおりです。最終的には、ロボットトイの「toio」と、toio用の専用マット、そして LEGO を組み合わせて作っています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これは 108回、鳴らせてしまいそうな予感。<a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/h3MIEif68g">pic.twitter.com/h3MIEif68g</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344581442274095106?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この作品は、以下のプロトペディアというサイトにも作品情報を登録しています。

●toio で 鐘を 108回つく【 #大晦日ハッカソン 】 | ProtoPedia
　https://protopedia.net/prototype/2117

## 開発した経緯と最初のステップ
当初は全く違うことをやろうかと、ぼんやりと考えていたのですが、ふと思いついて作りました。

思いついてみてから、最初は家の中にあるグッズで、単純な動きをするものを試しました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本日の今までの流れと全く違う話になったけど、<a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> と LEGO を使って、鐘をつけるかどうかテスト。<br><br>とりあえずやってみた段階。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/7um0h6uHLE">pic.twitter.com/7um0h6uHLE</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344565413661736960?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ブロックを使ったビジュアルプログラミングで、たった 2個のブロックを使っただけです。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">とりあえずサクッと試すために、 <a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> のビジュアルプログラミング環境で、ブロック 2つだけでパラメータを少し変えてみてテスト。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/HJBJInUN1J">pic.twitter.com/HJBJInUN1J</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344566045957230592?ref_src=twsrc%5Etfw">December 31, 2020</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/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> を前進させるのではなく、回転させてみたバージョン。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/qooGBfJrKO">https://t.co/qooGBfJrKO</a> <a href="https://t.co/29jGuMGiEU">pic.twitter.com/29jGuMGiEU</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344568043876192257?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらも、ブロック 2つで構成されたプログラムです。
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> を動かすブロックは、今回も2個（逆回転のやつがさらに2個あるけれど）。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/kDAEIZNOLT">pic.twitter.com/kDAEIZNOLT</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344568904346030080?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 2台・複数回に増やしてみる
この後、2台を使う形で、単発でなく複数回動かすことをやってみました。

この時点では適当に手動で位置決めをして置いた toio を、「タイヤの速度＋稼働時間」を決めた処理で動かしていました。そうすると、複数回の動きで 2回目以降に空振りをすることが・・・。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> を２台体制にしてみたバージョン。専用マットを使ってみようか。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/BgJN1TTHX6">pic.twitter.com/BgJN1TTHX6</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344572134098550790?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ちなみに、このようなプログラムを作っていました。
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> を２台体制で動かした時のプログラム。<br><br> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/PxAJWUbXKj">pic.twitter.com/PxAJWUbXKj</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344572335068598273?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

その後、toio につけた LEGO のほうも、少し変えてみました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> を使った <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> 。<br><br>LEGO は付け方を気をつけないと、回転動作をさせた時、追加で取り付けたものの重みで余分な動きをしてしまうw <a href="https://t.co/RVWwMnzCaI">pic.twitter.com/RVWwMnzCaI</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344574038455173121?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### ここで生じた問題
上記のツイートにも書いていますが、toio の上につけた LEGO が、長かったり先のほうが重かったりすると、何もつけていない時と比べて回転動作をさせた時に位置のズレが生じていました。

これは、長くのびた LEGO（＋その先についた LEGO）がある程度の重みがあるため、toio を回転させた時にその LEGO の部分に遠心力で引っ張られるような感じになることが原因のようでした。また、toio の本体の向きに対して前・横のどちらにつけるかにもよるのですが、LEGO の重みで toio 本体が傾いて、タイヤが少し浮いた状態になることもあるようでした。

### 問題の対処
タイヤが浮いたようになる状態は、toio　の前方（ロゴがある方向）と直角に LEGO をのばすようにすれば、今回は大きな問題がおこるほど傾くことはなさそうでした。

一方で、回転動作をさせた時にズレが生じる問題は、「単純なタイヤの速度指定＋動作時間指定」を用いている限りは、（特に複数回の動作を続けると）解決するのが難しい状態になっていきました。こちらは、ズレが生じても定位置に戻ることができれば良い話なので、toio の専用マットを利用することにしました。

## 最終版
最終的には、以下の動きをさせられるようになりました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これは 108回、鳴らせてしまいそうな予感。<a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/h3MIEif68g">pic.twitter.com/h3MIEif68g</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344581442274095106?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

プログラムは以下のようになっています。
2つの toio の動作1回ずつのセットを 59回（合計で 108回）となるように組んでいます。
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">作ったプログラム。<a href="https://twitter.com/hashtag/toio?src=hash&amp;ref_src=twsrc%5Etfw">#toio</a> <a href="https://twitter.com/hashtag/%E5%A4%A7%E6%99%A6%E6%97%A5%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#大晦日ハッカソン</a> <a href="https://t.co/q5qfpamCNV">pic.twitter.com/q5qfpamCNV</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1344581917727838208?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

そして、1回鐘をつく動作をするごとに、初期位置に戻るプログラムを入れています。これにより、ズレがない場合は移動は起こらず（処理が無視されたような状態になる）、ズレが生じていた場合は鐘つきの動作をする前にうまく鐘がつける初期位置に動く、という挙動をするようになっています。

## まとめ
今回、鐘を 108回つく、というのはできました。

しかし、本当は鐘をつく動作のトリガーを別デバイスを使う形にしてみたり（M5StickC を 1回動かすと、toio が鐘を 1回つく、というような遠隔での鐘つきのようなもの等）、見た目の部分で「鐘・toio につけた LEGO・専用マットの上」の見た目をそれっぽく変えるようなことをできれば、とも思う部分がありました。
このあたりは、別件もあって時間切れのため、上記の内容で公開ということにしました。
また、見た目や動き的に餅つきに見立てて、ということもできたら、と思ってみたり・・・。