ESP-WROOM-02 でつくる IoT ハト時計

IoT シロウトが社内ハッカソンでプログラマブルなハト時計を作ろうとして、あれこれ分からなさ過ぎて困ったので、大したことではないですが分かった範囲のことを記録として残しておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/33668/5e08bcae-65ee-f7a8-e0bd-848c87ab20cb.png) ![image](https://qiita-image-store.s3.amazonaws.com/0/33668/1b625245-fff8-3a25-070a-e049d304e67a.png)

## 作ったもの

Web 上の API サーバーから会議の情報を取得して、会議の終了が近づくとハトが動いてお知らせする、というもの。いわば、鳴くタイミングをプログラムで制御できるハト時計（鳴かないんだけど…）。

* (動画) https://www.youtube.com/watch?v=JB2AUmH3zAM

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">社内ハッカソンで <a href="https://twitter.com/radiocatz">@radiocatz</a> と作った「KAIGI NO OWARI」システム。若干おふざけ入ってますが、「仕事で使わない技術にチャレンジ」というコンセプトのもと、長引きがちな会議の終わりをIoTでお知らせします！ <a href="https://t.co/YRRqkwhsJs">https://t.co/YRRqkwhsJs</a></p>&mdash; oohira (@oohira) <a href="https://twitter.com/oohira/status/751793496848101376">July 9, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 使ったもの

### ESP-WROOM-02

まず「IoTと言えばラズパイ」ですが、そこはあえて外して　ESP-WROOM-02 という Wi-Fi モジュールを使います。ただ、基板にハンダ付けとか全く自信がないので、必要な物が全部載った開発ボードという優れものを買います。こいつはプログラムも Arduino IDE を使って開発できるので、私のようなシロウトにはうってつけです（じゃあ大人しくラズパイ買っとけ、という声が…）。

* ESPr One （Arduino Uno同一形状 ESP-WROOM-02開発ボード） by スイッチサイエンス
  * https://www.switch-science.com/catalog/2620/
  * http://www.amazon.co.jp/dp/B01C8A3X3U

### サーボモーター

ハトを動かすためにはモーターが必要です。ミニ四駆などでお馴染みの、DC モーター（電流が流れている間一方向に回り続ける）を使う方法もありますが、今回は回転角度やスピードを制御できるサーボモーターを使います。実際には、ブレッドボードとかジャンパワイヤーとかもあった方が便利なので、サーボモーター SG90 と色々セットになった工作キットの方を採用しました。

* デジタル・マイクロサーボ SG90 by TOWER PRO
  * https://www.amazon.co.jp/dp/B016FKJJ8M
* Raspberry Pi 電子工作エントリーキット by Physical Computing Lab
  * http://www.amazon.co.jp/dp/B00MRQ5U1Y

サーボモーターを買うにあたって一番悩んだのが、「ESPr One で SG90 を動かせるのか？」という点です。シロウトなりに色々調べてみると、動作電圧というものがあって、ESPr One が 3.3V なのに対し、SG90 は 4.8V なので追加の電池パックを用意しないと動かないのでは？という疑問が挙がりました。が、結論としては単体で動かせます。

## 部品を動かす

### Lチカ

IoT 界隈での Hello, World と言えば、LED を光らせる「Lチカ」 です。Arduino IDE を使ったプログラミングの流れを把握できるので、一度やっておきましょう。次の記事がとても分かりやすいです。

* [Check! ESP-WROOM-02 開発ボードの始め方](http://qiita.com/dz_/items/27c2e19981e0bcddcf66)

![image](https://qiita-image-store.s3.amazonaws.com/0/33668/efb280d8-8740-d80e-f140-36b1b121575a.png)

### サーボモーターを回転させる

次にサーボモーターの制御方法を学びます。こちらも分かりやすい解説記事を書いてくださっている方がいらっしゃるので、思いのほか簡単にできてしまいます。

* [ESP-WROOM-02 Arduino互換ボードでサーボモーターを回す](http://qiita.com/umi_kappa/items/57fee6aa9d4a9f1236e9)

![image](https://qiita-image-store.s3.amazonaws.com/0/33668/be8d500a-9b56-3529-2aaa-7a7144e781c8.png)

### Wi-Fi へ接続する

最後に肝心のネットワーク接続を試します。情報が多くて本当に助かります。

* [ESP-WROOM-02 Arduino互換ボードでサクッとHTTP通信できたよ](http://qiita.com/umi_kappa/items/c3c929c6f42c5bdf3143)

今回は ESP-WROOM-02 側を HTTP クライアントとして外部の API サーバーに対して定期的にポーリングする、という方式を採用しましたが、ほかのサンプルプログラムやネット上の記事を漁っていると、ESP-WROOM-02 側を HTTP サーバーとすることもできるようです。

## ハトを動かす

ハードウェアプログラミングとはいえ、日頃プログラムを書いている身からするとここまでは何とでもなります。大変だったのは、「ハトをどう動かすか？」です。モーターの回転運動を上下運動に変換したかったので理論的にはクランク機構とかそのへんなんだろうなとは思いましたが、実際に形にするために何を使ってどう実現すればよいかが分かりません。

色々試行錯誤した結果、100均に売っている園芸用のピック付きハト（本当はセキセイインコ） ＋ 子供の　LEGO　を奪って何とか形になりました。写真からは分かりづらいですが、ハトには真下に伸びる細い鉄棒が付いていて、上２つのブロック（白と黄色の正方形）を貫通しています。その棒がさらに下の LEGO に空いた穴を通っており、アームが回転しようとしてもハトは上下方向にしか動けないように固定されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/33668/5559a229-e047-a542-ca19-46aefaf48091.png) ![image](https://qiita-image-store.s3.amazonaws.com/0/33668/cc6945dc-68b7-cd3a-0f1d-c16b74a78d9b.png)

サーボモーターの固定が足りずにさらに輪ゴムを巻いたり、ハトが丸見えだったりと、なかなかのシロウトっぷりですが、真正面から動いているところを見ると個人的にはイイ味出せてるなと満足です。

ほとんどサンプルプログラムのコピペですが、ソースコードはこのへんにあります。

* https://github.com/kaigi-no-owari/saori/blob/master/sketch/sketch.ino

# 補足

世の中には同じことを考えている人がいるもので、サーボモーターを使う点など色々と参考にさせていただいたのが以下の記事です。これだけ IoT が流行っているのだからプログラムから制御できるハト時計ぐらい売っているだろうと高をくくっていましたが、どうやら自作するしかなさそうだと諦めることができたのもこの記事のおかげです。

* [スマート鳩時計の作り方(スマート鳩時計の紹介＆サーボモータ制御編)](http://blog.mylab.jp/20151207.html)

また、社内で発表した際に「ハトは窓から出てくるんじゃないんだ」とツッコミを受けましたが、まぁ想定通りです。言い訳をすると、ハトに限定せずペットボトルキャップの色んなキャラクター人形を付け替えできるようにして、それが時間になると箱に空いた穴から上に出てくるというものを考えていました。が、サーボモーターとアーム1本ではうまく持ち上げられず、時間の問題もあって、結局ハトに落ち着いたというところです。鳴き声も出せなくて残念です。

最後に、工作アイテムとしての LEGO は便利です。いきなり木を切って作るのはハードルが高いので、最初ダンボールなどで試そうとしていましたが、LEGO なら付け外しが簡単で固定もしやすいし、見た目もそれなりのものが出来上がるので、IoT と相性がいいなと感じました。複雑な動きをするためのギアセットがあることを後で知って、今度はこれと組み合わせてみたいなと思いました。

* [ギアとか滑車が満載のレゴセットが超いい - デイリーポータルZ](http://portal.nifty.com/kiji/131107162277_1.htm)

# 最後に

長いことプログラマーをやっているせいか Hello, World ぐらいでは感動できなくなってしまいましたが、IoT は初めてということもあって何か1つ動くたびにチームメンバーと「おおっ！」と言いながら楽しむことができました。やはり現実世界のモノが動く感動は大きいです。オススメです。