Mana Blog Next

自宅IoT、仕事と家庭、カメラ、筋トレ生活

【ラズパイ+SORACOM Air】で自宅PCのリモート電源スイッチを作ってみた

本エントリーはSoftware Design 誌 巻頭特集記念リレーブログ【5月9日分】になります。

blog.soracom.jp

目次

GWに家族でチャレンジしてみた電子工作

こんにちは、平 愛美mana_catです。
最近の出来事としては、4才の息子が「アキバのせんごくに行きたい」と話すようになりました。電子パーツのお店を巡るのが好きなようで、小さな部品を見て目をキラキラさせております。両親の影響を受けて成長しているんだなと感じております。

今回は、ゴールデンウィーク中に自宅IoTを充実させるべく、みんなの大好きなラズパイとSORACOM Airを使ってリモート電源制御の仕組みを作ってみました。
以前紹介したIoTクリスマスツリーと同様に、家族で楽しみながら作ってみましたよ。

きっかけは失敗から

このブログを読んでいる読者の中でも、外出先から自宅PCにSSHでログインする人が少なからずいらっしゃると思います。その際、接続先の自宅マシンを誤ってシャットダウンしてしまい、「ぎゃーー!」と悲鳴を上げた方はいらっしゃるはずです(多分)。そうして帰宅するまで操作できずに悶々と過ごしてしまう、なんてことありましたよね。
我が家では実家帰省中にやらかしてしまい、32コアのPCをリモートで再起動できずに電気代が飛行機代ぐらいになってしまった超痛い経験があります。今年も実家に帰省するので、電気代を無駄にしないよう今のうちに対策を練っておくことにしました。

「IPMI」と「Wake On LAN」

自宅のパソコンにIPMIが搭載されたマザーボードを採用すれば解決するのは分かっていいるものの、マザーボードの価格も高価で、一般家庭では気軽に買える代物ではありませんし、買えたとしても選択肢も多くはありません。よって、IPMIは一般家庭には敷居が高いです。
なお、似たような仕組みとして、Wake On LAN(WOL)というのもあるようですが、電源の状態も確認したいニーズには応えられません。。

リモート電源制御の作り方

それでは、お待ちかねの手順を紹介します。 今回は引き出しに眠っているRaspberry Pi Model Bを使ってリモート電源制御の仕組みを作っていきます!
インターネットとの通信にSORACOM Airを利用しますのでパソコン側はインターネットにつながっていなくてもOKです。

用意するもの

  • Raspberry Pi Model B
  • ユニバーサル基板 TNF 25-35
  • OMRON G5V-1 3 (2個)
  • 三極レギュレーター XC6202P332TH
  • ダイオード (3個)
  • 0.1μF セラミックコンデンサ(2個)
  • ピンヘッダー(2.54mmピッチ) x 12ピン分
  • 2ピンのメスーメスのケーブル x 3セット
  • SORACOM Air
  • USBドングル L-02C

※ラズパイのモデルはZero,ラズパイ2,そして最近発売されたラズパイ3でも構いませんが、差し込むGPIOのピンの場所が変わりますのでプログラム側で少し修正が必要です。

接続場所

マザーボードの電源スイッチ、リセットスイッチを取り付けるピンヘッダー部分に、今回作る基板を接続します。

電源スイッチ回路の作り方

仕組みは簡単で、Raspberry PiのGPIOから小型リレーを制御し、プログラマブルな電源スイッチを作ります。
Raspberry PiのGPIOは3.3Vなので、小型リレーも3V付近で動作するものを選びましょう。

f:id:mana-cat:20160508224313j:plain

今回はOMRONの「G5V-1 3V」というパーツを用意しました。
この小型リレーを使うことで制御ピンに3Vの電圧がかかった時に、小型リレー内部のコイルが動作し、回路がショートし電流が流れます。

つまり、2つのGPIOピンを別々の小型リレーに繋いで、それぞれにプログラムから1秒程度ON/OFFすることで3Vの電圧がかかって回路がショートすることで疑似的に電源スイッチが押されたように認識されます。 この時にON/OFFにするまでの間隔を1秒程度にすると電源ON、5秒程度にすると電源長押しになります。
パソコン側のOSがシャットダウン時にハングアップした場合など、電源長押しができた方がよい場合もあるでしょう。 リセットスイッチも2個目の小型リレーを使って同じ仕組みで回路を作ります。

f:id:mana-cat:20160508224636j:plain

そうして、電源状態を確認するために電源LEDを監視します。電源LEDはマザーボードによって3.3Vや5Vの電圧がかかる場合もあるようなので、直接GPIOピンに接続せず、前段に3極レギュレーターを入れて3.3Vに降圧してから使っています。ちなみに自宅のパソコンは電源LEDに3.3Vが流れていました。 また、ダイオードは極性を±逆に差し込んだ場合の対策として入れてあります。

f:id:mana-cat:20160508224408j:plain

上の写真は完成した電源スイッチとリセットスイッチです。

f:id:mana-cat:20160508225234j:plain

裏面はこんな感じ。10pinのピンソケットがついています。
これがラズパイのGPIO部分に差し込まれます。

f:id:mana-cat:20160509214712p:plain

Fritzingで書いた回路図が上の図となります。
※ご指摘があったリレーに対する還流ダイオードを回路図に加えました。

f:id:mana-cat:20160508224636j:plain

プログラムからGPIOのピンをINPUTモードに切り替えて、電源ON時に値を取得して1が返ってくると成功です!電源OFF時には0が返ってきます。

f:id:mana-cat:20160508225410j:plain

上の写真のようにUSBドングルでSORACOM Airに繋がっている状態でPCに接続をし、最終テストを実施します。
あと、ご参考までに SORACOM Airで遊べるようにMQTT 経由で電源ON/OFFできるプログラムを夫が作りました。

その他

大変だったこと。電源スイッチによく使われる2ピンのメスーメスのケーブルがなかなか売っていなくて、電源LEDの詰め合わせ3個セット(50cm)のLED部分を切り落としてハウジングして2ピン化しました。

追記 (5/9 12:00)

読者の方からアドバイスを頂きました。
ラズパイから直接リレー操作するのはGPIOが影響を受ける危険性があるので、トランジスタとダイオードを使用した方が良いかと思われます。
また、電源LED確認用にレギュレータを使う点についても、マザーボード本体への負荷が大きくなるので抵抗で分圧する、フォトカプラを使う方法が安全という御意見をいただきました。
こちらは確認ができ次第エントリーを修正致します。→ご指摘があったリレーに対する還流ダイオードを回路図に加えました。ご連絡ありがとうございました。