Lチカの次は?

こんにちは、猫を愛するエンジニア夫婦、はとね(@hatone)ときょろ(@kyoro353)です。

前回はESP-WROOM-02を使った回路をブレットボード上に組み、Arduinoで簡単なスケッチを作成して実際に流し込んで、無事にLチカするところまでを確認できました。

いままで慣れ親しんだArduinoとほとんど同様に、Arduino IDEで他のマイコンボードの開発が簡単にできることにテンションが上がった方もいるのではないでしょうか?

前回作った内容へ機能を足したり改良しながら、「猫用IoT体重計トイレ」の開発へ向かっていきたいと思います。

きょろ
「Lチカの通過儀礼も無事に終わったことだし、次はテストを兼ねて、何かセンサーから情報を取得してみよう!」

前回のLチカはマイコンからの出力だったので、今回はマイコンへの入力の検証です。センサーをブレッドボードへ追加して、マイコンから値を取れる状態にしていきます。

さて、何からはじめようかな?

きょろ
「IoT的な電子工作を作るときは、まずは勉強がてら、ボタンを押すとネットと連携して何かが起こるAmazon Dash Button的なデバイスを作ってみるのが鉄板なんだよね」

そうそう。猫がポチッとボタンを押すと、ログが出たりしたら楽しそうだよね。

けれど、あの猫の手だと大きいボタンを用意しないと難しそう。あと、なかなか押してくれない気がする……。

▲押せないにゃ?

そうだ。こういうときは、どーじん先生に相談してみよう!

センサーの入力とバイオロギングの世界

どーじん先生、体重計開発に向けて何か簡単なセンサーからデータ取得を試してみたいのですが、猫にまつわる何か面白い話はありませんか?

どーじん先生
「直接猫にまつわる話じゃないけど、センサーからデータ取得するって観点だと生物のログを取る『バイオロギング』って研究ジャンルがあるんですよ。

▲アザラシに記録計を付けて潜水能力を計測
(A Southern Indian Ocean database of hydrographic profiles obtained with instrumented elephant seals, Scientific Data,02 September 2014より)

その草分けがジェラルド・クーイマンで、彼は1960年代にアザラシの潜水能力を測るために、キッチンタイマーを改造した記録計をアザラシに直接装着し、自由に泳がせたんです。

強制的に潜水させるのでは本当の能力を正確に把握できない、自然の状態における潜水を測るためには自由行動が必要だと考えたんですね。

このジャンルは主に生物自体に記録計を装着するので、ちょっと大掛かりなことになりますが、ポイントは人間不在の状態でこそ、真の行動観察ができるということ。

”ネコロギング”みたいな感じで、猫の何かの行動を、人間の見ていないところでログを取るって試みはおもしろいと思いますよ」

なーるほど。”動物のログを取る”なんて単純そうなネタでも、研究ジャンルとして確立されてるんですね。飼い主不在の状態でこそ猫の真の行動観察ができる、と。

どーじん先生
「動物の行動をその動物にとって自然な生育環境の中で記録するっていうのは、猫ではそんなに難しくないはずです。家猫はそもそも野生にいるわけじゃないから、いろいろな飼育者の家の中こそが普段の生活空間になる。屋内にロガーを設置するだけで、ログが効率よく取れる。

人間の生活空間へのロガー設置は、他の研究でも流行ってきてるんです。最近ではデブ・ロイって研究者が、家中にカメラをつけて生活環境の全記録を撮って、自分の子供が三歳になるまでの成長を通して言語発達過程の研究をしたんですよ」

うちのデブ猫のバイオロギング、研究レベルまでいかずとも趣味として実施してもすごくおもしろそう!

いろいろなデータを扱ってみたいなあ。
データをどう取得しようかなー、どう保存しようかなー、どう解析していこうかなー……考え始めると、いろいろ作り込まなきゃいけないことが多そうですね。

どーじん先生
「そんなに大規模に話を広げなくても、単に通知されるだけでもけっこう有益ですよ。象印の『みまもりホットライン』というサービスとか近いかな。ほら『京都の母がポットを押したら電波がピピピ』とかCMやってましたよね。

あと最近では、高齢者施設や病院で、高齢者がベッドから離れたことを通知するための、圧力を感じるパッドや赤外線・超音波を用いた『離床センサー』があります。生活環境内で必要不可欠な行動に反応して通知が送られるというのがミソかと。

外出先で、ウチの猫は元気かなぁとか、少し心配になるときあるじゃないですか。そういうとき、とりあえずご飯を食べたときに通知が来たら、それだけで安心。だって、猫に電話かけさせるのはちょっと無理がありますからね(笑)」

▲ジンジャー「もぐもぐ」

確かに、ジンジャーはいつも何かを食べているような…。
この子はきっと、私たちが家にいないときもご飯とオヤツを探してるんだろうな。

確かに、”うちの猫は1日何回ご飯食べてるんだろう?”って気になります。

猫体重計開発……のちょっと前に。猫のご飯を通知してみよう!

体重計にマイコンを接続する予行練習として、ご飯を食べてるときに通知が来る簡単なモノ作れないかな?

きょろ
「猫の食器の前にセンサーを設置して、ネットワーク経由でスマートフォンに通知を送るようなものはどうだろう? ボタンの代わりに何かのセンサーで”猫がご飯を食べに来た”というのを検知して、マイコンからインターネット経由で、その情報をスマートフォンに送るんだ」

これなら、猫IoT体重計を作るために、インターネットへの接続やセンサー情報の送信など技術を応用していけるね。

きょろ
「こういうシーンでは非接触のセンサーが良いと思う。光センサーや、それこそカメラを使った画像解析って手段もあるけど、あいにく猫は夜行性。周りが真っ暗な状況でも使えるセンサーが望ましいよね。たとえば、超音波センサーを使うのはどうだろう? 超音波なら、暗闇でも問題なく動作するし、距離もある程度正確に図れる。値段も安いよ!」

▲猫がごはんを食べたことをネットワーク経由でスマートフォンに通知する

おお!これなら猫が自分でボタンを押さなくても、ごはんに近づくだけで通知を飛ばすことができそう。物理的なスイッチを使うよりも猫フレンドリーです。

それにしても、きょろさんは毎回ファンシーな図を書くなぁ…笑。

きょろ
「じゃあ早速、超音波距離センサーをESP8266につないで、対象が近づいたことを検知する部分を実装してみよう!」

▲超音波距離センサー「HC-SR04」

今回は超音波距離センサーとして「HC-SR04」を使うことにしました。秋月電子やスイッチサイエンスなどで400円くらいから購入することができます。

きょろ
「前回つくったLチカの回路に追加する形で、距離センサーのVCCを+3.3Vに、GNDをGNDに、TrigをIO5、EchoをIO16につなごう」

▲HC-SR04の接続

実際に回路を組んでみると、こんな感じになりました。

▲HC-SR04をつないだところ

■ブレイク 超音波距離センサーの仕組み■
▲対象物から超音波が跳ね返ってくる時間から距離を計測する
この目玉のような超音波距離センサーは、超音波の跳ね返りにかかる時間を計測することで対象物との距離を測るセンサーです。短い超音波の音(パルス)を送信機から発射し、それが対象物に跳ね返ってきたものを、もう一方の受信機で検知します。対象物までの距離は、音速をC、発信から受信までの時間をtとすると、C ✕ t / 2で求めることができます。音は空気中を約340(m/s)で進むので、Arduinoを使う場合、パルスを発信してからplusIn関数でパルスを検知するまでの時間(マイクロ秒)をdurationとすると、対象物までの距離(センチ)は
距離= ((duration * 340 * 100) / 1000000) / 2
で求めることができる!というわけです。


きょろ
「まず手始めに、猫が来たことを検知するコードを書いてみよう。さくっと書いてみるとこんな感じだね。20センチ以内に対象物を検知したときにLEDが光るようにしてみた」

きょろ
「今回は、対象物との距離を測定するmeasureDistance関数と計測した距離から対象物が付近に本当にいるかどうかを判定するnearbyCheck関数を分けて実装したよ。センサーで計測した距離をそのまま『来た』『去った』の判定に使うのではなく、同じ状態が何回か連続して結果が安定したあとで判定を行う。これによって、誤作動を抑えることができるんだ」

なるほど!これならセンサーのノイズや、周りの人の動きなんかにも影響されにくそう。超音波なら周りの音や明るさにも影響されないから、特に夜行性の猫たちにとってはベストな選択かもしれません。

きょろ
「じゃあ実際に動かしてみよう。ちゃんと距離は測れているかな?」

▲距離が計測できるかテストする

おお!どうやら問題なさそう。実際に計測した距離はシリアルコンソールに随時表示されていますね。

▲コンソールに距離が表示される

超音波距離センサーを猫の食器へ取り付ける

きょろ
「動作確認するために、実際に設置してみようか」

先程組み上げたセンサー回路を、猫の食器の前に設置してみました。

▲超音波距離センサーとジンジャーの夜ご飯

▲ジンジャー「じーっ……」

ジンジャー、警戒しているのかな?

きょろ
「おおっ!シリアルコンソール上でジンジャーとの距離が出てきたよ!検知も成功だ!」

とりあえず無事、超音波距離センサーを使って”猫の食事”を検知することに成功しました。
このデータ、どうやって通知していこうかな?

SlackのAPIを使って特定チャンネルへ通知するのは結構簡単なんだけど、Slackはほとんど仕事で使ってるんだよね。せっかくなら普段プライベートで使っているアプリで通知を受け取れたら実用的なんだけど。

きょろ
「9月末に発表された、LINEの『LINE Notify』という簡単に使えそうなPush通知APIがあるんだけど、これ使うのはどうだろう?」


▲LINE Notify

きょろ
「LINE Notifyは簡単なHTTPSリクエストを送るだけで、自分のスマートフォンやトークルームに通知を飛ばせるから、マイコンからでも簡単に叩けるよ。猫たちがごはんを食べにきたら、それをリアルタイムに通知してあげるとおもしろいかも!」

友達からメッセージが来るかの如く、猫からLINEが来る……。想像するだけで、楽しそうです。

次回は、ESP8266のネットワーク接続とLINE Notify連携をお送りします。おたのしみに!

ジンジャーの体重:現在6.9kg (気温が下がって微増してしまいました……)


執筆:はとね(大島 孝子)
きょろ(井上 恭輔)
協力:どーじん先生(宮本 道人)
編集:大内 孝子
著者プロフィール

はとね(大島 孝子)
アメリカ西海岸で日々奮闘するバックエンド寄りのエンジニア。
高校時代パソコン研究部に所属し、NHK BS2 高校生ITキング決定戦というTV番組で全国3位、Web教材開発コンテストThinkQuest@JAPAN 2004で最優秀賞を受賞。2011年に、情報処理推進機構が主催する「未踏ソフトウェア創造事業」に採択される。2012年にインターネット広告代理店へ入社して米国駐在員として渡米し、2014年にAT&T Internet of Things Hackathon and Accelerator SeriesというIoTでは最大級のハッカソンでFooDrawというプロダクトを制作して全米1位を獲得。現在もソフトウェアエンジニアとして働きながら、US事業の拡大に努めている。



きょろ(井上 恭輔)
Webやアプリの開発に留まらず、ハードウェアの設計や量産まで幅広く手がけるエンジニア。高専在学中の2006年に情報処理推進機構が主催する「未踏ソフトウェア創造事業」に採択され、スーパークリエータ/天才プログラマーの認定を受ける。
2008年にミクシィ入社。iOS/Android向けテスト配信サービス「DeployGate」の立ち上げにを行い、2014年に寿退職ののち渡米。
日経BP主催のAndroid Application Award(A3)において優秀賞および特別賞、高専プロコン最優秀賞&文部科学大臣賞、AT&T IoT Hackathon 全米部門優勝など。
現在の趣味はドローン撮影とダイエット。