M5Stackでエアコンを操作する【スマートオフィス化計画①】

M5Stackでエアコン操作完成図




長期インターン先のオフィスをスマート化しようという動きがあり、そこでエアコンをSlackから操作できたらいいよねという話になりました。

どうやって実装していくかを考えたところ、M5Stackを使うのがよいという結論になりました。

この記事ではスマートオフィス化計画の第一弾と題して、M5Stackでオフィスのエアコンを操作する方法について説明します。

第二弾はこちら

M5Stackとは

M5Stack

M5StackはESP32(Wi-FiとBluetoothを内蔵するマイコン)、ボタン、ディスプレイなどをプラスチックのケースに詰め込んだモジュールです。

センサモジュールをはじめとしてさまざまなモジュールがあり、拡張性が高いのが特徴です。

M5Stack NEW PSRAM 2.0! FIRE IoT Kit Dual Core ESP32 16M-FLash+4M-PSRAM Development Board MIC/BLE MPU6050+MAG3110 of Micropython (FIRE)
M5Stack

M5Stackでエアコン操作する際に使用したもの

ここでは今回使用したものについて説明します。

温度センサ

M5Stackの温度センサ

M5Stackの特徴である拡張モジュールのひとつです。

M5Stack Mini ENV Unit with DHT12 BMP280 Digital DHT-12 Temperature Humidity Aire Pressure Sensor I2C Grove Connector
M5Stack

サーボモータ

サーボモータ

秋月などで売っているものです。

接続部品(Grove Cable)

画像のような部品でセンサーやモーターをつないでいきます。

M5Stack Universal 4Pin Buckled Grove Cable 2x50cm=100cm
M5Stack

自作固定治具

サーボモータのホルダーとセンサのホルダーを3Dプリンターで作りました。

サーボモータの固定治具

サーボモータの固定治具を上の図のように作りました。

ケーブルの分のスペースをあけ忘れ、何度も作り直しました…。

温度センサ用固定治具

温度センサ用の固定治具に関しては、円柱のポジション合わせと大きさ合わせが大変でした。

こちらも何度も作り直しました笑

M5Stackエアコン操作プログラム

ここからはプログラムについて説明していきます。

UI Flowでセンサ情報取得・サーボモータ制御

まずは温度センサーから温度のデータを取るプログラムを書く必要があります。

このときUI FlowというM5Stack独自のWebアプリ的なものを使用しました。

M5StackのUI Flow

これを使うと自分でコードを書かずに、直感的にブロックを組み合わせていくだけでプログラムを書くことができます。

このUI Flowでやっていることは、ざっくり言うと次の3点です。

  1. 温度センサーから温度情報を取得
  2. MQTTで温度情報をpublish
  3. トピックをsubscribeしたときorボタンを押したときサーボモーターをまわす

サーボモーターが回る(=エアコンのオンオフをする)タイミングは次の3つのときです。

  • 指定した時刻になりsubscribeしたとき
  • Slackで指示を出しsubscribeしたとき
  • M5Stack本体のボタンを押したとき

苦労した点は、温度情報のデータ形式について理解することです。

json形式で送る必要があったということがまずわからなかったうえに、当時はjsonというものを知らなかったので「マップを作成」やら「key」「value」も使いこなせなかったことが苦戦した原因です。

M5Stackのmqtt-pub

ほかに困ったこととしては接続が不安定になることがあったことです。

これに関しては今後の改善に期待するしかありません…笑

Node-REDでバックエンド処理

つづいてNode-REDというものを使ってバックエンドのフローを作りました。

Node-REDとM5Stackの連携

これも先ほどのUI Flowと同じで直感的に使えるものです。

このNode-REDで行ったものは次の4つです。

  1. 指定時刻になったことを確認
  2. 温度判定
  3. 一定温度以下/以上ならエアコンオン/オフ
  4. Slackに送信

ある指定時刻になったら温度センサーから温度情報を取得し、一定の条件を満たしたらエアコンをつけ、別の指定時刻になったらエアコンを消すというのが基本機能です。

それに加えて手動でオンオフしたときにも対応するようなフローを作りました。

難しかったことは、エアコンがオンなのかオフなのか判定する機能を付ける部分でした。

これをつけないと「一定温度以下」という情報が流れてくるたびに(今回は10秒に1回)サーボモーターがまわってしまい、スイッチが何回も押されてしまいます。

オンオフを判定できると、オンのときは温度情報が流れてきてもスイッチは押さない、といったことができます。

これは最初はどうすればいいのか全然わからず、実装に時間がかかりました。

これを解決するためにはchangeノードというもので元の値を逃がすといったNode-RED特有のクセを理解した作業をしなければならず、ここも苦戦しました。

固定具の自作

つづいてエアコン周辺にサーボモーターを固定する方法を考えました。

市販品に適したものがなさそうだったので、3Dプリンターで固定治具を自作することにしました。

固定治具を作るために、Fusion 360を用いてCADデータを作り、その後3Dプリンタで造形しました。

このとき考慮しなければならなかったのが、3Dプリント時に膨張する可能性があることでした。

例えば、サーボモーターを通す穴の大きさを少し大きめにとっておかないと、全然入らないなんてことがあります。

治具に入らないサーボモータ

ただし固定具なので穴などを大きめに作り過ぎても全然固定できないので、この絶妙なバランスをとることが重要になってきます。

これがなかなか難しく、2~3回はプリント失敗しました…笑

配線

床下配線

最後に床をはがして配線しました。

完成図

苦難を乗り越えてついに完成させることができました。

M5Stackでエアコン操作完成図

ボタンを押しても、Slackから指示を飛ばしてもエアコンを操作することができます。

つづき(スマートオフィス化計画第二弾)はこちら




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です