赤外線リモコンでON/OFFできる電源タップ(3口)を作成しました。
私は夜間は部屋の天井照明は点けずにインテリアライトを使用しているのですが、設置場所によっては電源スイッチに手が届きづらく、ON/OFFが結構面倒だったりします。
そこでリモコンでON/OFFできる電源タップを作って楽しようというわけです。
構成
キーパーツ
AC100VをON/OFFするために、秋月電子のソリッド・ステート・リレー(SSR)キット 25A(20A)タイプを使用しました。
赤外線リモコンのコード受信とSSRキットの制御にはSeeeduino XIAOを使います。たかだか入力1本、出力3本の計4本のIOで済むので、フットプリントの小ささでXIAOを選びました。
リモコンのコードを受け取ったらXIAOがSSRをON/OFFする、という仕組みです。
その他の主な部品
IRセンサは赤外線リモコン受信モジュール SPS-442-1(38kHz)。お買い得だったので。
AC/DCはIRM-01-5をDigi-Keyで買ってみました。コンパクトサイズでAC側2ピン、DC側2ピンの4ピンのみ。2.54mmピッチでユニバーサル基板にポン付けするだけ。楽ですね。
そして肝心?の赤外線リモコンですが、100円ショップで見つけた↓を使ってみます。
回路図
Seeeduino XIAO(というか本体のSAMD21)のIO電流は吐き出し7mA、吸い込み10mA程度が限界です。一方SSRキットの制御入力(フォトカプラのLED)には安定動作のためには10mA以上流したほうが良いようなので、トランジスタでドライブしています。
AC電源ラインのヒューズは2Aとしました。これはSSRキット1個の放熱不要なワット数(200W)で決めています。負荷には数W程度のLED照明を想定しているので十分でしょう。
AC電源ラインの分岐に使っているのはWAGOのWFRシリーズです。ホームセンターの電気器具エリアでよく見かけます。
点線はピンヘッダ、ピンソケットでハーネス状につないでいるところです。制御基板の実装はユニバーサル基板を使いました。
プログラム
お手軽なArduinoで作成です。
赤外線リモコンの受信に関してはArduino-IRremoteという素晴らしいライブラリがありますので、使わない手はないでしょう。
リモコンコードの特定
リモコンはボタンに対応したコードを送信してきますが、まずは100均リモコンのコードを特定する必要があります。
以下のスケッチで取得できました。
IRremoteで検索して出てくる日本語情報はもう古く、動かないものばかりです(若干ハマった)。
赤外線リモコンのコードを取得する
#include <IRremote.h>
/*
* 赤外線リモコンのコードを取得する
*/
#define IR_INPUT_PIN 7
IRrecv reciver(IR_INPUT_PIN);
void setup() {
pinMode(IR_INPUT_PIN, INPUT);
Serial.begin(115200);
delay(2000);
reciver.enableIRIn();
Serial.println("Ready to receive IR signals.");
}
void loop() {
if(reciver.decode())
{
Serial.print("Recived: ");
Serial.println(reciver.results.value, HEX);
reciver.resume();
}
}
結果としては下表のとおり。
ボタン | コード |
---|---|
ON | 0xFF807F |
OFF | 0xFF00FF |
+ | 0xFF30CF |
- | 0xFF906F |
10% | 0xFF50AF |
40% | 0xFFA857 |
80% | 0xFFB04F |
100% | 0xFF6897 |
10 | 0xFF708F |
30 | 0xFF28D7 |
60 | 0xFF609F |
120 | 0xFF10EF |
完成スケッチ
リモコンのボタンに対する動作は、SSRのONとOFFを個別に割り当てることにしました。
SSRキット1はONボタンでON、OFFボタンでOFF。SSRキット2は+ボタンでON、ーボタンでOFF・・・といった具合です。
ロジックは単純に受信したコードでswitch-caseして、ONさせるコードならGPIOをHIGH、OFFにするコードならLOWにしているだけです。
VS Code & Platform IOで開発したので、1行目にArduino.hをインクルードしています。
完成スケッチ
#include <Arduino.h>
#include <IRremote.h>
/*
* 赤外線リモコン制御電源タップ
*/
// ピン割り当て
#define CHANNEL1 0 // SSRキット1
#define CHANNEL2 3 // SSRキット2
#define CHANNEL3 6 // SSRキット3
#define IR_INPUT_PIN 7 // IR受信モジュールVout
// リモコンコード
#define IR_CODE_ON 0xFF807F // ONボタン
#define IR_CODE_OFF 0xFF00FF // OFFボタン
#define IR_CODE_PLUS 0xFF30CF // +ボタン
#define IR_CODE_MINUS 0xFF906F // -ボタン
#define IR_CODE_10PER 0xFF50AF // 10%ボタン
#define IR_CODE_40PER 0xFFA857 // 40%ボタン
IRrecv reciver(IR_INPUT_PIN);
void setup() {
// setting output
pinMode(CHANNEL1, OUTPUT);
digitalWrite(CHANNEL1, LOW);
pinMode(CHANNEL2, OUTPUT);
digitalWrite(CHANNEL2, LOW);
pinMode(CHANNEL3, OUTPUT);
digitalWrite(CHANNEL3, LOW);
// setting IR input
pinMode(IR_INPUT_PIN, INPUT);
reciver.enableIRIn();
}
void loop() {
if(reciver.decode())
{
switch (reciver.results.value)
{
case IR_CODE_ON:
digitalWrite(CHANNEL1, HIGH);
break;
case IR_CODE_OFF:
digitalWrite(CHANNEL1, LOW);
break;
case IR_CODE_PLUS:
digitalWrite(CHANNEL2, HIGH);
break;
case IR_CODE_MINUS:
digitalWrite(CHANNEL2, LOW);
break;
case IR_CODE_10PER:
digitalWrite(CHANNEL3, HIGH);
break;
case IR_CODE_40PER:
digitalWrite(CHANNEL3, LOW);
break;
default:
// Unknown IR code
break;
}
reciver.resume();
}
}
ケース
ケースといえばタカチ、といきたい所ですが、庶民は100円ショップで見繕います。
ケース加工
穴あけ加工はACアウトレット用が3か所、ヒューズホルダの1か所、IRセンサが顔を出す穴1か所、電源コード用に1か所です。
基板は3Dプリントでベースのような物を作って、両面テープで貼り付けます。
もろもろ結線して、完成。
-
TakHom
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
TakHom
さんが
2021/02/28
に
編集
をしました。
-
TakHom
さんが
2021/03/02
に
編集
をしました。
ログインしてコメントを投稿する