Limgのアイコン画像

100V USB スイッチ

Limg 2020年05月06日に作成  (2020年05月06日に更新)

100V USB スイッチ

PCから100Vで使う家電をコントロールしたいときがある。
デスクライトや扇風機や電気ポットなど色々ある。

前回の工作では「まごの手フットスイッチ」のスイッチ部を使ったが、
今回は余ったコンセント部で100V を On/OFF できるデバイスを作ってみた。

材料

まごの手フットスイッチ

ボタンのワンプッシュで 100V を On/OFF できるデバイスである。
プラグとコンセントが一体型となっていて、100Vの端子の片方は直結、
もう片方はケーブルを通してボタンの中にあるスイッチに繋がっている。
スイッチを On/Off することで、コンセントを On/Off できる仕組みである。

【まごの手フットスイッチ】WH2711KWP(ボタン&コード)
Panasonic: https://panasonic.jp/tap/p-db/WH2711KWP.html
Amazon .co.jp: 973 円
https://www.amazon.co.jp/パナソニック-Panasonic-まごの手式フットスイッチ-ホワイト-WH2711KWP/dp/B000J3ORUM/

まごの手フットスイッチ WH2711KWP

Arduino Nano Every

USB インタフェースが付いて、pin も標準的に多くて、小型な定番 Arduino。
元々 Arduino Nano が定番だったが、USB mini-B 端子を使っていてやや不便。
その端子を USB micro-B に変えたのが Arduino Nano Every である。

【Arduino Nano Every(ピンヘッダ付き)】
Switch Science: 1500円
https://www.switch-science.com/catalog/6199/

Arduino Nano Every

珍しい改悪として、pin の印字が pin 側に付くようになり、
ブレッドボードに挿した状態では全く読めなくなっている。
そのため、こういう pin assign マップが必須になる。

Arduino Nano Every の pin assign

100V Solid State Relay

100V を耐えうるリレーの中では安価で大容量である。
その上、外観がコンパクトに閉じていて、物理的堅牢性も良さそう。
端子がシンプルにネジ止めなため、配線も容易な類に入る。
スペック的に Arduino の I/O pin から直接駆動できそうだが、実際は動かない。

本体の目立つ位置に赤いLEDがあり、導通時に点灯指示する。
開発時は備え付けのLチカで動作確認できるため、非常に便利。(←本題)

【大容量ソリッドステートリレー(SSR)24V~380VAC 40A SSR-40DA】
秋月電子通商: 1000円
http://akizukidenshi.com/catalog/g/gI-08620/

ソリッドステートリレー SSR-40DA

設計

Arduino の制御信号をトランジスタで増幅してリレーを駆動する。
トランジスタによるスイッチング回路は、プチモンテさんの記事が詳しい。

ハードウェア

回路図

ハードウェア疑似コード

module AcSwitch(USB usb, AC100V ac100V) { ArduinoNanoEvery arduino; SSR40DA ssr; C1815 c1; usb = arduino.usb; ac100V = ssr.[1,2] arduino.5V = ssr.3; c1.B = R[100kΩ](arduino.D2); cl.E = R[220kΩ](cl.B) = arduino.GND; cl.C = ssr.4; }

SSR-40DA のスペックでは、導通するには 12mA の電流を超える必要がある。
また、上限が 20mA になっている。
http://akizukidenshi.com/download/ds/fotek/fotek_ssr.pdf / P5 Trigger current

手元にあるトランジスタは C1815 の BL である。

ベース電流、コレクタ電流、増幅率の関係と、

IB=IC÷hEFI_{\mathrm{B}} = I_{\mathrm{C}} \div h_{\mathrm{EF}}

ベース抵抗、コレクタ電圧、ベース・エミッタ間電圧降下、ベース電流の関係から、

RB=VCCVBEIBR_{\mathrm{B}} = \frac{V_{\mathrm{CC}} - V_{\mathrm{BE}}} {I_{\mathrm{B}}}

ベース電流の式を導ける。

RB=hEFVCCVBEICR_{\mathrm{B}} = h_{\mathrm{EF}} \frac{V_{\mathrm{CC}} - V_{\mathrm{BE}}} {I_{\mathrm{C}}}

クラスが BL であるため、hEF は 350~700 である。区間 350::700 として代入すると、70::140kΩが得られて、手元にある抵抗で組みやすそうな 100kΩ を選択した。

RB=350::7005V1V20mA=70::140kΩ100kΩR_{\mathrm{B}} = 350{::}700 \; \frac{5 \mathrm{V} - 1 \mathrm{V}}{20 \mathrm{mA}} = 70{::}140 \mathrm{k\Omega} \rightarrow 100\mathrm{k\Omega}

ベース・エミッタ抵抗 RBE は、ざっくりベース抵抗より1つ大きい 220kΩ とした。
これに関しては特に深く考えずに、2倍程度を目安に選んでいる。
抵抗は大体 1, 2.2, 4.7 系列で揃えていて、丁度 1 つ大きい値の抵抗を使うようにしている。

コレクタ抵抗 RC は、SSR の内部抵抗を割り出しながら、実測で出している。
直列に 300~400 Ω の抵抗を入れると上手く導通できる。
手元にある 1kΩ を3つ並べて 333 Ω を作って使った。

ソフトウェア

単純に受信した文字に応じて、SSR を制御する D2 pin を上げ下げしている。

Arduinoコード

int pSwitch = 2; void setup() { Serial.begin(9600); Serial.println("Ac Switch"); } void loop() { if (Serial.available()) { int c = Serial.read(); switch(c) { default: Serial.print("Invalid input: "); Serial.println(c); break; case '\r': case '\n': ; break; case '0': Serial.println("Off"); digitalWrite(pSwitch, LOW); break; case '1': Serial.println("On"); digitalWrite(pSwitch, HIGH); break; } } } }

PC側コード

PC 側は python でツールを作り、コマンドラインで On/OFF できるようにした。

PC側の制御コード(AcSwitch.py)

#need pyserial: # $> pip install pyserial import sys import serial args = sys.argv if len(args) < 3: print("Format: AcSwitch port cmd") quit() port = args[1] cmd = args[2] seri = serial.Serial(port, 9600, timeout=1000) print("Open [{}]".format(seri)) try: line = seri.readline().strip() print(line) while True: if seri.out_waiting == 0: break; print("send " + cmd) if cmd == 'off': seri.write(b'0') print("send[0]") elif cmd == 'on': seri.write(b'1') print("send[1]") else: print("Invalid Command: " + cmd) line = seri.readline().strip() print(line) except Exception as x: print("Error Stop!! " + x.args) finally: seri.close()

実行はシリアルポートを第1引数に、コマンドを第2引数にスクリプトを呼び出せば良い。
例えば、COM6 を使う場合は以下の通りになる。

実行コマンド

python AcSwitch.py COM6 on python AcSwitch.py COM6 off

実装

コンセント分解

裏にある回路図の通りだが、とりあえず分解して確認したくなるものである。
プラグに繋がるのが両端の端子で、右2つがケーブルの先にあるスイッチに接続されている。
スイッチの On/Off で回路の遮断を直に制御している。

コンセントの中身

半田付け

制作の途中からどうしても Arduino Nano Every の pin の間に入れたくなったため、
もはや基盤の存在意義を疑うほどの空中配線になってしまった。
裏面は Arduino の裏面くっつけて空間を稼ぐため、平に仕上げている。

半田付け途中
コア回路の完成形(表面)
コア回路の完成形(裏面)

arduino への接続は、ジャンパピンを使った。
いつでも脱着できるため、arduino の再利用が容易にできる。

Arduino に組み込んだ状態

コンセントとケーブル

最後にケーブルを繋げば完成。
まごの手フットスイッチの端子も圧着式のため、難なく付けられる。

完成形(※高圧端子の絶縁保護は未実施)

試用

PC に積んげて、Lチカしてみた。
もとい、100V は危険なので、とりあえず外した状態でテストしてみた。
導通の確認は、SSR に付いてる赤い LED の目視とした。

python AcSwitch.py COM10 on と打てば導通、
python AcSwitch.py COM6 off と打てば遮断しているのが確認できる。

ここに動画が表示されます

付録

失敗事例 : LED照明には使えなかった

これは WH2711KWP の公式ページに上がっている情報ではあるが、
「OFF時でも照明がぼんやり点灯(または点滅)することがあります。」とのこと。
panasonic:
https://panasonic.jp/tap/p-db/WH2711KWP.html

ダメ元でも実際に試したら点滅する現象に遭遇した。
これは説明の通り、交流の遮断が完全ではなく、僅かな漏れが発生しているに思える。

ただ、今家にコンセントを入れるだけで動き出す家電が殆どなく、
デスクライトが使えないと、扇風機やポットになるが、出すのが非常に手間がかかる。
その結果、SSR自体の信頼性は十分にあるので、Lチカでの導通テストとなった。

────────

1
Limgのアイコン画像
Arduinoを使った電子工作をしています。 elchika は Leafony 欲しさに始めました。 elchika 記事の方向性はまだ模索中ですが、 電子工作を中心としたAR/VR/IoTデバイス連携や鉄道模型工作に向かう可能性が高いです。
Limg さんが 2020/05/06 に 編集 をしました。 (メッセージ: 初版)
Limg さんが 2020/05/06 に 編集 をしました。
Limg さんが 2020/05/06 に 編集 をしました。
ログインしてコメントを投稿する