こんにちは、インターン生のYです!
最近フィジコンにはチロルチョコのジャンク品(大量に入って500円)が導入され、チロルチョコを食べる手が止まらない毎日です。
前回の投稿から時間が空いてしまいました…><
前記事ではM5Stackの説明や使用したものなどの説明をしましたが、この記事では機能を実装した過程を書いていきたいと思います。
制作手記
それでは制作したときの様子を段階を追って紹介していきます!
①センサー情報を取る/モーターを制御するプログラムを書く
まずは温度センサーから温度のデータを取るプログラムを書く必要があります。
このとき使ったのがUI FlowというM5Stack独自のWebアプリ的なものです。
これを使うと自分でコードを書かずに、直感的にブロックを組み合わせていくだけでプログラムを書けるという優れものです。
こんな感じなら簡単にできそう!と思ったのですが、この後この感覚は間違っていたことに気づきます。
このUI Flowでやっていることは、ざっくり言うと次の3点です。
- 温度センサーから温度情報を取得
- MQTTで温度情報をpublish
- トピックをsubscribeしたときorボタンを押したときサーボモーターをまわす
サーボモーターが回る(=エアコンのオンオフをする)タイミングは
- 指定した時刻になりsubscribeしたとき
- Slackで指示を出しsubscribeしたとき
- M5Stack本体のボタンを押したとき
です。
一番苦労した点は、温度情報のデータ形式について理解することです。
json形式で送る必要があったということがまずわからなかったうえに、jsonというものを知らなかったので「マップを作成」やら「key」「value」も使いこなせなかったことが苦戦した原因です。
あと困ったことは接続が不安定になることがあったことです。
全然M5Stackにつながらんやん!!!!と何度もなりました。
こればかりはもうどうしようもなかったです笑
今後の改善に期待です。
②Node-REDでバックエンド処理をする
つづいてNode-REDというものを使ってバックエンドのフローを作ります。
これも先ほどのUI Flowと同じでビジュアル的にさわれるものなのですが、なかなかクセがありました笑
このNode-REDでやったものとしては、次の4つです。
- 指定時刻になったことを確認
- 温度判定
- 一定温度以下/以上ならエアコンオン/オフ
- Slackに送信
9時半になったら温度センサーから温度情報を取得し、一定の条件を満たしたらエアコンをつけ、19時半になったらエアコンを消すというのが基本機能です。
それに加えて手動でオンオフしたときにも対応するようなフローを作りました。
難しかったことは、エアコンがオンなのかオフなのか判定する機能を付ける部分でした。
これをつけないと「一定温度以下」という情報が流れてくるたびに(今回は10秒に1回)サーボモーターがまわってしまい、スイッチが何回も押されてしまいます。
オンオフを判定できると、オンのときは温度情報が流れてきてもスイッチは押さない、といったことができます。
これは最初はどうすればいいのか全然わからず、実装するのに時間がかかりました。
しかもこのためにはchangeノードというもので元の値を逃がすといったNode-RED特有のクセを理解した作業をしなければならず、ここも苦戦しました…笑
③固定具を自作する
つづいてエアコン周辺にサーボモーターを固定する方法を考えました。
結論、3Dプリンターで固定治具を自作することにしました。
固定治具を作るために、まずはFusion 360を用いてCADデータを作りました。
3Dプリント前提のデータを作るのは初めてだったのでなんだかワクワクしましたね、これが造形されて出てくるんだ…!」って。
このとき考慮しなければならなかったのが、3Dプリント時に膨張する可能性があることでした。
例えば、サーボモーターを通す穴の大きさを少し大きめにとっておかないと、全然入らないなんてことがあります。
ただし固定具なので穴などを大きめに作り過ぎても全然固定できないので、この絶妙なバランスをとることが重要になってきます。
これがなかなか難しい…
2~3回はプリント失敗しました笑
④配線
最後に床をはがして配線しました。
床がはがせるものだとは知りませんでした。
完成図
苦難を乗り越えてついに完成!
ボタンを押しても、Slackから指示を飛ばしてもエアコンを操作することができます。
次の目標は音声でエアコンの操作をすることですね!