Hackarade #05: IoT

こんにちは!スマートキッチン事業部のシュガー(佐藤彩夏)です。趣味は電子部品アクセサリー作りです。

クックパッドでは、Hackaradeというエンジニアの技術力を底上げするための社内ハッカソンを定期的に開催しており、第5回目の今回は「IoT」のテーマで開催することになりました。

f:id:sugar_ayaka:20190201162614j:plain
開催風景

なお、過去には下記のようなテーマで実施しております。

まず簡単にIoTがテーマになった背景をお話します。

クックパッドには、今年の1月にスマートキッチン事業部という新しい事業部ができました(去年1年間は研究開発部の中の1グループでした)。
スマートキッチン事業部では、OiCyという、人と機器とレシピをつなぐことで毎日の料理を楽しみにするサービス&機器の開発を行っております。

つまり、ソフトウェアだけでなくハードウェアの開発もしており、ハードウェアを開発するメンバーもいます(私もその1人です)ので、
今回はハードウェアも絡むIoTをテーマで開催することになりました。

このブログでは開催概要と成果の一部をご紹介します。

開催概要

今回、参加者が約100人いたので、全員で回路を組んだり、ハンダ付けするのはあまり現実的ではないと思い、
M5Stack Grayという回路を組まなくても容易にセンサーをつなげる(Stack)ことができるモジュールを使用することにしました。

具体的には、ESP32(Wi-FiとBluetoothを内蔵する低電力なマイコン)、ディスプレイ、ボタン、バッテリー、SDカードスロット、スピーカー、9軸センサが内蔵していて、サイズは5cm四方くらいです(写真中央の四角いもの)。

f:id:sugar_ayaka:20190201182046j:plain
M5Stackと同梱物

全体としては下記のような流れで実施しました。

  • 事前準備:開発環境を整えてきてもらう&くじ引きタイム

  • 第一部:M5Stackの説明と演習(ハードウェア開発)

  • 第二部:AWS IoTの説明と演習(ソフトウェア開発)

  • 第三部:乾杯&発表会

事前準備:開発環境を整えてきてもらう&くじ引きタイム

まず事前準備として、下記をしてもらいました。

  • Arduino IDEのインストール

  • USBドライバーのインストール

  • Arduino Core for ESP32の導入

詳細はこのあたりの記事に詳しく掲載されてます。

そして当日の朝、運営側で用意したセンサーを1人1個くじ引きで引いてもらい、そのセンサーを使って好きなものを開発してもらうことにしました。

f:id:sugar_ayaka:20190201165036p:plain
ハズレのセンサーを引いてしまったCTO

センサーは、水分センサー、光センサー、アルコールセンサー、火炎センサー、ダストセンサー、温湿度気圧ガスセンサー、測距センサー、ジョイスティックを用意しました。

なお、弊社はビルの関係で火気厳禁なので、火炎センサーは喫煙所に行かないと試せないという罠。

加えて、会場には今回M5Stackとセンサーを購入したスイッチサイエンスさんにもお越しいただき、楽しそうなセンサーやコントローラーなどをお貸し出しいただきました。

f:id:sugar_ayaka:20190201174432p:plain
スイッチサイエンスさんからの差し入れ

第一部:M5Stackの説明と演習(ハードウェア開発)

第一部は、スマートキッチン事業部のハードウェアエンジニアの山本さんが、M5Stackの説明とセンサーの説明とハンズオン演習を行いました。

その資料が下記です。最後のページにサンプルプログラムへのリンクもありますので是非ご活用ください。

ここでの驚きは、だいたいハードウェアのハンズオンは半分くらいの人が引っかかるので、せいぜい10人くらいでやることが多いのですが、
100人規模でやったにも関わらず大きくつまずく人はおらず、見ていた限り全員が午前中に何かしらを動かせるようになっていたことです。
感動。

f:id:sugar_ayaka:20190201170229j:plainf:id:sugar_ayaka:20190201170312p:plain
開発の様子

第二部:AWS IoTの説明と演習(ソフトウェア開発)

続いて、AmazonのAWS担当の方から、AWS IoTを活用してM5Stackと連携するハンズオンを実施していただきました。

AWS IoTとは、インターネットに繋がるデバイス(今回でいうとM5Stack)とAWSクラウドを連携して双方向通信ができるサービスです。

とても丁寧でわかりやすい資料を使って下記の内容をご説明いただきました。

f:id:sugar_ayaka:20190201170733p:plain
Amazonさんのハンズオン資料(一部抜粋)

第三部:乾杯&発表会

ここまでで、全員がM5StackとAWS IoTを使って一通りサンプルを動かせるようになりましたので、
このあと、数時間の自由制作の時間を設け、夕方くらいに乾杯&発表したい人が発表するという形式を取りました。

f:id:sugar_ayaka:20190201171305p:plain
発表前にまずは乾杯&腹ごしらえ

成果物

面白い発表がたくさんあったのですが、全ては紹介しきれない(そして楽しすぎて多くの写真を撮りそこねた)ので一部だけご紹介します。

まずこちらは、測距センサーを用いた姿勢矯正デバイスです。

f:id:sugar_ayaka:20190201171734p:plain
姿勢矯正デバイス

PCの画面上にセンサーを取り付け、一定の距離近づくと姿勢が悪いことを検知してスクリーンセーバーでお知らせしてくれるというもの。

こういったものは世の中にいくつかありますが、ウェアラブルとかカメラを設置したりしなくても、シンプルに実装されているのがいいなと思いました。

続いて、スクワットを検出してレベルアップしていくデバイス。

f:id:sugar_ayaka:20190201174813g:plain:w250
スクワットデバイス

こちらは内蔵している9軸センサーを活用して、スクワットを検出し、回数に応じて音が変わるというもの。
例えば、まず5回スクワットすると音が鳴ってレベルが上がり、次は10回、20回・・・とハードルが上がっていく設計でした。

私も学生時代に運動支援研究をしていた頃、ひたすら縄跳びを飛んでいたことがあるので、
これはデバックが大変だっただろうなぁ、と努力賞を差し上げたい発表でした。

こんな感じで次々に面白い発表が続いて行ったのですが、ここでふと気づいてしまいました。

「あれ?これIoT(Internet of Things)じゃなくて、ただのT(Thing)じゃないか・・・?」

そうですね。これらはArduino(通信機能のついていないマイコン)とか使えばできちゃいますね。

ここで素晴らしい発表が。

システム障害が起きると、M5Stackの画面の色が緑から赤に変わって障害をお知らせしてくれるシステム。

f:id:sugar_ayaka:20190201172911p:plain
障害を通知してくれるシステム

これは、やっとIoT!しかも実務上も使えて素晴らしいシステムです。拍手。

他にも、色合わせゲームや、スマートロックシステムや、植物の水分が足りなくなると通知されるシステムや、Alexaと連動したキッチンタイマーや、素数が出るとゴリラのアスキーアートが画面に表示されるシステム(?)などなど、発想力豊かな発表がたくさんありました。
(そういえば料理に関係する発表はキッチンタイマーくらいしかなかったような)

f:id:sugar_ayaka:20190201180149p:plain:w300
ゴリラのアスキーアート

ちなみに私は、部屋の湿度や温度やガスの数値が一定以下になるとSlackで通知されるという、なんの工夫もない普通に便利なシステムを作りました。

f:id:sugar_ayaka:20190201163738p:plain:h300f:id:sugar_ayaka:20190201180607p:plain:h300
温湿度気圧ガスセンサーの値に応じてSlackに通知

これをきっかけに、社内のエンジニアがハードウェア開発にも目覚めてくれるといいなと願っています。

ということで、以上、第5回Hackaradeのレポートでした☆

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/