OCEANS

SHARE

2017.06.08

かぞく

プログラミングとパズルゲームに共通する難しさと楽しさとは? ~ソニー「MESH」編(4)~

ファミコン世代だって、その気になれば最先端のITを理解できるはず!! もうすぐ小学校でプログラミング教育が始まる時代。大人のホビーとしても楽しめるガジェットで遊びながら、IoTやプログラムにも強い(子どもにナメられない)スマートなオッサンを目指してみませんか?
アイコンを配置してつなぐだけで完成する「MESH」のプログラミング手順
振動、傾き、温度や明るさなど、さまざまなセンサーを内蔵した電子ブロックのような“MESHタグ”を身のまわりのアイテムと組む合わせることで、いわゆる「IoT(モノのインターネット化)」っぽい遊びができる「MESH」。開発者の方から活用のアドバイスをいただきアイデアを練った結果、今回はタグの向きやタグが受けた振動を感知する「動きタグ」を愛犬に装着し、彼女がよく寝ているときを見計らって自動的に写真を撮る(さらにはメールで寝ていることを知らせてくれる)「イヌのインターネット化(IoD)」を実現する装置の開発に着手することになった。そこに至るまでの経緯は、過去の記事を参照していただきたい。ちなみに、こちらが我が家の愛犬・イヌちゃん(10歳・メス・仮名)である。

今回の「イヌのインターネット化」で最大のポイントとなるのが、イヌちゃんが「寝ている」状態にあることを判定するプログラムを組むことだ。前回の記事で【体を横向きにして】【一定時間動いていない】状態を「寝ている」と定義した。つまり、イヌちゃんに装着した「動きタグ」が、【体を横向き】に相当する向きになってから【一定時間動いていない】ことを判定するプログラムを組めばよい、ということだ。
それでは「MESHアプリ」で、プログラムを組む過程を、体験した順番に紹介していこう。
プログラムは「キャンバス」と呼ばれる画面上で行う。まず画面下の「タグリスト」に並んでいるアイコンから、水色の「動きタグ」アイコンをタップして、そのままキャンバスまで移動させる。これで、キャンバス上に「動きタグ」アイコンが配置される。
このアイコンをタップすると、【動きタグが〇〇になったら】の「〇〇」を指定する画面が表示される。ここでは「向きが変わったら」の「上」を指定した。これで【動きタグが「上向き」になったら】というところまでプログラムされたことになる。

続いて「タグリスト」の「カメラタグ」アイコンを、キャンバス上に配置する。これは、「MESHアプリ」がインストールされているスマートフォンで写真を撮る、というアクションを指定するタグだ。撮影で前面カメラ、背面カメラのどちらを使うかが指定できる。ここでは「背面」を指定した。

最後に「動きタグ」アイコンの右側にあるコネクタを引き出し、出てきた線を「カメラタグ」アイコンのコネクタとつなげば【「動きタグ」が上向きになったら】⇒【背面カメラで写真を撮る】というプログラムの完成だ。「MESH」のプログラムは、すべてこの要領で組むことができる。
タグ同士の組み合わせやタグの指定を考える工程はまさに「パズル」感覚
プログラムの手順自体は驚くほど簡単なのだが、それをどのように使うのかを考えていくのが、結構難しい。
例えば、先ほどのプログラムではイヌちゃんに装着した「動きタグ」が【上向きになったら】という条件を指定しているのだが、これではひとつの姿勢だけにしか反応しないことになる。イヌちゃんは反対向きに寝ることもあるので、「動きタグ」が「下向き」になった場合も考慮しなければならないのだ。
そこで【「動きタグ」が下向きになったら】という条件が指定されたアイコンを設置し、「カメラ」タグのコネクタとつなぐ。これで【「動きタグ」が上向き、または、下向きになったら】⇒【背面カメラで写真を撮る】というプログラムになる。

このように、ゴールとなるアクションにたどり着くまでの条件の指定に不備や不足を洗い出していく作業は、ちょっと前に流行った「アングリーバード」のような、パズル系のアクションゲームを解く感覚に似ている気がする。自分で作ったことはないけれど「ピタゴラスイッチ」のピタゴラ装置も、そういう思考回路で完成させていくのだろう。
複数のタグを組み合わせることで、イメージする機能の実現が可能に
そんなパズルを解くようなプログラムの作業でいちばん頭を悩ませたのが、「寝ている」状態をプログラムでどのように表現するかだった。
先ほども触れたように、今回はイヌちゃんが「寝ている」状態を、【体を横向きにして】【一定時間動いていない】と定義している。しかし、ここまでのプログラムでは前半の【体を横向きにして】までしか表現できていない。これではイヌちゃんがゴロンと横向きになるだけで撮影されてしまうことになるのだ。
では、後半の【一定時間動いていない】を、どのように表現すればよいのだろう?
あれこれ悩んだ結果、時間に関係する条件が指定できる「タイマータグ」と、回数を数える「カウンタータグ」のふたつを組み合わせることで、一定の時間が経過したらアクションを促す信号を出す、一種の時限装置を完成させることができた。
ひとつめのポイントは「タイマータグ」の使い方だ。「一定の間隔で」という画面で秒数の指定を行うと、指定した間隔でアプリの画面上で、次につないでいるタグへ信号を送ることができるようになる。この場合は、「動きタグ」が上向き、または下向きになったら、1秒ごとに信号を連続して送るように指定した。

2つめのポイントは、受け取った信号の回数を数える「カウンタータグ」の使い方だ。この場合は、「タイマータグ」から送られた信号の数をカウントしている。1秒ごとに信号が送られるので、結果的に秒数をカウントすることになるわけだ。たとえばカウントの上限を「30」と指定すれば、30秒まで数えたらつないでいる次のタグへ信号を送ることになる。

最後に「動きタグ」、「タイマータグ」、「カウンタータグ」、「カメラタグ」のコネクタを順番につなげば、
【「動きタグ」が上向き、または、下向きになったら】⇒【「タイマータグ」と「カウンタータグ」で30秒数えてから】⇒【「カメラタグ」で撮影する】
というプログラムの完成となる。
結局大切なのは試行錯誤。何度も試してみることで“正解”が見えてくる
ただし、このプログラムには、まだ不備がある。「30秒数えてから次のアクションを起こす」という時限装置が追加されたものの、この時限装置を“解除”する手段がないからだ。つまりこの状態でも、30秒の遅延はあるにせよ、イヌちゃんが一度でもゴロンと横向きになれば撮影されてしまうことには変わりない。
そこで3つめのポイントとなるのが、時限装置の“解除法”だ。ここでは、さらに「動きタグ」に「振動を感知したら」という条件を追加している。振動を感知した場合、イヌちゃんがじっとしていない(寝ていない)と判断させるわけだ。じっとしていないなら、「寝ている」ときだけに作動すべき時限装置は“解除”されなければいけない。つまり、「タイマータグ」から信号が送信されない状態にする必要があるので、「タイマータグ」の「オフ」にコネクタを接続。さらに「カウンタータグ」の「リセット」のコネクタとも接続する。こうすれば「動きタグ」が振動を感知したときには、時限装置が解除され、カウンターも「0」にリセットされることになる。

これでようやくプログラムの完成。「動きタグ」が上または下向きになってから、さらに振動もない状態が30秒続くことで、初めて写真が撮影されるようになる。
おそらく読み進むうちに、だんだんチンプンカンプンになった人が大半ではないかと思うが、実は筆者も、今なお結構チンプンカンプンなままだったりするので安心てほしい。文章にするとサラリとしているが、一応の完成にたどり着くまで、リアルに数日間は試行錯誤を繰り返していて、たまたまイメージ通りに動くタグと指定の組み合わせを発見したというだけなんですよね、実際のところ。きっと、これよりもっとシンプルで使いやすい方法もあるんだろうし。こういう点も、パズルを解く手順に似ているかもしれない。
結局は「習うより慣れろ」ってことなのかもというのが、ここまでの感想。とにかく手と頭を動かし続けることが、プログラムやプログラムに必要な考え方(論理的思考)を養うコツなのかもしれません。その点でも、操作が簡単で試行錯誤がしやすい「MESH」は便利だなぁと思いましたね。
さて、さすがにボリューミーな内容になってしまったので、今回はここまで。「イヌのインターネット化」の要でもあるメールの送信と、完成したプログラムの“実証実験”については、次回まとめてご紹介します。
取材・文:石井敏郎
(C)2016 Sony Corporation
■MESH公式サイト
http://meshprj.com/jp/


SHARE

次の記事を読み込んでいます。