LoginSignup
13
6

More than 5 years have passed since last update.

Google Homeで家電制御するためのお手軽マイコンハック

Last updated at Posted at 2017-12-18

この記事は
IoTLT Advent Calendar 2017 19日目の記事です。
この前の記事は@masashiokawaさんのエンタープライズIoT事例です。

最近はGoogle Homeにハマっております、nokkiiです。
業務ではIoTの研究、新規事業開発と大規模サーバミドルウェア開発、採用活動などをやっています。最近社内でハードウェア開発を始めたのでmbedを始めとしたARM環境とドライバ、量産経験者を募集していたりもします。ご興味ある方はお声掛けください。
今回はGoogle Homeで作ったスマートホームを自慢したい男たちのハードウェア詳解と言う形でやりたいと思います。

最近APIを生やした家電

トースター

昔作った「好きな焼き色を選んで焼けるトースター」をGoogleHomeから制御できるようにしました
IMAGE ALT TEXT HERE
動画では「パンを(時間)にトーストして」と命令を送ると炊飯器の予約のように時間を逆算して、タイマーを掛ける動作をしています。GoogleHomeに「朝ごはんはトーストにして」とお願いすると翌朝7:30にパンを焼いてくれます。課題としてはトースターにパンを刺しておかないといけないので、衛生面に不安がありますが2日くらいなら大丈夫でしょう(多分)。

電気暖炉

IMAGE ALT TEXT HERE
Dimplexの電気暖炉にESP32でHTTP APIを生やして制御できるようにしました。このシリーズは炎のゆらめきを水蒸気で表現していて、加湿機能だけ使うこともできます。芯まで冷える季節になったら直接当たれますが、消費電力の割に部屋は温まらないのでいまは加湿器モードにしています。

トースターのハードウェア解説

トースターはTOSHIBA FlashAirで操作しています。


元々のトースターの回路はすごくピタゴラ的に作られています。レバーを下ろすとヒーターが入り、ヒーターの電圧降下とダイオードによってタイマICにDC9Vが入ります。タイマICはタイマーが切れるまでの間電磁石を動かし、自己保持回路の役割をします。なかなかおもしろい仕組みではないでしょうか。


これをFlashAirで制御できるように改造します。楽にするためUSB電源を分解して入れ、3.3Vの三端子レギュレータでFlashAirの電源を作ってやります。FlashAirでリレーをドライブするためにトランジスタを入れ、電磁石をON/OFFします。
回路図には書き忘れてしまいましたが、ヒーターもFlashAirからON/OFFできるようにしており、レバーを下げた時点で電磁石はb接点, ヒーターはa接点で接続されているので初期化処理なしに「レバーを下げているけど、ヒーターは入っていないステート」を実現しています。あとはFlashAirの標準のHTTP APIでON/OFFすることができるのでFlashAir側のAPIはノンプログラミングで実現することができます。

具体的なAPIなど、

/command.cgi?op=190&CTRL=0x03&DATA=0x1c 電磁石もOFF
/command.cgi?op=190&CTRL=0x03&DATA=0x1e ヒーターもON
/command.cgi?op=190&CTRL=0x03&DATA=0x1f 電磁石だけON
configにデジタルIO出力を設定した後、このようにCTRLにWriteするIOピン番号の16進値、DATAにOFFにするマスク値を書くと標準でデジタルIOが動作する。このようにFlashAirを使うと、家電のAPI化がわりと簡単に実現できます。

プログラム

使いようはないと思いますが、焼き色を選んで焼けるトースターのコードは公開されています。サーバが必要だったのをFlashAirのみでの制御に移行しているところなので、とっ散らかっていますが...。
https://github.com/nokkii/good_tooster

電気暖炉のハードウェア解説

image.png
電気暖炉にはステートを進めるボタンと電源を切るボタンがあるのでそこのON/OFFを制御します。リレーの制御回路的にはFlashAirと全く変わらないので、間違えてFlashAirと書いてしまいました。ESP32はノンプログラミングとは行かないまでもArduino気分でプログラミングでき、Webサーバのサンプルプログラムも公開されているので5分位のプログラミングで実装することができました。

プログラム

ESP32のサンプルプログラムと殆ど変わりませんが、これも公開しています。改造して遊んでみてください。
https://gist.github.com/nokkii/72c173793d763d66e988c20b230447a6

API

/heat 本体のステートを進めるボタン(加湿→弱→強)
/off 本体のOFFボタン押下
展望として、このマイコン自体にステートを記憶させて双方向に状態を取得できるようにするとグローバルの受け皿になっているエンドポイントのRaspberryPiが持っている暖炉のステートとずれにくくて良さそうです。

明日は@cw-hiramaさんです。よろしくお願いします。

13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6