リモートボタンというと例えば下記製品が存在します。
https://www.switchbot.jp/products/switchbot-remote
こちらはSwitchBot製品に限定されますが、スマートプラグやスイッチボットなどを物理ボタンを押すことでリモート制御出来るものです。
今回作成したものは、概念的に似たようなもの。
それに加えて以下機能が加わったものです。
- メーカー問わず、各種スマートホームデバイスの操作が可能(IFTTTやpythonなどによる制御が可能なものに限る)
- スマートホーム以外の利用用途、BOT系機能(LINE通知・Twitter通知・バッチ系動作など)と連動可能(利用者の技能に依存する)※Stream Deckに近い感じhttps://www.elgato.com/ja/stream-deck
- 電池交換不要(USBケーブル給電)
- ペアリング不要(WiFi接続のため)
結局は利用者の技能に依存しますが、SwitchBotリモートボタンとStream Deckの特性を組み合わせたWiFi接続のリモートボタンです。
イメージ図としてはこんな感じ。
DIYなので見た目は気にしてはいけない。
ここでは要点(レシピ)だけ書くことにします。(細かく書くとメンドウということもある)
必要作業はこちら。
- リモートボタンの作成
- Arduino IDEでのスケッチ開発
- 連携用システムの開発
- 利用状況確認画面の開発(オプション)
1.リモートボタンの作成
リモートボタンの材料はこちら。
・ESP8266系開発ボード
・給電と開発のためのMicro USBケーブル
・100均で入手可能なプラスチックケース
・100均で入手可能な壁紙シール(見栄え用)
・電子部品(線材、ボタン、抵抗、LEDなど)
一時的に作成するため、ブレッドボードが別途必要。
完成品を作るために、はんだ付け作業があります。
ブレッドボードのまま完成とさせるなら、プラスチックケースは相応の大きさを考えて購入する必要がある。
ボタンの数が3個以上になると開発ボードによってはデジタル入力の接続数が足りなくなります。
アナログ入力で読み取るようにして、3.3Vの電圧を「抵抗分圧回路」で1V以下に分圧する必要があります。
参考:https://www.petitmonte.com/robot/esp_wroom_02_analogread.html
抵抗分圧回路がよくわからなかったので、試しに下記のようなものを作り実験しました。
抵抗は2.2KΩを10個。
下記のようにアナログ入力の位置を1つずつ移動して抵抗数を増減させてみます。
アナログ入力
↑
3.3V → 抵抗1 ◆ 抵抗2 ◆ 抵抗3~10 → GND
結果、下記の分解能数ということがわかりました。
上との比較で差分を出し、適正値を探し(決め)ます。
だいたい100~110くらいなので、その付近を使用することにします。
抵抗が0個目の位置、1個目の位置は適正値とかけ離れるので対象外。
抵抗を通していなくて何も接続してない状態だと分解能数が50付近で検出されます。恐らくノイズが検出されてようです。
抵抗が10個目の位置の分解能数は13で上記のノイズより下回るため判断条件として使用できません。なので対象外です。
プログラムの判断条件として使用可能なのは抵抗2個目~9個目の間となります。
今回はボタン8個を使うので丁度良い感じになりました。
抵抗は2.2KΩを使用していますが、1KΩを使うことでもう少し細かく制御出来そうです。
そして次。
実測の分解能数はそのままでは使用できません。同じ場所でも微妙に±2程度の誤差が出てきます。
開発ボードはUSB給電で、USB電源アダプタの性能によっては更に誤差が出ます。
なので、下記のように分解能数の差分の中間値(平均値)を出して、誤差として割合を出して下限値と上限値を設定しました。
初期値や誤差の割合を色々調整した結果、下記となりました。
ボタン8個に対してボタン番号を付けます。
それぞれのボタンでアナログ入力での測定数値(分解能数)が異なるので、設定した下限値と上限値の範囲内であれば、そのボタンを押したということが判定出来ます。
調査した結果は後続のスケッチに反映させます。
そして、お試しで作成したものを本体に実装する。(抵抗群は裏に実装しています)
最終的に壁紙シールでハリボテしたプラケースに入れ込んだ。
2.Arduino IDEでのスケッチ開発
WiFi接続の設定はこちらで設定することになります。
ボタンが押されたら連携用システムにHTTP通信する処理を投入します。
ボタン番号だけ設定しておき、押された番号を連携システムへ渡すだけになります。
要はボタンに応じた動作は後続の連携用システムの方へ全部丸投げします。
3.連携用システムの開発
汎用性が高いのでNode-REDを利用します。
こちらの環境構築等は事前に自宅内に準備済みという扱いにします。
IFTTT経由はHTTPS通信でPOST、pythonによる制御であればgithubなどよりプログラムを取得して設定しておきます。
下記図だと「ボタン分岐」の場所。
リモートボタン側からボタン番号が連携されてくるので、番号に応じて処理を振り分けます。
1番ならスマートスイッチの処理、2番ならスイッチボットの処理、3番ならLINE通知の処理など。
「デバイス分岐」は開発ボード毎に分岐する箇所になります。
テストを行ったが、8ボタンそれぞれ問題なく情報を受け取れている。
4.利用状況確認画面の開発(オプション)
こちらはリモートボタンの稼働状況がわかりやすくなるためのものなので、必須ではありません。
Node-REDでの処理で連携データをデータベースに保存し、保存した内容をWEBサーバーから閲覧出来るようにしたものです。
主に下記を可視化させた。
・IoTデバイスの接続状況
・IoTデバイスの利用履歴
簡素だが、こんな感じ。
「玄関ドア」は下記と開発ボードを使用したドアセンサーデバイスです。
なお、粘着テープの兼ね合いで現在ドアから剥がれ落ちており、デバイスは停止しています。
ここまでの1~4の作業は試行錯誤で行っていたため、1日2時間程度で約2週間費やしています。
便利!
メリットを書いてみる。
- スマートデバイスを利用している前提では便利だと思う。
- スマートスイッチに関してはスマホアプリを立ち上げて操作したりスマートスイッチを設置している場所に行って物理ボタンを押したりしなくてよくなくなる。
- Google HomeやAlexaなどの音声操作もよいのだけれど、手を伸ばして細かい制御をするならリモートボタンのほうが早かったりする。
- 細かい内部制御についてはNode-RED側を修正すれば拡張出来るので、リモートボタンそのものは1回作れば修正する必要はない。
- 電池交換不要なので、そこは気にする必要はない。
デメリットを書いてみる。
- 5V給電が必要なので有線接続になる。そのため置ける場所が限られる。常に電源供給しているので気になる人は気になるかもしれない。
- Wi-Fi接続のため、接続出来る範囲の場所に置く必要がある。
- 手軽に押せてしまうので、第三者による制御も手軽に出来てしまう(セキュリティリスクが伴う)
- Wi-Fiの通信状況によって微妙にラグが発生することがある。
感想など。
- 開発ボードでアナログ入力を初めて使いました。
- 電子工作系は初心者寄りなので「抵抗分圧回路」というものを勉強出来てよかった題材でした。
- 物理ボタンではなく、赤外線センサーの受信部を取り付けてリモコンをボタン替わりにした方がよいのではと思い実装してみたけれど、センサーから30cmくらいの範囲までリモコンを近づけないと反応しないので絶望した。
-
購入金額
3,000円
-
購入日
2022年08月10日
-
購入場所
DIY
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。