はじめに
2016年12月、Raspberry Pi2に「Pi Supply Switch」という電源スイッチを接続しました。
Raspberry Piには、電源スイッチがありません。シャットダウンしてHALT状態になっても電源はOFFになりません。USBアダプタの電源で使用しているときは、電源がOFFにならなくてもあまり気になりませんでした。シャットダウンして停止状態になり、SDアクセスをしていないことを緑色LEDで確認して、USB電源を手動でOFFにすれば良いだけでした。しかし、バッテリ駆動することを考えると、停止状態で電源供給を止めないとバッテリを消耗してしまいます。
ネットで検索していると「Pi Supply Switch – On/Off Power Switch for Raspberry Pi」という海外製の電源供給を制御するスイッチのキットを発見しました。
国内で販売しているところを探しました。2016年12月現在「ロボショップ株式会社」というところで扱っていました。価格は3,019円と高くはなかったので、ここで購入しました。
Pi Supply Switch キット
Pi Supply Switch 概要
Pi Supply Switchは、Raspberry Piの電源供給を制御するインテリジェントなパワースイッチです。基板の上には3つのボタン・スイッチがあります。
- パワーON スイッチ : 電源を供給して、OSを起動します
- ソフトパワーOFF スイッチ : OSを自動シャットダウン後、電源供給をオフします
- 強制パワーOFF スイッチ : 非常時用で無条件に電源供給をオフします
右側のマイクロUSB端子(Power IN)から電源を入力して、左側のUSB端子(Power OUT)に電源を供給します。左側のPi 電源制御「7 8」端子は、Raspberry PiのGPIOピンに接続して電源制御を行います。
キットなので、基板と部品一式がそろっています。
組み立て説明書や部品表が添付されていませんでした。基板上に R1,R2とか記載されているのですが、どの抵抗を接続すれば良いのかまったくわかりません。
英語で書かれた「Pi Supply Switch」のウェブサイトをよく読んでみると、2つのリンクがありました。
- Assembly guide : 組み立てガイド
- Code examples : コード・サンプル
組み立てガイド
Assembly guide (Pi Supply Switch v1.1 Assembly Instructions) に部品の説明が掲載されていました。
記号 | 部品 |
---|---|
R1 ,R2 | 抵抗 22KΩ |
R3 ,R4 | 抵抗 10KΩ |
R5 ,R6 | 抵抗 1KΩ |
D1 ,D2 | ダイオード 1N4001 |
Q1 ,Q2 | トランジスタ BC548 |
D3 | 赤色LED 635nm 3v |
C1 | コンデンサ 220μF |
RL1 | リレー G5V-1 5DC |
SW | 3×6mm タクトスイッチ (3個) |
PIN | 2 Pin ヘッダー |
部品一覧がわかったので、キットに添付されている抵抗部品との対応付けを行います。
抵抗が何オームであるか調べるために、抵抗に印刷されているカラーコードを久しぶりに読みました。高校生のときに電子回路の勉強でカラーコード表を覚えましたが、何十年も使用していなかったので一部のカラーコードを忘れていましたのでカラーコード表を参照しました。
必要な部品は、すべてそろっていることを確認しました。
電源制御「7 , 8」端子の接続について記載がありました。
For connecting the two pin header to the Pi, they are labelled 7 and 8. Pin 8 has to go to pin 8 on the GPIO header on the Pi. Pin 7 can go to any other Pi GPIO port, but since 7 is next to 8 we thought that would be easier.
【要約】
Raspberry Piとは、2つのピンで接続します。ピン8は、GPIOポートの8番ピンに接続する必要があります。ピン7は、他のGPIOポートに接続できますが8番は7番の隣になるので簡単に接続できます。
コード・サンプル
Code examples(Pi Supply Switch v1.1 Code Examples)にPythonのスクリプトのサンプルコードが掲載されていました。
割り込みの例(Interrupts)と、無限ループの例(While loop)が掲載されています。
内容的には、私が書いた「Raspberry Piにシャットダウン・スイッチを接続」でやっていることと同じでした。
In the above example we have used physical pin 7 on the GPIO header, which as you can see corresponds to the 4th pin from the right, on the top row (when looking down on the Pi from above, with the RCA video connector socket facing towards you). You can change this to use any different GPIO pin, we just chose pin 7 as it is next to physical pin 8 which is the required pin to use for the automatic power supply switching without any additional code.
It is additionally possible to add some code to the above to change to a pin other than physical pin 8 for the main automatic power off functionality…more on this soon.
【要約】
このサンプルコードでは、シャットダウンスイッチにGPIOポートの物理ピン7番を使用しています。7番ピンは、物理ピン8番の隣にあるので選択しただけです。物理ピン8番は、追加のコードなして自動電源切り替えに必要なピンです。コードを追加することにより、自動電源オフ機能を物理ピン8番以外のピンに変更することができます。
この説明の中で、なぜ物理ピン8番が自動電源切り替えになっているのだろうか疑問に思いました。
physical pin 8 which is the required pin to use for the automatic power supply switching without any additional code.
GPIOコネクタの物理ピン8番は、GPIO14ポートでUART TXDと定義されています。なぜ、UARTなのだろう?何か間違っていないだろうか?
Pi Supply Switchの仕組み
回路の概要
どんな仕組みで、このインテリジェントなパワースイッチが動作するのだろうか?やっぱり技術者なんですね。気になります!
リレー(RL1)は、OMRON G5V-1という部品だったのでオムロンのデータシートをみて仕様を確認しました。データシートから引用します。
6個のピンがあります。2番ピンと9番ピンがコイルに接続しており、入力信号を加えることによりスイッチが開閉します。
- 入力信号が無 : 5-6番ピンと1番ピンが接続
- 入力信号が有 : 5-6番ピンと10番ピンが接続
このリレーにより、電源スイッチをON-OFFしているらしいことが想像できます。
回路図が添付されていなかったので、テスターを使用して基板の部品装着点について導通テストを行い回路図にしました。
パワーON スイッチ
電源を供給して、Raspberry Piを起動するスイッチです。
リレーがOFFなので5番→1番に接続し、R1-C1でコンデンサーが充電されます。コンデンサーが充電されているので抵抗R3に電圧がかかります。パワーONスイッチを入れると、トランジスタがオン状態となりコレクタ→エミッタに電流が流れ、リレーの2番ピンと9番ピンに入力信号が加わり、リレーがONになります。リレーがONなので5番→10番に接続して、右側の電源入力(PowerIN)が左側の電源供給(Pi Vcc)に出力され、Raspberry Piを起動します。
リレーが切り替わったので、コンデンサーが放電を開始します。RC時定数の時間が経過すると、抵抗R3の電圧が下がり、トランジスタはオフ状態になり、リレーがOFFになり電源供給が途絶えてしまいます。そうならないようにするには、コンデンサーが放電する前に8番ピンをハイレベルにします。8番ピンがハイレベルであれば、リレーはONのままです。
ソフトパワーOFF スイッチ
OSを自動シャットダウン後に電源供給をオフにするスイッチです。
8番ピンがハイレベルになっている前提で説明を続けます。
7番ピンは、ローレベルになっています。ソフトパワーOFFスイッチを入れたとき、7番ピンはローレベルからハイレベルに立ち上がります。ソフトウェアで、GPIOの物理7番ピンの立ち上がりを監視して、シャットダウンコマンドを実行してHALT状態にします。
物理8番ピンをローレベルにすると、コンデンサーの放電が開始され、RC時定数の時間の経過後に、トランジスタがオフ状態となり、リレーの2番ピンと9番ピンに入力信号が無くなり、リレーがOFFになります。リレーがOFFなので5番→1番に接続して電源供給がオフになります。
Raspberry PiがHALT状態になったとき、GPIOは出力しなくなるので、物理8番ピンは自動的にローレベルになりそうです。
強制パワーOFF スイッチ
非常時用で無条件に電源供給をオフにするスイッチです。
強制パワーOFFスイッチを入れると、抵抗R3の電圧が低下してトランジスタはオフ状態になり、リレーの2番ピンと9番ピンに入力信号が無くなり、リレーがOFFになります。リレーがOFFなので5番→1番が接続して電源供給が止まります。
Pi Supply Switchのキット組み立て
ウェブサイトに掲載されているキットを組み上げた写真と部品表を参考にしながら、はんだ付けをして組み立てました。基板サイズは45mm×30mmと小さく、部品の間がとても狭いです。老眼の目では、はんだ付け箇所のホールと隣のホールが重なってぼやけてしまい、はんだ付けするのはとっても厳しかったです。なんとか、キットの組み立てが完了しました。
電源制御の調査
GPIOの物理8番ピンの謎
キットが完成したので、早々に接続テストしたいところですが、まだ謎は解けていません。
私の理解では、Raspberry Piの起動シーケンスでGPIOの物理8番ピンをハイレベルにしないと、数分で電源供給が途絶え、OSが落ちることになります。SDカードを破損する可能性がありますので、完全に理解できるまで接続テストするのは危険です。
GPIOの物理8番ピンにLEDを接続して、Raspberry Piの電源を投入したときにハイレベルになるのか確認しました。電源を投入してしばらくして一瞬LEDが点灯しました。しかし、すぐに消灯してしまいました。GPIOの物理8番ピンは、ローレベルということです。
パソコン通信からヒント
GPIOポートの物理ピン8番は、GPIO14ポートでUART TXDとして使用できることが解決の糸口かもしれないと考え、UART通信について記憶をたどりました。
昔のパソコン通信の時代は、パソコンのUARTをモデムに接続して、デジタル情報を音に変換して電話回線を使用して通信していました。私の始めた初期のころは、300bpsでした。時代と共にモデムは進化して56Kbpsの速さまでになりました。
UART通信は、調歩同期式と呼ぶ通信方式で1ビットごとに通信します。モデムの音を何回か聞いたことがあります。最初は、「ピポパポピポパ・・・」でDTMF信号でダイヤルして、その後に「ピー ・・・ピーヒョロロロ」という音が聞こえていました。
もしかしたら、この最初の「ピー」という音はハイレベルの音なのではないだろうか?
調歩同期方式の送信(TXD)について調べてみました。最初にハイレベルの信号を出力して、1バイトの情報を転送するために、ローレベルのスタートビットを出力後に、8個分のビットデータをハイ/ローで出力し、続いてハイレベルのストップビットを出力します。
UARTのTXDの初期値は、ハイレベルなんです。
シリアルの有効化
もしかしてと思って「raspi-config」を調べると、シリアルの有効化がありました。シリアルを有効化することにより、UARTとして使用できるわけです。
sudo raspi-config
「7 Advanced Options」→「A8 Serial」→「はい」→「了解」で、シリアルを有効化して終了します。設定後、リブートします。
GPIOの物理8番ピンの謎が解けた
シリアルを有効化したので、GPIOの物理8番ピンにLEDを接続してテストしました。
Raspberry Piの電源を投入すると、LEDは点灯した状態になりました。GPIOの物理8番ピン(UART TXD)は、ハイレベルになりました。
謎が解けました。GPIO物理ピン8番は、電源投入で自動的にハイレベルになるので、自動電源切り替えになっているわけです。シャットダウンすると、LEDは消灯してGPIO物理ピン8番はローレベルになります。
接続テスト
いよいよ、接続テストです。
USBアダプタの電源をPi Supply Switchに入力して、Power OUTをRaspberry Piの電源に接続します。
Pi Supply Switchの電源制御の信号線8番をGPIO物理ピン8番に接続します。信号線7番は、GPIO26ポートに接続しました。私の作ったシャットダウン用のPythonスクリプトは、GPIO26ポートからのスイッチ入力になっています。
まず、パワーONスイッチを入れます。Pi Supply Switchの赤LEDが点灯してRaspberry Piが起動しました。
次に、ソフトパワーOFFスイッチを入れます。シャットダウンが始まりました。Pi Supply Switchの赤LEDが消灯しました。GPIO物理ピン8番が、ローレベルになったということです。Raspberry Piの赤いPWR LEDを確認すると、点灯したままなので電源は供給されています。約3分程度待つと、Raspberry Piの赤いPWR LEDが消灯し、電源供給がオフになりました。少し、時定数が長いようにも思いますが、一応目的は達成できました。
最後に
Pi Supply Switchで、インテリジェントな電源制御ができる素晴らしいボードです。今後は、モバイルバッテリを接続して電源のない場所でも使用できるように組み込んでいきたいと思います。
ピンバック: Raspberry Piにオーディオ・アンプを接続 | ある計算機屋さんの手帳
ピンバック: Raspberry Pi をPiDesktopでSSDベースPCにした | ある計算機屋さんの手帳