皆さま、スマートホームやってますか?
とは言っても、スマートホームで電気をつけたり消したりするには、対応する機器を買わなくてはいけないので、どうしてもお金がかかってしまいます
そこで使えるのが
SwitchBot !
でもたけぇ!
一個セール中で3600円ってなかなか厳しいですよね
ついでにテレビとかエアコンとかを操作できるようにする「学習リモコンも」一緒に買うと…
なんと7000!
あれ、意外と安いな
いやまあそんなことはどうでもいいのでさっさと自作していきましょう!
今回満たしたいスペック
・照明のスイッチを二つ操作
部屋の照明とロフトの照明のスイッチを押させる
・赤外線リモコン機能
以前作った自動カーテンを操作したい
・USB給電
設置場所のちょうど下にパソコンがあるのでそこから給電したい
・3Dプリンターでケースつくる
主に使った部品
・ESP32
https://www.amazon.co.jp/gp/product/B0718T232Z/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1
なんかプログラムの自動書き込み機能が、色々しないとうまくいかないので、心配な人は秋月とかのちゃんとした奴のほうがおすすめです。
・サーボモーター
・赤外線LED
akizukidenshi.com
・2SC1815 GR
その他、USBケーブルとか基板とかピンヘッダとかコネクターとかケーブルなどなど
ケース設計
本体は、ちょうどスイッチの隣についていたエアコンの、リモコンホルダーを固定していたネジを利用して固定するので
それに合うように、なるべくシンプルにケースを作って3Dプリンターでプリントしようと思います。
とりあえず設計したのがこちら
www.thingiverse.com
基板を置くスペースの上にエアコンのリモコンケースを取り付けられるようにし、その隣にサーボモーターを保持する感じになっています
あまり見た目はよくないですが、動けばOKです
なお、設計はFusion360、プリントはEnder-3 Proで行いました。
配線
今回は何かと電流がいるので、電源は外部からのものを直接使います。
JP1、JP2はそれぞれサーボモーターへ、
赤外線LEDは電圧約1.35~1.6V、電流50~100mAのものを使うので
R1は2kΩ、R2は10Ωのものを使いました
スイッチングに使ったトランジスタは2SC1815 GRです
プログラム
今回は3個のライブラリを使います
作ってくれた方に感謝!
#include <WiFi.h> #include <Arduino.h> #include <IRremoteESP8266.h> #include <IRsend.h> #include <Servo.h> #include "WemoSwitch.h" #include "WemoManager.h" #include "CallbackFunction.h" //送信する赤外線信号 uint16_t openData[99] = {3488, 1720, 454, 412, 454, 1278, 454, 412, 454, 412, 452, 412, 454, 412, 454, 412, 454, 412, 456, 412, 452, 412, 454, 412, 454, 412, 454, 412, 454, 1278, 454, 414, 452, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 410, 454, 412, 454, 1278, 456, 410, 456, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 412, 454, 1276, 454, 410, 456, 1278, 456, 412, 454, 412, 452, 1278, 454, 412, 454, 412, 452, 1280, 454, 412, 454, 1278, 454, 412, 454, 412, 454, 1278, 454, 1278, 454}; // PANASONIC 400401005253 uint16_t closeData[99] = {3508, 1700, 476, 390, 474, 1258, 474, 392, 474, 392, 472, 394, 474, 392, 472, 392, 474, 392, 474, 392, 474, 392, 476, 390, 476, 390, 474, 390, 474, 1258, 474, 390, 474, 392, 474, 390, 474, 392, 474, 392, 474, 392, 474, 392, 474, 392, 472, 394, 474, 1258, 476, 390, 474, 392, 472, 392, 474, 392, 474, 392, 476, 392, 474, 390, 474, 392, 474, 1258, 474, 1258, 476, 390, 474, 1258, 476, 390, 474, 392, 472, 1258, 472, 394, 472, 1258, 474, 1258, 472, 394, 472, 1260, 472, 394, 474, 392, 474, 1258, 474, 1258, 474}; // PANASONIC 40040100D2D3 //オン、オフの指示が来た時に呼ばれる関数を定義 void curtain_open(); void curtain_close(); void light_sw1(); void light_sw2(); char ssid[] = "abcd-1234"; // WiFiのSSIDを入力 char password[] = "1234abcd"; // WiFiのパスワードを入力 //wifi接続の確認用LEDピン(オンボードLED)と赤外線LED用の信号ピンを指定 const int ledPin = 2; IRsend irsend(19); //サーボ Servo servo1; Servo servo2; WemoManager wemoManager; //変数を初期化 WemoSwitch *curtain = NULL; WemoSwitch *light = NULL; void setup() { //wifiに接続 WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } IPAddress ip = WiFi.localIP(); //サーボモーターの信号ピンを指定 servo1.attach(16); servo2.attach(4); irsend.begin(); wemoManager.begin(); //new WemoSwitch(表示されるデバイス名, ポート, オンになったとき呼び出される関数名, オフになったとき呼び出される関数名); curtain = new WemoSwitch("カーテン", 80, curtain_open, curtain_close); light = new WemoSwitch("ライト", 81, light_sw1, light_sw2); wemoManager.addDevice(*curtain); wemoManager.addDevice(*light); //セットアップ処理が終わったらledを点灯 pinMode(ledPin, OUTPUT); delay(10); digitalWrite(ledPin, HIGH); } void loop() { wemoManager.serverLoop(); } void curtain_open() { //関数実行中は確認のためledを消して念のため5回信号を送信 digitalWrite(ledPin, LOW); for (int i = 0; i <= 5; i++) { irsend.sendRaw(openData, 99, 38); delay(50); }; digitalWrite(ledPin, HIGH); } void curtain_close() { //関数実行中は確認のためledを消して念のため5回信号を送信 digitalWrite(ledPin, LOW); for (int i = 0; i <= 5; i++) { irsend.sendRaw(closeData, 99, 38); delay(50); } digitalWrite(ledPin, HIGH); } void light_sw1() { //関数実行中は確認のためledを消してサーボを動かす digitalWrite(ledPin, LOW); servo1.write(0); delay(500); servo1.write(90); digitalWrite(ledPin, HIGH); } void light_sw2() { //関数実行中は確認のためledを消してサーボを動かす digitalWrite(ledPin, LOW); servo2.write(0); delay(500); servo2.write(90); digitalWrite(ledPin, HIGH); }
完成
設置したらこんな感じです。
結構いい感じじゃないですか?ちなみに上の4ピンコネクタが赤外線LEDにつながってますなぜ4ピンなのかというと2ピンの在庫が全然なかったからです。
蓋をつけるとこんな感じ(ネジなかったので両面テープで固定してます)
エアコンのリモコンケースをつけるとこんな感じなんか異様に飛び出してて少し違和感ありますが、まあしょうがない
ということで、なかなか満足できる出来に仕上がったと思います!
しかしながら赤外線LEDとかは基板丸出しですので気が向いたらケースを作ってあげましょう
ちなみにかかった値段は、新しく買ったもので
ESP32 1000円
サーボ 1200円
赤外線LED 300円
合計2500円でした!