概要
自作ステンドグラススタンドの照明に LEDを埋め込みます。
IRリモコンで発光色、発光パターンを変えられる T10 LEDルームランプを使用します。
ランプ自体に赤外線受光器、コントローラが組み込まれていて、スタンドの中に設置するとリモコンが届きにくいことがあるので、スマホ(iPhone)からESP32のBLE経由でランプの受光部近傍に設置した赤外LEDでリモートコントロールします。
これで夜間隣の部屋へ行く時、メイン照明スイッチを探さなくて良くなります。また、ディスプレイとしても面白いです。
先々は、elchikaキャンペーンでプレゼントしていただいた「Leafony」に代替えしようと思っています。
なお、製作にあたって、elchika運営さんの「M5StickCでスマホから操作できる家電リモコンを作る」が非常に参考になりました。
※長文ですのでお時間のある時に御覧ください。
概略図
ステンドグラススタンド
錫で色ガラスを固定したステンドグラスです。製作方法等は 電子工作とは関連がないので外観の紹介に留めます。
サイズ:断面正三角形 Width 100mm Hight 170mm 重量:約700 g
部品構成
-
ESP32 DevKit C 秋月電子通商
-
T10 フルカラーLEDルームランプ 秋月電子通商 200円/1個
-
メーカーカテゴリ SANYOU LIGHTINGS TECHNOLOGY CO.,LTD
自由に色を変えられるT10ウェッジ球LEDです。本体に赤外線受光部があり専用のリモコンで操作します。電源を切っても点灯の色やパターンは保持されますのでガラスケースやショーウインドーの演出にも最適です。(秋月電子通商HPより抜粋) -
主な仕様
・ソケット:T10
・電源:DC9~16V
-
-
T10 フルカラーLEDルームランプ リモコン付 秋月電子通商 600円(リモコンフォーマット解析用として)
パッケージに上記のT10が2個、リモコンが1個入っています -
赤外線受光器、 赤外LED: アマゾン(受光器はリモコンフォーマット解析用)
KeeYees VS1838B HX1838 1838 赤外線センサー リモコン 受光部 受信機 赤外線受光モジュール 25個入り + 5mm 赤外線LED 940nm 高輝度 25個入り 850円
秋月電子通商さんでも良いのですが、アマゾンプライム会員なので、輸送費を考えてこちらにしました。
25個×2も入っているので、一生使えそうです。なお、全く問題なく使えました。
SoftWare
Blynk
iPhoneのBLEコントロール用に使用 簡単に、無料枠でIoTを実現できます。
※非常に良くできたSoftです。外部接続のプロトタイピングSoftとして最強だと思います。
出来上がった外観もなかなかです。
具体例、使い方は、elchika運営さんの「M5StickCでスマホから操作できる家電リモコンを作る」を参照してください。
PlatformIO+VSCode
ESP32の開発用:こちらも elchikaに記載が沢山あります。
慣れてきたせいもあり、使い心地最高!! お薦めです。
なお、上記のBlynkも PlatformIO+VSCodeから利用しています。
前準備
IRリモコンボタン構成
この内、PowerOn/PowerOff/ Light Up/ Light Down
R/G/B/W/ Flash/ Strobe / Fade/ Smooth
のコマンドを実装する。
IRリモコンのフォーマット解析
上記コマンドを実装するために、リモコンのフォーマット解析をします。
これについても 上記記事が参考になりますが、それと異なる所のみ記載します。
H/W
フォーマット解析
IRremoteESP8266のexamplesのIRrecvDumpV2のスケッチを書き込むと簡単に受信した信号を表示することができます。
- PlatformIO.ini このファイルで「IRremoteESP8266」をインクルードします。
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = IRremoteESP8266
monitor_port = /dev/cu.SLAB_USBtoUART
upload_port = /dev/cu.SLAB_USBtoUART
monitor_speed = 115200
lib_deps = ・・・・・ とすると、
そのライブラリがプロジェクトに読み込まれます
- examples > IRrecvDumpV2>IRrecvDumpV2.ino のファイルをコピーし、src>IRrecvDumpV2.inoとペーストします。
コンパイル、転送をし、上記受光センサに対し、リモコンのボタンを押すと、解析結果がターミナルに出力されます。
--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at http://bit.ly/pio-monitor-filters
--- Miniterm on /dev/cu.SLAB_USBtoUART 115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Timestamp : 000021.775
Library : v2.7.7
Protocol : NEC
Code : 0x807FB04F (32 Bits)
uint16_t rawData[71] = {8932, 4484, 636, 1616, 636, 514, 636, 512, 582, 568, 636, 512, 636, 514, 634, 514, 582, 566, 582, 566, 582, 1672, 634, 1620, 636, 1618, 638, 1614, 638, 1616, 644, 1610, 634, 1618, 582, 1672, 636, 514, 632, 1620, 634, 1618, 638, 510, 582, 566, 634, 516, 636, 512, 634, 514, 582, 1670, 582, 566, 584, 566, 584, 1670, 632, 1622, 634, 1620, 638, 1616, 638, 38798, 8932, 2248, 634}; // NEC 807FB04F
uint32_t address = 0x1;
uint32_t command = 0xD;
uint64_t data = 0x807FB04F;
IRリモコン IR送信
H/W
赤外線LEDのアノード側に制限抵抗47Ωを接続そして、ESP32 GPIO4に接続
カソード側は ESP32 GNDに接続
送信テスト
上記フォーマット解析と同様 PlatformIO.ini に lib_deps = IRremoteESP8266 を記載
展開されたexamples の IRSendDemo.ino をベースに修正
(NECプロトコルに対応)
NECプロトコルコマンド送信テスト
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
void setup() {
irsend.begin();
#if ESP8266
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
#else // ESP8266
Serial.begin(115200, SERIAL_8N1);
#endif // ESP8266
Serial.println("NEC On");
irsend.sendNEC(0x807FB04F);
delay(10000);
}
void loop() {
Serial.println("NEC Red");
irsend.sendNEC(0x807F9867);
delay(5000);
Serial.println("NEC Green");
irsend.sendNEC(0x807FD827);
delay(5000);
Serial.println("NEC Blue");
irsend.sendNEC(0x807F8877);
delay(5000);
Serial.println("NEC White");
irsend.sendNEC(0x807FA857);
delay(5000);
}
ESP32 DevKit Cの赤外LEDを T10 フルカラーLEDルームランプに向けて
上記プログラムを走らすと、問題なく点灯、R/G/B/W の変更が動作しました。
(delayはこんなには必要ないです)
Blynk
- iPhoneにAppleStoreからインストール
- また、PlatformIOのGlobal StrageにBlynkライブラリをインストール
PlatformIO.iniは各Project毎のライブラリ管理であり、Global Strageにインストールするのは行儀が悪いのですが、後でGlobalから移動させようと思っています。
詳細は 件の記事を参照してください。
画面構成
PowerOn/Off ボタン LightUp/Downボタン
Menu選択 (画面はGreenを選択途中)
ESP32 ソースコード
BLE_IRリモコンソース
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
#define BLYNK_PRINT Serial
#define BLYNK_USE_DIRECT_CONNECT
#include <BlynkSimpleEsp32_BLE.h>
#include <BLEDevice.h>
#include <BLEServer.h>
char auth[] = "ここにプロジェクト作成時にメールで送られてきた Auth Tokenを入れる";
void setup() {
Serial.begin(115200, SERIAL_8N1);
pinMode(GPIO_NUM_4, OUTPUT);
Serial.begin(15200);
Serial.println("Waiting for connections...");
Blynk.setDeviceName("ESP32 IRremote"); //これがBLEのデバイス名
Blynk.begin(auth);
}
void loop() {
Blynk.run();
}
// Function Menu
BLYNK_WRITE(V0) {
int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable
unsigned long sendCommand = 0xFFFFFFFF;
Serial.println(pinValue);
switch (pinValue)
{
case 1: //Red
sendCommand = 0x807F9867;
break;
case 2: //Green
sendCommand = 0x807FD827;
break;
case 3: //Blue
sendCommand = 0x807F8877;
break;
case 4: //White
sendCommand = 0x807FA857;
break;
case 5: //Flash
sendCommand = 0x807FB24D;
break;
case 6: //Strobe
sendCommand = 0x807F00FF;
break;
case 7: //Fade
sendCommand = 0x807F58A7;
break;
case 8: //Smooth
sendCommand = 0x807F30CF;
break;
default:
Serial.println("V0:Unknown Command");
break;
}
irsend.sendNEC(sendCommand);
delay(10);
}
BLYNK_WRITE(V2) {
if (param.asInt() == 1) { // Power On
irsend.sendNEC(0x807FB04F);
} else { // Power Off
irsend.sendNEC(0x807FF807);
}
}
BLYNK_WRITE(V4) { // light Up
if (param.asInt() == 1) {
irsend.sendNEC(0x807F906F);
}
}
BLYNK_WRITE(V5) { // light Down
if (param.asInt() == 1) {
irsend.sendNEC(0x807FB847);
}
}
リモコンがNECプロトコルだけなので、32bitデータを送信するだけです。
BLYNK_WRITE(V0)は、ボタン等のWindgetに割り当てたバーチャルピンの値です。
iPhone側でMenuが確定すると、BLEからV0の値が渡ってきます。
動作状況
感想
- T10 フルカラーLEDルームランプ
これだけの機能を盛り込んだLEDが 200円!!
照度もかなりありすぐれものです。
自作の回路で100Vを引き回したくないので、DC 9-16V入力は嬉しい。 - Blynk
通信制御するプロトタイプには最適と思います。
BLEのメニューを自前で実装するとなるとかなり大変です。(AppleStoreにBLEアプリケーションを公開した経験から言っても)
また、iPhoneの場合はAppleStoreの審査が必要です。この際に、Hardwareを要求される場合もあるので、かなりハードルが高いです。
もし、公開する際でも、プロトタイプで十分検証してから開発に取り掛かるべきです。
そのためのツールとして Blynkは最高です。 - 赤外線信号の解析、実装の「IRremoteESP8266」ライブラリ
ライブラリを組み込んで、サンプルプログラムをちょこっと手直しするだけですぐ使えます。
また、サンプルプログラムも無駄に長くなく理解しやすいです。 - PlatformIO+VSCode
ライブラリ管理が簡単で、プロジェクト毎のローカルに入れることが出来る。
また、インテリセンスの補完も効いて使いやすい。
VSCodeも使いやすく MicroSoftでもやれば出来るじゃないと思いました。
(偏見がだいぶ入っていますが)
今後の方針
一応基本は出来上がったので、これからやりたいことを列挙してみます。
- スタンド下部のケーシング
- 概要にも書きましたが、プレゼントでいただいたLeafonyでのESP32代替え
最初からLeafonyでやりたかったのですが、焼いてしまったら大変なので・・・・ - iPhoneの加速度計を利用してジェスチャーによるコントロール
- 音声コマンドによるコントロール
「おい起きろ!」と言う事により点灯するのも面白い - iBeaconを利用して近づいたら点灯
但し、BlynkにiBeaconのウィジェットはあるのかな? - ハンドメードマーケットへの出品
既に色々とハンドメードマーケットに出品しているのですが、
elchikaの投稿を見るようなマニアック(褒め言葉です)な人たち以外の、おじいさん、おばあさんには通常のリモコンのほうが使いやすい。また、一般ユーザーに取扱説明書を書くのを考えるだけで憂鬱です。
そのためには 赤外リモコンリピーターがいいと思うのですが、コストを考えてCPU無しで実装してみたいと考えています。
最後に
出来上がったプロジェクトをこういう具合に投稿するのは、自分のまとめにもなっていいですね。
「elchika」さんには、これから「Leafony」の投稿が集まってくると思いますが、皆さんどんどん投稿してください。
投稿者の人気記事
-
HakoHiro
さんが
2020/06/25
に
編集
をしました。
(メッセージ: 初版)
-
HakoHiro
さんが
2020/06/25
に
編集
をしました。
(メッセージ: 写真変更)
-
HakoHiro
さんが
2021/02/09
に
編集
をしました。
(メッセージ: タイトルに写真を追加、動画のリンクを修正)
-
HakoHiro
さんが
2021/02/09
に
編集
をしました。
(メッセージ: タイトルに写真を追加、動画のリンクを修正)
ログインしてコメントを投稿する