2016年2月8日月曜日

USBハブ(その2)

USBハブを5V駆動で使っていましたが、ACアダプタをぶった切って使っているので、不格好だったり接触不良などのトラブルもありえるよなあと思っていたら、こんなものを見つけてしまい、早速購入してしまいました。

どこが違うかというと、そう「MicroUSBコネクタから給電できる」ようになっているので、よりスマートになりました。

2015年4月20日月曜日

Raspberry pi2の冷却

私は、Raspberry pi2に無線LANドングル(アンテナのほうが目立つのでドングルには見えませんが)を接続して使用しています。

無線LANドングルを使うと消費電力の増大のみならず、その分の発熱も増大します。比較的低発熱の、


でさえ、結構暑くなります。
そこで、なんとか冷却することを考えなくてはならないのですが、小口径ファンを普通に使うとかなりうるさいことになるので、躊躇していました。

そこで、USBコネクタ部分やIFチップにヒートシンクをつけていたのですが、小さなヒートシンクでは気休め程度にしかならず、やはりファンを付けることにしました。

5Vファンをつけてみたのですが、やはりうるさいです。小口径なので余計にうるさく感じます。
そこで、12Vファンに交換してみると、ほとんど無音で冷却できるようになりました。

もちろん、12Vファンなので5Vで動かした場合、風量は格段に少なくなりますし、ファンによっては電源投入時の起動に失敗したりしますが、それでもそこそこの冷却能力は発揮しているようです。

左側に立てておいてあるのが冷却ファン

これから夏にかけて、どうなるかはわかりませんが、muninでとったCPU温度を見ると、


CPU温度
室温

と、室温+18℃程度に収まっていますので、仮に室温が35℃になったとしても、60℃以下にはなりそうです。

--- 追記 2015/05/06 ---


12Vファンを5Vで回すと、やはり時々回らない時があり、あまりよろしくないということで、5Vファンに交換したところ、2、3時間するとRPi2が落ちている!

原因は推定だけれど、ファンのノイズで落ちている可能性が高いので、ファンの電源ラインに470μF(ちょっと大きすぎるかな)の電解コンデンサと0.1μFのセラミックコンデンサを接続し、逆流防止のダイオードも追加した。ついでに30Ω程度の抵抗をシリーズで入れてファンの回転数も落とした。本当はレギュレータでも入れて電圧を落とすべきだけどそこまでコストは掛けられない(^^;)。

ノイズとは言ったものの、ノイズそのものでRPi2が落ちているわけではなく、推定だけれども、逆電流のスパイクで、電源を供給している、モバイルバッテリーの電源電圧が閾値以下になり、ショート状態とみなされ、モバイルバッテリーが電源供給を停止しているんじゃないかと思われる。

#さすがにこの程度の工作ではオシロスコープまでは買えないなぁ
#オシロがあればどの程度改善しているかわかるんだけど...

USBハブの5V駆動

Raspberry pi2はUSBポートが4ポートに増えて、USB機器が繋ぎやすくなったと思うのですが、それでも足りない、という方も居るのではないかと思います。

私の場合、
  • Bluetoothドングル
  • 無線LANドングル
  • USB温度計
  • USB-HDD
  • USB冷却ファン
と、既に5つのUSBデバイスを接続していますので、USBハブなしではどうにもなりません。それにUSB-HDDは消費電力が大きいので、RPi2のポートの供給能力では電力不足になりかねません。

そこで、余っていた、


をつないで使っていたのですが、ふとACアダプタの電圧を見ると、5Vを供給しているじゃありませんか。それに、UPS的に使っていた(Raspberry pi2でモバイルバッテリをUPS的に使用する)モバイルバッテリには、電源供給ポートが2つあります。

これはもう、USBハブもモバイルバッテリ経由で動かすしか無いじゃありませんか。こうすれば、USB-HDDもハブから電源をとれるし、接続した機器全部をバッテリーで駆動できるようになります。

ということで、余っていたUSBケーブルとACアダプタのケーブルを切断して給電ケーブルを作り、これでハブに給電しているのが下図です。

ケーブルごちゃごちゃはご愛嬌^^;

接続部分は見えませんが、ハブの電源は茶色のダンボーくんから給電しています。
4ポートハブなので、3ポート分しか増えませんが、それでもかなり自由度は上がりました。

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ハブまで給電するようなことはできませんが)。