2015年4月20日月曜日

Raspberry pi2でモバイルバッテリをUPS的に使用する

Windows 10が動くと話題のRaspberry pi2を購入しました。

小型、低消費電力、外部機器のコントロールが出来る、ということでバッテリー駆動に挑戦してみることにしました。

単なるバッテリー駆動ではつまらないので、モバイルバッテリーをUPS的に使えないものかと色々やってみたのですが、モバイルバッテリーとの相性や、そのままでは1日前後稼働するとバッテリーを使い果たして落ちてしまうなど、簡単にはUPSとしては使えないようでした。

何が問題なのか整理してみると、

1) バッテリーによってはRaspberry pi2に給電しながら充電できないものがある。
2) バッテリーが充電完了とみなすと、電源を再接続するまで充電が停止する。

1)については充電しながら給電できるものを選ぶか、自分で切替回路を作って対応しなければなりません。切替回路を作るのはそれこそUPSの心臓部を作るのと同じなので、かなり手間がかかりそうです。

2)は、比較的簡単な回路(たまにバッテリーの充電側の電源を数秒間停止する回路)を作ればいいのでちょっとした電子工作で何とかなりそうです。

googleさんに聞いてみると、

WOL(Wake On LAN)非対応のNUCにリモートから電源を入れる
リモートでPCの電源スイッチ操作(ejectじゃなくてRaspberry Piでな

のような、リレーキットを使えば簡単にできそうだ(キットも安いし)ということになりました。
回路図(回路図の作成にはfritzingを使用しました)を次に示します。

LK-RB1を使った回路

この回路をRPi2につないでみると、

RPi2の電源が落ちました

なぬ?なぜ落ちる?
RPi2から外して動作を確認するも、おかしなところはないし、なぜだーーー?

結局、回路図で [この接続がやばい!!] となっている部分の、充電側のGNDとRPi2のGNDに電位差が有り、これをつないでしまうと、電位差によって異常な電流が流れ、保護回路が働いて、RPi2が落ちてしまうようでした。

この接続を切って、再度RPi2につないで、次のようなShell Scriptで数秒間(この場合は10秒間)充電側の電源を切ることができるようになりました(しかしこの回路、自分で電源を切るおもちゃと同じような動作なんだよね)。

#!/bin/sh

GPIO_USB=17
B_TIME="10"

# 初期化
echo $GPIO_USB > /sys/class/gpio/export
echo low > /sys/class/gpio/gpio${GPIO_USB}/direction
# リレーON
echo 1 > /sys/class/gpio/gpio${GPIO_USB}/value
# SLEEP
sleep $B_TIME
# リレーOFF
echo 0 > /sys/class/gpio/gpio${GPIO_USB}/value
# 後始末
echo $GPIO_USB > /sys/class/gpio/unexport
exit 0

しかーし、動いてはいるものの、Q1のエミッタとRPi2のGNDをつないで良いものかどうかというと、これはたまたま動いているだけで、非常にまずい回路であると思われます。バッテリーや充電器が異なればRPi2が壊れてもおかしくない回路だよなあ。

ということで、フォトカプラなどでアイソレーションしないと非常にまずい、ということでLK-RB1のような安価なリレーボードがないかと探してみるもののこれが無い。有りそうで、ない。

ならば、自分で作るしか無いであろうということで考えたのが次の回路。

フォトカプラを使った回路

メカリレーも使っているのは、フォトカプラのみでは5VのON/OFFに使うには電圧降下が大きすぎ、充電が不可能であろうということで、フォトカプラを介してメカリレーを駆動する形にしてある。

まだ作っていないので、まともに動くかどうかはまだわからないものの、まあこんな回路を追加すればモバイルバッテリをUPS的に使うことができそうだ、というお話でした。

ちなみに、現在使っているバッテリは、


です。計算上はこれで20時間程度悪くても12時間はバッテリーで駆動できるはず。

--- 追記 2015/04/23 ---


実際に回路を作って、上記回路で問題なく動作することを確認した。

実際の回路

これだけでは、なになので、次図のように停電検出回路を追加し、停電時にバッテリーが空になる前にシャットダウンできるようにする予定。

停電検出回路を追加したもの

--- 追記 2016/02/26 ---

この状態で長期運用を行っていたところ、それでも「電源が落ちることがある」ことが判明しました。
原因は推測になりますが、このモバイルバッテリーは長時間充電し続けると「トリクル充電モード」になり、それでも充電を続けると過充電保護が働いて充電及び給電が停止するのではないかと思われます。

どう対策するかですが、

1) 何らかの検出回路(充電インジケータの監視)を作って過充電を防止する
2) できるだけ満充電にならないように充電OFF時間を延長する

といったところでしょうか?
とりあえず現在は、2)の時間延長(私の構成では10分程度)することで対処しています。

最近は、Raspberry pi用のUPSも売られているようなので、UPSとしてなら専用のものを使用する方が良いかもしれません(USBハブまで給電するようなことはできませんが)。

0 件のコメント:

コメントを投稿