コンセント(AC100V)をラズパイで制御できるようになれば、電子工作の幅はぐっと広がり、より実用的なものが作れるようになるでしょう。ここでは、最も簡単にラズパイでコンセントを制御する方法をご紹介します。
システム構成
システム構成は以下の通りです。AC100Vの開閉にはSSR(ソリッド・ステート・リレー)を使うことにしました。SSRは交流を開閉できる半導体リレーであり、入力側は小型のLEDを点灯できる程度の電流を入力してやればONできるため、ラズパイのGPIOピンから直結で制御することができます。今回は間ラズパイの信号によりAC100Vが負荷側に出力されていることを確認するため、AC100V検出回路も作ってみました。(詳細は後述します)
負荷はAC100Vを使う製品であれば何でもよいですが、分かりやすいようにランプにしています。
※制御画面では将来拡張用として3チャンネル分のUIを用意していますが、使用するのはch1のみです。
ブラウザのGUI上でスイッチをONすると、負荷として接続したランプが点灯します。(SSRの入力LEDとAC100V検出回路のLEDも点灯しています)
SSR(ソリッド・ステート・リレー)のメリット・デメリット
通常のメカニカルリレーと同様に一次側と二次側は絶縁されていますが、一次側コイルの駆動回路が必要なく、簡単に制御することができます。また無接点(機械接点がない)ため動作音がなく長寿命です。
一方、半導体接点ということはスイッチング素子のON抵抗(もしくはドロップ電圧)が無視できないレベルで存在しており、大電力になるほど放熱に気を遣う必要がある点には注意が必要です。
SSR(ソリッド・ステート・リレー)
SSRはtwidec社製のTC48D40(メーカ型番:SSR-40DA)を使用しました。ラズパイのGPIO標準電源電圧であるDC5V入力できること、Amazonで安価に入手できることが採用理由です。(信頼性を求めるのであればオムロンなど大手FAメーカ製が望ましいですが、なにぶん高いです・・・)
SSRには電圧ドロップという損失が存在します。(怪しい外国製のため?)詳細仕様は見つけることができませんでしたので、正確な値は分かりませんが、このタイプのSSRの場合、1.2~1.8V程度のドロップ電圧が一般的です。ON状態で実測したところ、1.5V前後でしたので特殊な構造ではないようでした。
発熱対策について
システム構成図で使用している小型ランプ程度の負荷であれば放熱対策は不要ですが、10A,20Aと大電流になるとこの損失は無視できなくなります。例えばドロップ電圧1.6VのSSRで1000Wのドライヤーを開閉するケースを想定してみます。
1000Wで実効電圧100Vなので、電流は1000W÷100V=10Aです。1.6Vに対して10A流れるので、熱損失は16Wとなります。これは一般用はんだごてレベルの発熱量であり、放熱対策なしではすぐにSSRが熱破壊してしまうでしょう。
このように、SSRは周辺回路が不要でとても簡単に使えますが、負荷に応じた放熱対策を取る必要があります。
AC100V検出回路
AC100Vを検出するためには、高圧の交流からマイコンが受け取れるDC5Vレベルに整流・平滑する必要があります。交流の信号を伝達する素子として、LEDが双方向に接続されているAC入力対応フォトカプラがありますが、手元にありませんでしたので一般用途向けのフォトカプラを2個使いして実現します。
回路動作説明
一次側(入力部)
フォトカプラで整流しつつ、AC100V系からDC5V系に信号を伝達します。全波整流した方が後段の平滑が楽なので、2つのフォトカプラの一次側を逆接続する構成としました。これにより、交流入力がある場合はフォトカプラ2次側のトランジスタのいずれかがONし、二次側は概ね0Vの期間を支配的にすることができます。
入力部はAC100Vです。ただしこの値は実効値(直流換算の値)であり、実際の電圧範囲は-141.4V~+141.4Vとなります。フォトカプラの入力部はこの値をもとに計算する必要があります。
フォトカプラTLP627の入力側LEDの順方向電圧は1.2Vのため、電流制限抵抗にかける電圧はVp-pの141.4Vから1.2Vを引いて約140Vです。ここでは決め打ちで100kΩとしましたが、数m~20mAの範囲であれば問題ないので、半分の47kΩ程度でもよいかもしれません。
二次側(出力部)
二次側のトランジスタはコレクタ側を短絡して10kΩでプルアップします。これにより負論理のワイヤードORを構成しています。両方のトランジスタがOFFにならない限り、出力はHIGHになりません。
平滑コンデンサは、AC100V入力がある場合でも短時間のパルスが出てしまうため、これをつぶすために必要です。このパルスは、ある程度の電流が流れないとLEDがONしない=トランジスタがONしないことに由来します。実験したところ、10μF程度でも問題なく平滑できていましたが、ここでは余裕を見てほぼ倍の22μFとしています。
動作確認回路
ラズパイに入力する前に、検出有無を簡単に確認できるよう追加しました。トランジスタでLEDを駆動するシンプルな回路です。負論理のためトランジスタはPNP型の2SA1015としました。この回路はなくても動作します。
制御プログラム(Node-RED)
Raspberry PiにインストールしたNode-REDで制御プログラムとGUIを作りました。追加ノードはGUI用にdashboardのみです。Raspbian上の設定変更は特に必要ありません。
プログラム説明
基本制御
左上のinjectノードは起動時のみ二つのグローバル変数であるCH1_STATEとCH1_SWを0で初期化します。
その下にあるPIN13からの入力を受けてCH1_STATEに保存しますが、AC100V検出回路は負論理(検出状態で0入力)であるため、functionノードで作ったnot回路で反転してから格納します。コードは超シンプルで、以下の通りです。
msg.payload = !msg.payload;
return msg;
制御スイッチからの入力は直接SSRへの出力ピンへ接続していますが、同時にスイッチ状態を格納するグローバル変数CH1_SWに入力するとともに、ON/OFFのどちらなのかを明示するためにGUIに表示を行います。
下段では回路のヘルスチェック(自己診断)制御です。システム動作に不可欠ではありませんが、将来的に実用性を求めることを考慮して追加しています。動作としては、スイッチの状態が切り替わると120ms後にスイッチ入力(CH1_SW)とAC100V検出回路の検出結果(CH1_SW)を比較して同じであればGOOD、異なっていればシステムの異常としてERRORを表示します。
120ms待っているのは、スイッチ動作から実際にAC100Vが出力されるまでの遅延と、AC100Vが出力されてからAC100V検出回路の出力が定常状態になるまでの遅延があるためです。実験したところ50msでは出力が不安定、80msなら安定的に検出できましたので、更に1.5倍の余裕を見て120msとしています。
シャットダウン・リブートボタン
以下はおまけ的な機能ですが、シャットダウンと再起動(リブート)のボタンを用意しました。ボタンを押すと「シャットダウンしますか?」という窓が現れ、OKを押すとシャットダウンが実行されます。(リブートも同様)
Node-RED dashboardには確認用ウィンドウの機能(notificationノード)が標準で用意されています。設定は以下の通り。標準では画面右上にテキストが表示されるだけですが、Layout項目を変更するといくつかの表示パターンが設定できます。今回はOKボタンととキャンセルボタンが必要なので「OK/Cancel Dialog」に設定しました。Default action labelとSecondary action labelに設定したテキストがボタンに表示されるとともに、クリックしたときnotificationノードから出力されるメッセージになります。
シャットダウンと再起動処理そのものはShellScriptで実行しています。任意のディレクトリに置いたexecノードでshファイルを呼び出しています。
shファイルの中身は本当にシャットダウンするコマンドだけです。(再起動はshutdown -h nowがrebootになる)
!/bin/bash
sudo shutdown -h now
まとめ
今回はSSRとRaspberry Piを使ってAC100Vを制御・監視するシステムを作ってみました。VPNなどのネットワーク技術と組み合わせることができれば、自前で自宅のスマートホーム化ができそうですね。
AC100V検出回路はRaspberry Piに限らず、Arduino・ARMなどのマイコンでも使用できる回路ですので、色々応用してみてください。ただしコンセントは電圧が高いので、分圧抵抗や半導体素子の耐圧仕様にはより一層の注意が必要です。
※当ブログの掲載内容で生じた損害に対する一切の責任を負いません。記載の回路・システムを構築される際は各自の責任の元、実施ください。