RAPIROのトラブル 〜Raspberry PiからArduinoを制御できない〜

RAPIROの一般販売が開始されました。これからみんなどんな風にRAPIROをいじってくるのか、すごく楽しみです。

自分が RAPIROに対して入れ込んでいる理由は、他のロボットキットと違って、ロボ開発のプラットフォームになる可能性を感じたからです。それも、ソフト的な話に加え、ハード的にもプラットフォームになり得るというところに、すごく魅力を感じています。かつてのミニ四駆、今で言うならダンボール戦記?みたい に、いろんな追加パーツが出て来ると、すごく楽しいことになるんじゃないかと思っています。littleBitsぐらい簡単に着脱可能なパーツが出て来たら最高です。

さて、実は今回は、いよいよRaspberry PiとArduinoを連携させて、リモコン制御で動かせるようにしようとがんばっていたのですが … ダメです、トラブりました。結局現時点でも解決していないので、どういうトラブルが起こっているのかをメモしておこうと思います。

実はRAPIROを組み立てて、初めて制御したときから『アレ?』と思うところがあり、それの原因を追及している内に、ArduinoからのGPIO経由での電源供給でRaspberry Piが起動しなくなってしまいました(MicroUSBからの電源供給であれば起動します)。

何がおかしかったかというと、PCとArduinoを繋いで、PCのシリアルモニタから”#M0″〜”#M9″のコマンドの送信テストをしているときに、一度コマンド(例えば”#M5″)を送って指定のモーションを始めたあと、モーションを変えようと思って別のコマンド(例えば”#M0″)を送っても、それがArduinoに無視される、というものでした。Arduinoのログ出しをして調べてみると、PCのシリアルモニタから送るコマンド以外に、何者かが大量にArduinoのシリアルポートにデータを送りつけているようで、それのせいでArduinoのシリアルポートのバッファが溢れてしまい、PCのシリアルモニタから送ったコマンドが破棄されてしまっていた、ということのようです。

PC以外にシリアルポートにデータを送れるのは唯一、Raspberry Piだけのハズです。というわけで、Rasbperry PiとArduinoの接続ケーブルを外してみると、Arduinoはシリアルモニタからのコマンドを正しく受け取れるようになってくれました。

…が、これじゃ意味がありません。RAPIROはRaspberry PiとArduinoを連携させてこそなんぼのものです、ということで、何でRaspberry Piからたくさんわけのわからんデータが送られて来るのか、原因わからんけど何とかArduinoの方で防御できないか、とかいろいろ電源ON/OFFして試しているうちに、Raspberry Piが起動しなくなりました。。。

…とりあえず、RAPIROをいじる前に、ハードが壊れるのはもうしょうがないにしても、せめてRaspberry Piのデータのバックアップをとっておくのは必須、ということはよくわかりました。以下あたりが参考になると思います。

よくよく考えれば、Raspberry Piの電源OFFは、本来ソフト的に終了(GUIでシャットダウン or CUIでshutdownかhalt)してから電源を落とすのが正しい手順なのに、RAPIROに組み込んで使うときはそれを気にせずにバシバシ電源を ON/OFFしてしまうことになるから、そのへん気をつけないと、いつデータ壊れるかわかりません。電源切れるハードウェアスイッチでもつけるか…このへんが参考になるかもしれません(←追記:やっつけでつけました。記事下部参照)。

ちなみにRAPIROのフォーラムの方にも書き込みをさせていただいて、アドバイスをいただいたりもしたのですが、それでも解決せず。うーん、明日新しいRasbperry Pi買いにいくか … お金がなくなる …

そんなわけで、今回は大失敗に終わったわけですが、それでもちょっとは得るものもあったり。

RaspberryPiにコンデンサ追加で電源強化

自分は抵抗は扱えてもコンデンサは扱えないハードウェアど素人ですが、このレベルならなんとかなりそう。これでWiFi/Blutoothコンボドングルが、セルフパワーUSBハブなしで、Raspberry Piへの直挿しで安定して動いてくれたら儲け物です。まだ試してないですが。

(追記)

シャットダウン用のハードウェアボタンをつけました。はんだづけの適当さが、いかにやっつけで作ったかを物語っています。一応、ちゃんと動作します。必要に応じて、RAPIROの外側に出せるように引き延ばして使います。

th_shutdown_switch