TakHom が 2021年02月28日12時46分10秒 に編集
初版
タイトルの変更
赤外線リモコンでON/OFFする電源タップ
タグの変更
Seeeduino
XIAO
Arduino
赤外線リモコン
秋葉原2021
本文の変更
赤外線リモコンでON/OFFできる電源タップ(3口)を作成しました。 私は夜間は部屋の天井照明は点けずにインテリアライトを使用しているのですが、設置場所によっては電源スイッチに手が届きづらく、ON/OFFが結構面倒だったりします。 そこでリモコンでON/OFFできる電源タップを作って楽しようというわけです。 # 構成  ## キーパーツ AC100VをON/OFFするために、秋月電子の[ソリッド・ステート・リレー(SSR)キット 25A(20A)タイプ](https://akizukidenshi.com/catalog/g/gK-00203/)を使用しました。 赤外線リモコンのコード受信とSSRキットの制御には[Seeeduino XIAO](https://wiki.seeedstudio.com/Seeeduino-XIAO/)を使います。たかだか入力1本、出力3本の計4本のIOで済むので、フットプリントの小ささでXIAOを選びました。 リモコンのコードを受け取ったらXIAOがSSRをON/OFFする、という仕組みです。 ## その他の主な部品 IRセンサは[赤外線リモコン受信モジュール SPS-442-1(38kHz)](https://akizukidenshi.com/catalog/g/gI-00573/)。お買い得だったので。 AC/DCは[IRM-01-5](https://www.digikey.jp/product-detail/ja/mean-well-usa-inc/IRM-01-5/1866-2998-ND/7704616)を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シリーズ](https://www.wago.co.jp/pickup/WFRseries.html)です。ホームセンターの電気器具エリアでよく見かけます。 点線はピンヘッダ、ピンソケットでハーネス状につないでいるところです。制御基板の実装はユニバーサル基板を使いました。 # プログラム お手軽なArduinoで作成です。 赤外線リモコンの受信に関しては[Arduino-IRremote](https://github.com/Arduino-IRremote/Arduino-IRremote)という素晴らしいライブラリがありますので、使わない手はないでしょう。 ## リモコンコードの特定 リモコンはボタンに対応したコードを送信してきますが、まずは100均リモコンのコードを特定する必要があります。 以下のスケッチで取得できました。 :exclamation: IRremoteで検索して出てくる日本語情報はもう古く、動かないものばかりです(若干ハマった)。 ```arduino:赤外線リモコンのコードを取得する #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をインクルードしています。 ```arduino:完成スケッチ #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プリントでベースのような物を作って、両面テープで貼り付けます。   もろもろ結線して、完成。   # 動作のようす 最後に動画を載せておきます。 