スマートホーム万歳
December 15, 2020
ここ2,3年はGoogle Home miniしか話し相手がいないのだが、今年はこのスマートスピーカーに家電をつなげることにハマっていた。
俗に言うスマートホームというやつだ。
今回遂にロールスクリーンを声で操作することに成功したのでスマートホーム化も区切りがつき、ブログの記事にしようと思った次第だ。
スマートホームシステム
本当は図を使ってわかりやすく解説したいがすべて文章で説明する。
1.nature remo
おなじみの学習リモコン。IFTTTにもつながる、温湿度センサー搭載。我が家ではテレビ、シーリングライト、エアコンが接続されている。家電との通信は当然赤外線で行う
2.TP-link スマートプラグ
家のスタンドライトを目覚まし代わりにしたくね?という気持ちで買ったスマートプラグ。結局あまり使ってない。プラグ本体がインターネットとつながって直接サーバー上のアプリとやり取りしている。
3.switchbot & switchbot ハブミニ
出来れば使いたくなかった飛び道具。物理スイッチを物理的に押すことでスマート化を図る装置。通信はハブミニだけインターネットとつながっていて、ハブミニ―switchbot間はBluetoothで動いている。
備え付けの照明が交換できないタイプだったので仕方なく手に入れた。
4.IKEA トロードフリ & トロードフリゲートウェイ
IKEAのスマート照明。トロードフリシリーズ。後付けで手に入れたスポットライトの電球に使っている。ゲートウェイがインターネットとつながって照明とゲートウェイ間はZigBeeで通信している。
照明の電球が交換できるタイプだったら何も考えずトロードフリシリーズを買うのがいいと思う。E26だけでなくE17やGU10口金まであって安い。
以上四点である。
照明すべてと空調、テレビを制覇したので残る牙城はカーテン、鍵くらいのものだ。
鍵の自動化は家が自動ドアになるわけではないのでいまいち利点を見いだせないが、カーテンの電動化はぜひ実現したい。
カーテン電動化計画
カーテンを後付けで電動化するキットは多い。そのほとんどはカーテンレールをモノレールのように移動する装置がカーテンを開け閉めするという仕組みだ。
しかしこの装置には問題があり、バッテリーとモーターを内蔵した重い装置を支えるだけの力はカーテンレールにない。
またカーテンは開いた後に帯(タッセル)で留めて初めて全開になる。この帯で留めるという動作を自動化するのはほとんど不可能だ。
つまり、電動カーテンというのはそれを前提とした設計をされていない一般家庭において必ず不完全なものになる。
そこで今回はカーテンを使わずにロールスクリーンを電動化する。
電動ロールスクリーンの完成品として一番手に入れやすいのはIKEAのフィルトゥールであろうが、これは幅が140cmしかない。
仕方ないのでAmazon, AliEXで中華製品を調べるもGoogle Homeと接続可能を謳っている商品が思いのほかない。
また、リモコンも多チャンネル化のためにRFを使っているためnature remoでつなぐこともできない。
もちろんRFリモコンは先日買ったHackRFoneでリプレイ攻撃を仕掛けてGoogle Homeとつなぐことはできるだろうが、違法行為である。
すべてを解決するために自作することにした。
買った物
まず電動化するロールスクリーンが必要だ。ニトリのロールスクリーンを購入。大サイズ6000円くらいだったかと思う。
次にロールスクリーンを電動化するモーターが必要だろう。
12Vモーターのギアボックスキットを買う。回転数は15回転で上がりきるロールスクリーンを30秒で上げる想定で30rpmの物を購入。
ロールスクリーンとモーター軸をつなぐフランジカップリング、720円。地味に高級品だが自作できないので買うしかない。
そしてマイコンを買う。今回はスマート化が目的なのでwifi機能を搭載したマイコン、M5stackを購入。
マイコンで12Vのモーターを動かすにはモータードライバーというチップが必要らしい。秋月で買ったTB6643KQ 280円
あとリード線とか熱収縮チューブとかの小物を購入する。
家で拾った物
モーターに12Vを給電する電源が必要。家の中を漁っていたら昔使っていたbluetoothスピーカーのACアダプタがちょうど12V15Wなので流用。たぶんハードオフに行けば300円くらいで買える。
昔PCの修理に使った外径5.5mm内径2.1mm標準dcプラグ。10本セットで買っているので今回使いどころが現れてよかった。
ロールスクリーン改造
分解して電動ドリルで穴開けてモーターを取り付ける。家の余ったねじはこのような時に有効活用される。
配線する。実はここでM5stackを取り付けつつチェーンガイドがモーターに持っていかれないようにする押さえを缶コーヒーの空き缶で自作している。
ハードウェア的な部分はほぼ終わったのでArduino IDEでスケッチを描く。まずはボタンで上下するようにした。
が、ここで問題発生。モーターを10秒ほど連続で動かすとM5stackの3.3V出力が止まってしまう。 試しにモバイルバッテリーをM5stackにつないでみたらモーターの連続稼働ができるようになった。
どうやらM5stackの内蔵バッテリーは貧弱なのでモータードライバに電気を流し続けるのが難しいらしい。
そこで12Vから5Vを取り出せるように100均ショップでシガーソケットUSB充電器を購入。分解してそのまま12V-5V変圧器として利用する。
今回のロールスクリーンの開閉制御方法は移動時間決め打ちである。つまり、開けるときは35000ms正転させて閉じるときは28600ms逆転させる。
外乱の影響はそのまま結果に反映される。もちろんロータリーエンコーダを使ったフィードバック制御を入れたいが、これ以上ロールスクリーン本体を改造するのが面倒くさくなってしまった。
ここまでは簡単なプログラミングである。問題はここからどうやってGoogleHomeにつなげるかだ。
やりたかったこと(あきらめたこと)
当初はM5stackの無線LAN機能を活用してGoogleHomeアプリを作成する予定だった。
方向性としてはアプリのサンプルコード https://github.com/actions-on-google/smart-home-nodejs を基に設定をいじって自分のM5stackにつなげる。
手こずりながらも説明通りにデプロイし、仮想ランプをアプリ上で登録するところまでは出来た。しかしOauth2.0認証がどうしてもうまくいかない。 src/config-provider.ts の場所もわからなかった。
ちなみにこのサンプルコード、firebase.jsonの”hosting”:{}内にある”$RESOURCE_DIR\“を”%RESOURCE_DIR%\“にしないとデプロイできなかった。
とにかく自分の技術力が無いためにM5stackを直接インターネットとつないで制御するスマートロールスクリーンはあきらめることにした。
やったこと
インターネットと直接ではなく赤外線で動く電動ロールスクリーンを作成し、nature remoでスマート化することにした。
ダイソーで売ってた赤外線リモコンライト。300円
リモコンのボタンがトグルではないという点でポイントが高い。
これを分解して
LEDをはがした後に、基板の-にm5stackのGND +に3.3V出力をつなげる。U2チップ(マイコン)の8本の足にm5stackのデジタル入力端子を押し当てながらどこが赤外線でオンオフをしているピンかを探す。
どうやら3番ピンが赤外線でオンオフしているピンらしいので、足にワイヤーをはんだ付け。
そこからデジタル入力端子をスイッチにするスケッチを書いて動かせば完成だ。
全部繋げた結果がこれ。
せっかくのm5stackをこんなことに使うわけにもいかないのでいずれもっと安いマイコンでコンパクトな仕組みにする予定。