Limg が 2020年05月06日23時37分58秒 に編集
初版
タイトルの変更
100V USB スイッチ
タグの変更
Arduino
Arduino_Nano_Every
Lチカ
USB
スイッチ
本文の変更
# 100V USB スイッチ PCから100Vで使う家電をコントロールしたいときがある。 デスクライトや扇風機や電気ポットなど色々ある。 [前回の工作](https://elchika.com/article/7abf6d9f-394d-4a96-9c5a-83fc11489389/)では「まごの手フットスイッチ」のスイッチ部を使ったが、 今回は余ったコンセント部で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](https://camo.elchika.com/91eabcd2a7f160d0d2224dcc554275e73824eb44/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f64636435386466382d636136662d343735622d396132382d656331376630616563323562/) ## 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](https://camo.elchika.com/eaa2ff97605491fcc3be0ba98b8cb5b57896c841/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f35613966303965632d643061382d343362372d383236652d376433306135626233393439/) 珍しい改悪として、pin の印字が pin 側に付くようになり、 ブレッドボードに挿した状態では全く読めなくなっている。 そのため、こういう pin assign マップが必須になる。 ![Arduino Nano Every の pin assign](https://camo.elchika.com/13209ac46a73a00c48a5b56c239bf52ba8ab0117/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f33393162633065632d303836322d343763642d386135312d646438633064623836333964/) ## 100V Solid State Relay 100V を耐えうるリレーの中では安価で大容量である。 その上、外観がコンパクトに閉じていて、物理的堅牢性も良さそう。 端子がシンプルにネジ止めなため、配線も容易な類に入る。 スペック的に Arduino の I/O pin から直接駆動できそうだが、実際は動かない。 - cf : 12mA を超えていれば導通状態になる。 http://akizukidenshi.com/download/ds/fotek/fotek_ssr.pdf / P5 本体の目立つ位置に赤いLEDがあり、導通時に点灯指示する。 開発時は備え付けのLチカで動作確認できるため、非常に便利。(←本題) 【大容量ソリッドステートリレー(SSR)24V~380VAC 40A SSR-40DA】 秋月電子通商: 1000円 http://akizukidenshi.com/catalog/g/gI-08620/ ![ソリッドステートリレー SSR-40DA](https://camo.elchika.com/9e8cf9d66ca909f8a40f44023103d402065ca2f5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f63353132303631342d383833662d343732362d623962622d633832633863333837663233/) # 設計 Arduino の制御信号をトランジスタで増幅してリレーを駆動する。 トランジスタによるスイッチング回路は、プチモンテさんの記事が詳しい。 - ref: https://www.petitmonte.com/robot/howto_transistor_npn.html ## ハードウェア ![回路図](https://camo.elchika.com/9659955aec39af60ac2aa669ade63939cab022a4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f35643431623237642d353332332d346164362d613338342d646534386532343234663366/) ```:ハードウェア疑似コード 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 である。 - ref: http://akizukidenshi.com/download/2sc1815-gr.pdf ベース電流、コレクタ電流、増幅率の関係と、 $$ I_{\mathrm{B}} = I_{\mathrm{C}} \div h_{\mathrm{EF}} $$ ベース抵抗、コレクタ電圧、ベース・エミッタ間電圧降下、ベース電流の関係から、 $$ R_{\mathrm{B}} = \frac{V_{\mathrm{CC}} - V_{\mathrm{BE}}} {I_{\mathrm{B}}} $$ ベース電流の式を導ける。 $$ R_{\mathrm{B}} = h_{\mathrm{EF}} \frac{V_{\mathrm{CC}} - V_{\mathrm{BE}}} {I_{\mathrm{C}}} $$ クラスが BL であるため、hEF は 350~700 である。区間 350::700 として代入すると、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: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 できるようにした。 ```Python: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 を使う場合は以下の通りになる。 ```cmd:実行コマンド python AcSwitch.py COM6 on python AcSwitch.py COM6 off ``` # 実装 ## コンセント分解 裏にある回路図の通りだが、とりあえず分解して確認したくなるものである。 プラグに繋がるのが両端の端子で、右2つがケーブルの先にあるスイッチに接続されている。 スイッチの On/Off で回路の遮断を直に制御している。 ![キャプションを入力できます](https://camo.elchika.com/a0f6dd2d3f06ab4bab9e4f87e47434c8edf1fd5c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f35393463303665312d653439652d346337312d393665332d656537633063643234313266/) ## 半田付け 制作の途中からどうしても Arduino Nano Every の pin の間に入れたくなったため、 もはや基盤の存在意義を疑うほどの空中配線になってしまった。 裏面は Arduino の裏面くっつけて空間を稼ぐため、平に仕上げている。 ![半田付け途中](https://camo.elchika.com/f8e71a893551e2bdc0dcf03a4e19dfeda629e25c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f64316232333632342d333562662d343463332d393330302d346232623164613332613338/) ![完成形(表面)](https://camo.elchika.com/72d5d4e08c5aa8ca49c5e583e0069f626c6f6b27/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f65396433643462302d613936302d346239642d626639322d616135613332666334363735/) ![完成形(裏面)](https://camo.elchika.com/543904a38e6a1273e0ee3168e67f194bdeb8cca6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f36313836363934392d333337622d346562362d613239342d303635633339303462336139/) arduino への接続は、ジャンパピンを使った。 いつでも脱着できるため、arduino の再利用が容易にできる。 ![キャプションを入力できます](https://camo.elchika.com/7133034c38fb560860939223bacb851bdccbf5ab/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f30633661623233312d653337332d346266392d383037662d373061626334636364313964/) ## コンセントとケーブル 最後にケーブルを繋げば完成。 まごの手フットスイッチの端子も圧着式のため、難なく付けられる。 ![完成形](https://camo.elchika.com/24f2e49de1cba1a4a0119f0e8474dcaf7fafecb1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39343964333833652d636636332d346331662d393237662d3635353166313333613762352f66666261316331362d636630622d343039362d623765332d343266353431373933313135/) # 試用 PC に積んげて、Lチカしてみた。 もとい、100V では危険なので、とりあえず外した状態でテストしてみた。 導通の確認は、SSR に付いてる赤い LED の目視とした。 `python AcSwitch.py COM10 on` と打てば導通、 `python AcSwitch.py COM6 off` と打てば遮断しているのが確認できる。 @[youtube](https://www.youtube.com/watch?v=RvTMgnw-Oc0) # 付録 ## 失敗事例 : LED照明には使えなかった これは WH2711KWP の公式ページに上がっている情報ではあるが、 「OFF時でも照明がぼんやり点灯(または点滅)することがあります。」とのこと。 panasonic: https://panasonic.jp/tap/p-db/WH2711KWP.html ダメ元でも実際に試したら点滅する現象に遭遇した。 これは説明の通り、交流の遮断が完全ではなく、僅かな漏れが発生しているに思える。 ただ、今家にコンセントを入れるだけで動き出す家電が殆どなく、 デスクライトが使えないと、扇風機やポットになるが、出すのが非常に手間がかかる。 その結果、SSR自体の信頼性は十分にあるので、Lチカでの導通テストとなった。 # ────────