RAPIRO(ラピロ)をRaspberry Pi 2で安定して動作させる

th_rapiro_another_power_8

前回ラピロの頭脳をRaspberry Pi B+からPi 2へと進化させたのですが、確かに動作は速くなったものの、動作の安定性に欠ける結果になってしまいました。

原因は特定できていませんが、とりあえず供給電力が足りないのかなーと仮定して、その対策を考えることにしました。というのも、GPIOからはアンプ、8x8LEDマトリクス×2、フルカラーLED1つを動作させていて、さらにUSBで赤外線リモコン、Arduino、USBオーディオデバイスを動作させていたので、結構な電力を消費させているなーという自覚があったからです。

ちなみに、この状態ではとてもじゃないですが消費電力の大きい無線LAN子機(ドングル)なんか挿せやしないので、ラピロの無線通信については、これまでPLANEXのちびファイを使っていました。

有線LANを無線LANに変換してくれるコンバータモードを搭載していたので、これを使えばRaspberry Piから直接電力供給をせずに、ラピロの有線LANポートを使って無線通信をすることが可能でした。まー、設定が大変なのと、ちびファイには別途電力を供給しないといけないということと、有線LANとちびファイまでは有線接続しないといけない、という弱点はありましたが、ラピロを安定化させるという観点から見れば、とても便利な代物でした。

最近(2015/7時点)では生産されていないのか、値段が高騰している模様です(後継機はありますが、肝心のコンバータモードが省かれています)。自分が買ったときは2,000円ぐらいで手に入っていました。

ちょっと脱線しましたが、要するに元々電力消費状況が切迫していたところに、消費電力性能に優れたB+から、4コア高速処理(ただし消費電力が高い)のPi 2に置き換わったため、とうとう動作が不安定になるほどに電力が足りなくなってしまったのではないかと考えたのです。

Raspberry Pi自身から供給できる電力に限りがある以上、可能な対応は2つです。できる限り外部機器の利用を減らすか、もしくは、機器を動作させるための別電源を用意するか。

。。。まあ、せっかくここまで作り込んで色々やってきたので、今更いろんな機器の利用を中止する、という選択はとりたくありません。ということで、なんとかラピロの頭の中にRaspberry Pi本体とは別の電源ラインを引っ張ってくることにします。

 

作戦としては、セルフパワーのUSBハブや、充電用ACアダプタから電力線だけを引っ張ってきて、ラピロの頭の中でその電力線から電力を供給するようにします。充電用ACアダプタなら、タブレット用の充電器とかを使えば2Aぐらい引っ張ってこれますが、セルフパワーのUSBハブでも大抵500mAぐらいは引っ張ってこれますので、まずはセルフパワーUSBハブから電力を引っ張るようにします。あくまで電力供給が目的ですので、USBハブはRaspberry PiのUSBには接続しません。

th_rapiro_another_power_1

とりあえず、電子部品屋さんで買ってきたUSBコネクタにソケットを装着。今回は電力線(上記写真の両端)だけを引っ張ってくればよいのですが、将来的に「やっぱり通信線もほしい」となる可能性もありますので、簡単にコードを着脱できるようにしておきました。

th_rapiro_another_power_10

コードを繋ぐとこんな感じです。このUSBコネクタをUSBハブに挿して、延ばしたコードの先っぽをラピロの頭の中に入れてやれば、そこから電力をとれます。問題は、「どうやってコードの先っぽをラピロの頭の中に入れるか」です。

素直に考えるとラピロの頭の後ろの開口部から入れるのが妥当なのですが、何というか、見た目にあんまりカッコよくない気がします。どうせなら、もうちょっとスマートに実現したいです。

自分の場合、ラピロは基本的に(電池ではなく)ACアダプタで動作させているので、常に背中に電源コードは挿しっぱなしです。これについては特に違和感はないので、それじゃあこの近くに新たに電力供給用のコネクタを追加してやれば、比較的綺麗にまとまるのではないかと考えました。

th_rapiro_another_power_3

ということで、ラピロの頭部→首→胴体の中を通してきたコードを、ラピロの背中にある、電源コードを通す穴から引っ張ってきました。ソケットは両面テープで電池ボックスに貼り付けています。赤と黒が電源線で、青と黄色がI2Cの通信線です。I2Cについては、これまでラピロの後頭部の開口部から線を出していましたが、こちらもここにまとめてしまうことにしました。ソケットのピンが後2本残っていますが、こちらは今後拡張したくなったときのために置いています。

th_rapiro_another_power_4

そのままだと背中と電池ボックスの間に、ソケットから伸びているコードがうまくおさまってくれなかったので、電池ボックス側のスペーサー部を一部カットしました。

 

これで、外部からRaspberry Piの周辺機器用の電源を引っ張ることができるようになりました。

th_rapiro_another_power_8

 こんな感じです。そこまで仰々しい形にはならずに済んだかと思います。

 

さて、これでラピロの頭の中のアンプ1個・8x8LEDマトリクス2個は、別電源で動作させることができるようになりました。500mA供給なので、もう一機器ぐらいは余裕で動作させることができそうです。

ということで、冒頭の脱線で話をしていた、無線LAN子機への電力供給もこの外部線から行うようにして、無線LAN子機もラピロの頭に中に突っ込んでやることにします。これで、ラピロの頭から有線LANケーブルがなくなるので、見た目にだいぶスッキルするはず。

th_rapiro_another_power_2

無線LAN子機を頭の中に収めるため、USBオーディオデバイスをラピロの頭に収めるときに作ったUSBの引き出しケーブルをもう一つ作って、その内の電源線だけソケットで着脱可能にしました。これで、通信線はRaspberry Pi 2の(ラピロの後頭部からはアクセスできない方の)USBの口から通信して、電源だけは先ほど追加した外部電源から引っ張ることができます。

このように、電源だけ外部から引っ張っている状態でも無線LAN子機が動作するということは、以下の方が先行して試されていました。

なので、これでいけるだろうと思ってやってみたら、バッチリ、安定して無線通信ができるようになりました。外部電源のGNDと、Raspberry PiのGPIOのGNDを接続しておかないとうまく電源供給できないので、そこだけ注意が必要です。

ちなみに、自分が使っている無線LAN子機(PLANEX-GW-USNANO2)で安定して無線通信させるためには、以下で実行されているソフト設定も必要でした。

無線LAN子機自体のモノは違いますが、使っているチップセットが同じなので、上記と同じように設定できます。省エネモードではなくなりますが、電源は別にとっているので、Raspberry Piの動作に影響することはありません。

ちなみに、無線LANで固定IPを使いたい場合は、以下の設定例が参考になると思います。

 

さて、これでRaspberry Pi 2は無事安定に動作するようになり、兼ねてから邪魔だなあと思っていた有線LANケーブルも取っ払うことができました。わーい。

th_rapiro_another_power_6

ちなみに外部から引っ張ってきた別電源は、こんな感じでブレッドボードのサイドの部分(電源引く用になっているところ)を持ってきて、それに接続し、そのすぐ後でコンデンサをかまして、気持ち安定化させたつもりでいます(コンデンサのことはよくわからないので。。。)。

th_rapiro_another_power_5

これは動作確認のため、両目の8x8LEDマトリクス2個、スピーカーのアンプ、無線LAN子機、おまけにDC冷却ファンまで回してみた状態です。この状態でもちゃんと動いてくれました。ただ、色々接続した状態だと、アンプに対していろんな雑音が入ってしまうので、アンプだけは分けてRaspberry PiのGPIOから電源を取る、というようにしてもよいかもしれません。

DC冷却ファンは今のところラピロに組み込んではいませんが、今後Raspberry Pi 2の発熱対応に必要になるかも、と思い、ちょっと試してみました。しかし、上記の写真からわかるように、素人が無計画に色々追加していったもんですから、ラピロの頭の中が大変な状態になっています。DC冷却ファンを突っ込むスペースがないわけではないですが、本当に入れるとなったら、ちょっと3Dプリンタか何かで部品を作って整理してやる必要がありそうです。

でも正直なところ、発熱については、Raspberry Piよりも、胴体に入っているArduinoボードの方が心配。ちょっと動かしただけでも相当熱くなっているので、24時間365日動かそうと思うとかなり心配です。

Arduinoボードの方を冷却する良い方法、何かないかな。。。