RaspberryPiの電源制御装置をTiny13で作る
要するに、PCと同じ電源環境にしようという企みである。スイッチのひと押しで電源が入り、システムをshutdownすれば自動的にメインスイッチ(リレー)が動いて本来の電源を切る。
始め、投入のことだけを考えて、小さなスイッチボックスを作ったのだが、そのうち妄想がどんどん膨らんで、スイッチ一押しで電源が入らないかとか(これはリレーのセルフビレー(自己保持)で簡単にできる)、いや、どうせリレーの制御をするなら、電源断も、shutdownのあとの電流減で自動的に切れないかと考えた。
このあたりまで来れば、リレーやロジックICでやるよりマイコンの方が圧倒的に楽で、しかも自由度が高い。当研究所で最小のマイコン、AVRのTiny13の出番である。こいつは生意気にもADコンバーターを持っていることがわかって、俄然作る気になった。安く作れれば商品化もできるかもしれない。
定期的に、流れる電流を監視していれば、シャットダウンのあとは消費電流が激減するので、電流が一定限度以下になればリレーを動かせば良い。ついでにPCのようにボタンを長押しすれば強制的に電源が切れるようにすれば本格的だ。
昔、マイコンの電子工作は箱庭や盆栽のように面白いと、どこかに書いた覚えがある。Tiny13はなかでも、手のひらに乗るミニ盆栽だ。なにしろフラッシュは1KBしかない。ちょっとしたプログラムを書けばすぐ満杯になる。
でも、こういう狭いところに、いかに必要な機能を詰め込むか思案するところに大きな楽しみがある。などと余裕で開発に入ったのだが、これが結構難儀した。ここ1週間悪戦苦闘して、やっとのことで動くようになった。これまでのほかの工作の話と一緒に、まとめてご紹介する。
RaspberryPiのSDカードフォルダーを小さいものに取り替える(10/21/2013)
RasPiのSDカードホルダーは、ご存知のようにコスト節減のためか、ちゃちな安物で、差し込んだカードの半分近くが基板からはみ出す。ただでさえ四方にコネクターが出ている上、さしたSDカードがはみ出して始末が悪い。
SDカードアダプターを半分に切って、そこへマイクロSDカードソケットを横置きにつけ、このはみ出しをなくすアダプターが作られている。Raspiが売り出された初期の頃から自作レポートがあったり、色々なところで頒布されたりしていたのだが買わずにいた。
RasPiを使っているうち必要性を感じて探してみたのだが、大抵は売り切れてしまっていた。ただ、ここはまだ在庫があるようなので頼んでみた。例によって、ネットでの申し込みと、オンライン振込なので注文は簡単に済んだ。
程なく届いたので、早速試してみる。少し厚みが出来るので、RSコンポーネントから買ったケースは少しあたる。これはケースを削ってしまえば問題ない。アダプターは基板から全くはみださず、とても良い感じである。
ところが、2台目に入れるとI/Oエラーが起きてLinuxが立ち上がらない。別のSDカードを入れると問題なく動くので、このアダプターのせいではなく悪いのはSDカードである。そう、このSDカードは、以前、バックアップをとろうとして出来なかったライブカメラの方の4GBのSDカードである。
ライブカメラのSDカードのバックアップに苦戦(10/26/2013)
このSDカードはApacheはじめ色々パッケージを入れたので、手狭になり、8GBに換装してやろうと、バックアップをとろうとしたのだが、これがことごとく挫折したいわくつきのカードである。
まずPC上でのDD_Windowsによる物理レコードバックアップでは、1683.5MB(ファイルレコード上では1723.9MB)でI/Oエラーで止まる。何回やっても同じところで止まる(一度、3G近くまで行ったことがあるが一度のみ)。
Raspi上のDDコマンドでも同じところなので、ここで物理的な破壊が起きているのは確実である。それではというのでRaspi上で、tarでバックアップをとると、何とか/以下のアーカイブが作れるが、エラーが起きているので完全に戻らないよと釘を刺される。
cpコマンドでrucursiveにコピーすると、/usr/libのあるファイルでエラー終了する。それを消去しようとしても、同じエラーで消去できない。もうだいぶ意地になってきた。
PCのUbuntuでバックアップをとると、一応終わるが、10個ほどのファイルがバックアップできなかったというメッセージがでる。これは上記のファイルとは全く無関係なところである。
ところが、fsck.ext4でスキャンすると、cleanとでる。Ubuntuのbadblocks でサーチすると、3つにわかれた34ブロックのbad blockが記録されるが、これをfsckに反映するのは推奨されていない。全部を壊す可能性があると脅される。
で、動かないかというとLinuxは普通に立ち上がるし、ライブカメラは全く正常に動くのである。こわれているところを使っていないからなのだが、どうも寝覚めが悪い。いずれにしても、このアダプターではI/Oエラーが起きることは間違いない。さて、どうしたものか。
思い切ってSDカードを取り替える(10/28/2013)
迷ったけれど、あまりこれにかかわっているのは時間の無駄のような気がして、このSDカードの修復は諦めて、作り直すことにする。とりあえず、これまでに自分が作ったソースファイルや、設定ファイルをrestoreして、新しい8GBのSDカードで作り直しにとりかかる。時間はかかるが、一度通った道なので進捗は順調だ。
mjpg-streamerのSVNでまたつまづく。しかし今度も、何回かURLをいじっている間に、いつの間にかソースがとりこめた。ところが立ち上げてみるとmjpg-streamerはUnable to set format 144869519というエラーメッセージが出て立ち上がらない。
以前味をしめた、エラーメッセージそのままをgoogleに投げる方法で情報を探してみた。すると、沢山の人が同じエラーで悩んでいることが判明する。いやあ、世界は狭くなったものだ。どうも、YUVモードをサポートしているとかいないとか、判然としない。
-yオプションをつければ良いと言う話だが、こちらにはついている。英語の情報なので読むのに時間がかかる。えい、ままよと、立ち上げ直したら、何と何の問題もなく画像が出た。???であるが、まあ、動けば良い。これ以上の追求はやめて先へ進む。
RasPiの電源スイッチをつける工作のあと思いついたこと(10/31/2013)
新しく作り直した8GBのSDカードでRaspiは、ライブカメラが動くところまで戻った。ライブカメラの運用は、猫対策が思いつかないので頓挫したままだ。そのうち、前から気になっていた、Raspiの電源スイッチを作りたくなった。
SAMBAサーバーにはシャットダウンコマンドを出すスイッチをつけてうまく行ったのだが、電源までは切れない。赤いランプがついたまま放置しておくのも気分的に良くない。それにもうひとつのRaspiについているHUBには電源スイッチがついていない。こいつを切る時はアダプターのジャックを抜くと言う原始的な方法でしか電源を切れない。物理的な電源スイッチが欲しい。
大層な話ではない。単に、LED付きのロッカースイッチを小さなタカチ(SW-40 40X30X20)のケースに入れたスイッチボックスを作っただけである。最初、使っているハブのACアダプターのジャックに合うプラグ(えらく細いジャックだ)を探していたが、ケーブルを切ってしまえば良いことに気づいた。
早速工作にとりかかり、あっという間に完成した。いちいちプラグを抜き差しする手間がなくなって快適である。余りにも簡単に出来たので、何か物足りなく感じているうち思いついたことがある。
せっかくここまで来たのだから、このあいだのシャットダウンと合わせてRaspiの自動電源断がやりたくなってきた。電流センサーかなにかで、Raspiがシャットダウンしたときの電流を測定し、一定時間、電流が下がれば、全体の電源をリレーで落とせばいけるような気がする。
早速、実際の電流をマルチメーターで測定する。電源投入直後のラッシュカレントは1Aを越えるが、すぐ400mA程度に落ち着く。ログオン時は、500mAを越える時があるが、大体430~480mAで推移する。シャットダウンすると、120mAまで下がって動くことはない。
このあいだのDC-DCコンバーター(NJM2360)のとき、1Ω以下の抵抗をいくつか買ってある。0.22Ωが一番小さい抵抗で、さきほどの電流値だと、この抵抗の電位差は、0.1Vと0.03Vあたりになる。Tiny13のADコンバーターは、1.1Vの基準電圧で10ビットなので、カウント値は凡そ、100と30、問題なく識別できそうである。
RasPi電源の自動切断装置の開発(11/2/2013)
この電源制御装置はSAMBAのサーバーに使う予定だ。スイッチを押すだけで起動し、別のスイッチを押せば自動的にshutdownして電源も切れる。もし、どうしても強制的に電源を切りたければ、PCのスタートボタンと同じように、スイッチの長押しで切ってしまうこともできる。
ACを切るのではなく、5Vを入り切りするので、制御部のAC電源を用意する必要はない。リレーも手持ちの小型リレーで十分だ。部品箱にいくつか常備してあるリレーを取り出してみる。DC 30V 1Aのは沢山あるが、Raspiの消費電流を考えるとちょっと不安だ。さらに部品箱をさらうと、3Aのリレーがでてきた。
ケースを何にするか。先の電源スイッチボックスにしたケースでは、リレーが大きいのでちょっと無理だが、それより一廻り大きいケース(タカチ SW-55)が手持ちにある。Raspiの大きさに近づいてくるというのがちょっと不満だが、手持ちだけで部品が揃うというのは気分が良い。
ハード的には問題なく出来そうである。ソフトの計画を立て始める。小物にしては珍しく慎重に擬似コーディングから始めた。このあいだの時計の自動巻き機のソフトパワースイッチが参考になりそうだ。ただ、こいつはTiny2313なので、Tiny13で、sleepモードが揃っているかが問題だ。
良かった、Tiny13でもパワーダウンモードがある。まあ、電池ではないので余り神経質になることもない。ただ、パワーダウンモードから立ち上がるピンは、ISPのMISOピンにあたるので、ISP-UARTでモニタリングするには制約が出てきた。
同じPINをUARTと外部割込みに使うのが難しい(11/5/2013)
慎重に始めたと言っても、複雑なことは何もない。電源が入れば、いきなりパワーダウンモードのスリープに入って、スイッチが押されるのを待つ。スイッチが押されたら、スリープモードをアイドルモードに戻し、リレーをONして電源を入れる。
そのあとは一定間隔で消費電流をADコンバーターで測定し、何回か規定以下の電流だったときは、リレーをOFFして電源を切り、最初のパワーダウンモードに戻る。このほかスイッチを長押ししたときも電源を切るロジックを加える。難しいところはどこにもない(はずだった)。
8ピンのAVRである。簡単にブレッドボードに回路が組みあがる。ソースコードも大した量ではない。すぐに出来上がった。いつものavrspを立ち上げて動作を確認したあと、ソフトのテストを始める。ところが、デバッグ用のUARTが思うように言うことを聞かない。
Tiny13のパワーダウンモードで動く外部割込みピンPB1は、ISP-UARTの送信ライン(MISO/PB1)と共用なので、UARTのたびに、丸ごとポートとピンの設定を取り換えて動かすようにしているのだが、これがうまくいかない。
デバッグメッセージを出すprintf(ここは自前の文字列出力関数)は、その前後に、次のようにUARTの初期化とリストアコマンドを挟んでいる。
uart_init();
(文字列出力関数)
uart_deinit();
こうすることで、とりあえずUARTも、パワーダウンモードの割り込みも動くのだが、文字が化け化けで中味が見えない。ボーレートを下げても改善されない。頭を抱える。さっさと、UARTを諦めて別の方法でデバッグを考えればよいのだが、UARTにこだわる理由がある。
この装置では、シャットダウンを決める電流値がキーなのでADコンバーターの値が動作中読み取れて調整が楽なようにしておかねばならない。UARTをなくすわけにはいかないのだ。
それならパワーダウンモードのPB1のsleepを諦め、アイドルスリープのモードにすれば、ISP-UARTとぶつからずにすむ。しかも電池駆動ではないので、消費電流にこだわることもない。
しかし、この程度のことがうまくいかないというのが気に入らない。生来の負けず嫌いである。こんなことくらいでパワーダウンモードの低消費電流を諦めるわけには行かない。それに8ピンのAVRにはもう外部割込みに使える独立したピンがない。
それより、動き方がどうも不審で思ったような動きをしていないような気がする。しかし字化けしているので確認できない。UARTが使えないというのは何と不便なことかということを思い知る。
普通のソフトUARTをTiny13に入れる(11/7/2013)
何をやっても改善されないので、ついにUARTを外し、動きをLEDの点滅で確認することにした。するといくつか勘違いが見つかり、それを修正して、やっと動くところまで来た。スイッチを押すと電源がONになり、長押しすると電源がOFFになるロジックである。
流れる電流を逐一報告させるため、UARTを入れなおす。しかし、ポートの切り替えを頻繁にやっているせいか、どうしても文字が正確に出てこない。しかも、スイッチの長押しで強制的に電源を切るロジックは、ISP-UARTでは監視できない(押してるスイッチが送信ライン)ことに気が付く。
これに暫く気がつかなくて、「動かない。動かない」と悩んでいた自分の馬鹿さ加減が悔しくて、どうしてもTiny13にUARTをつけて動かしたくなった。完全に意地になっている。
そういうことなら、昔、XbeeのAPIモード汎用モニターのソースを公開するときに、ISPを使わないソフトUARTを開発してある。ChaNさんのISP-UARTは、ISPケーブルをつけたままデバッグに入れるので、超便利なのだが、最近はシリアルのCOM1インターフェースの付いたPCが殆どなくなったのを配慮してソースの公開用のときに開発したものである。
Tiny13のフラッシュはわずか1KBで、ISP-UARTをはずすと現在のフラッシュサイズは450バイト程度である。ISP-UARTを入れて700バイト近く、確か、ChaNさんのアセンブラーソースをやめて自前のCコードにしたらサイズが大きくなってしまった記憶がある。
ソースコードはあるが、フラッシュがどれくらい増えるか見当がつかない。恐る恐る、ヘッダーファイルなどをMega用からTiny13用に取替え、コンパイルしてみる。良かった。同じようなサイズで問題なさそうだ。しかし、動かしてみたら文字は化け化けでかえって前より悪くなってしまった。
こうなると、もう意地の上塗りである。何とかこいつを動かすまで先に進めなくなった。解決策を探る。テスト済みのプログラムだからコーディングミスはない(だろう)とすると、ボーレートが合っていないだけではないだろうかという仮説をたてる。
オシロスコープを持ち出して、送信データを測る。こういうときのオシロの効果は絶大だ。トリガーをAutoでなく、Normalにして出だしのところを残すようにすると簡単に送信パルスがとれた。測ってみるとやはり所定どおりの長さではなく(9600bpsで、104μs)、100μs以下のようだ。
Tiny13は、クロックはCR発振で9.6Mhzなのだが少しそれより早いようなので、ボーレートの調整用のループ数を大きくして合わせる。サイズが小さいのでフラッシュ更新は一瞬で終わる。調整は何度でも簡単に行える。
やっぱり原因はボーレートだった。1ビットの長さを規定どおりにすると、字化けは完全に解消した。ADコンバーターの数値や、タイムアウトの時間などが問題なく表示されるようになった。そう、こうでなくてはいかんと一人悦にいる。
ロボットショーに行って来た(11/9/2013)
部屋にこもりきりで開発に没頭していると気晴らしに外へ出かけたくなる。たまたま招待券を貰ったので、初めてロボットショー(正式名は2013国際ロボット展)なるものに出かけてみた。TVでも既に色々なところで紹介されている。場所は東京ビッグサイトである。ここは10年近いご無沙汰なところなので息抜きにも良い。
珍しく首都高速に乗って車で出かけた。ところが降りるところを間違え、隣の島の大井埠頭まで連れて行かれた。レインボーブリッジから東京ビッグサイトに行く時は、必ずつきあたりで左折して、有明インターで降りるか、手前の「お台場」で降りないと大変なことになる。
事前に地図を見て、「臨海副都心」という最寄のインターで出られると思っていたら、このインターは、レインボーブリッジ側から来ると出口がない!横浜側からは降りられるのだが、反対車線は入り口しかないのである。で、どうなるかというと海底トンネルを越えて隣の島の大井埠頭まで連れて行かれる。
大井インターで降りると悲劇が待っていた。折り返しは首都高速のトンネルしかなく、同額の別料金をとられるか、延々と迂回してもういちどレインボーブリッジを渡らなければならない。お金を払うのがしゃくで、下の道を経由したら、しっかり迷って30分以上も余計にかかってしまった。
会場はウィークデイだったので会社関係者が多く、思ったほど混んではいなかった。それにしても産業用ロボットの発達はすさまじい。重量物を軽々持ち上げ、8台近くの大型ロボットが一斉に工作対象に集まって、全くぶつからずに同時に作業を開始する。ただ、ただ、あっけにとられて見ているだけである。
細かい部品の移動、受け渡し、介護の手助け、およそ人間がやる物理的な作業は、もう殆どのことがロボットに出来そうである。進歩の流れは、ロボットが自律的に判断し、しかも他との協調作業をいかに簡単(複雑なプログラミングなしに)にやるのかという方向に進んでいるように見えた。
こういうショーで面白いのは、大会社の大きなブースだけでなく、実は細かい仕切りのベンチャーのところにある。しかし、今日はお目当てがあるのであまりゆっくり見ていられない。そう、お目当ては、マイクロマウスやロボトレースの実演である。
TVなどで散々見ていたけれど、やっぱり実際の眼でみるのとでは迫力は大違いだ。マイクロマウスが思っていた以上に小さいのに驚いた。全国大会で2位の「さくらねずみ」さんの模範走行を見せてもらった。
小さいパッケージにつめこむことに夢中になる(11/12/2013)
電子工作に戻ろう。UARTが戻ったので、テストは順調に進み、セメント抵抗を使った動作実験もうまくいった。ブレッドボードでのテストはだいたいすんだので、いよいよ実装にかかる。
最初は、手持ちのリレーが入るタカチのSW-55(55X40X20)を使う予定だったが、秋月で買ってきたリレー(5V DC30V 2A)が思いのほか小さかったので、色気を出して、一番小さいケースで、このあいだのスイッチボックスにしたケース(タカチSW40 予備があった)に現物を入れて試してみた。
うむ、何とか入りそうだ。アートワークを始める。4隅に固定用のネジ穴が出来るので、本当にギリギリのサイズだ。これも秋月で最近買ったプッシュスイッチがお誂えのようにピッタリ収まる。快調である。
基板固定のスペーサーは、内径2ミリのパイプにタッピングした高さ3ミリの自作品である。基板の広さを確保するために固定穴を4隅ギリギリに配置した結果、ケースの底板にスペーサーが当たってしまう。底板を削ることでこれを回避する。まさしくミニ盆栽の世界である。
何とかつめこんだ。あれえ、DCアダプタージャックが、電流測定用の1/2W抵抗とぶつかる。こいつを基板のハンダ面に移動させる。電源用のコードが太いので交差させると基板が固定できない。配線そのものを換えて解決する。まあ、これが楽しくてやっているのだけれど難行の連続である。
で、この実装した電源制御装置は動いたのか。まともに動くまでにはこれからまだいくつかの山を越さなければならなかったのだが、ちょっと記事の量が多くなりすぎたので、この顛末は次回に。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
「Raspberry」カテゴリの記事
- 脱線が止まらない。RaspiでPythonに熱中(2018.03.12)
- CNCマシン(2) 切削を始めるも、Raspi Zero Wへ思わぬ脱線(2018.02.21)
- RaspberryPi3の電源問題はOSの不具合だった(2017.06.12)
- RaspberryPi 3の電源事情好転せず。ESP32に手を出す(2017.05.19)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
コメント
ねむいさん、どうもです。
おやあ、親子で、こちらの関係ですか。素晴らしい。
投稿: がた老 | 2013年11月22日 (金) 22時26分
ねむいです。お久しぶりです。
がた老さんも国際ロボット展に行かれたのですね。
私が企業ブースで、私の父が講演で参加していたので
もしかして会場でお会いしてたかも!
投稿: ねむい | 2013年11月21日 (木) 12時35分
>ばんとさん。どうもです。
ChaNさんのISPケーブルで動くUARTもソフトUARTで、
これは愛用させてもらっています。AVRのクロックは
MHzオーダーなので、UARTのクロックをGPIOで作るのは
簡単です。
でも、CR発振は動作中でもかなりぶれますので、9600
bps以上は、クリスタルを使ったほうが安定しますね。
ただ、8ピンの石だと使えるピンが減ってしまう。
>shuji009さん
遠方から、律義に昔のコメントの返事を頂き、ありがとうございます。
音を使うアプリケーションでのクロック変動はつらいですね。
字化けの解消だって、測定器があれば楽ですが、無手勝流の人には
簡単ではありません。
投稿: がた老 | 2013年11月15日 (金) 22時02分
がた老さん、お疲れ様です。
前記事のレス漏れ「文面をそのまま読むとプリンターもW買いしたようにとれるのですが、」の件ですが、
流石にこの時はW買いじゃないです。
でも嫁に言わせると、プリンタ複合機は他に、隣の部屋とリビングルームの計4台あるから、クアトロ買いだ指摘されました(汗;)。
ところで、ソフトウェアUARTですが、私もはまりました。
http://www.style-21.jp/board/form9.cgi?action=res&resno=24179&id=ekousaku&rno=24190&lognum=71#24190
で少しかいたようにTn85ではまりました。
ChaNさんが書かれておられるように
http://elm-chan.org/junk/adpcm/report.html
問題ありありって感じ。
なのでソフトウェア公開時は、一言注意が必要かもしれないです。
投稿: shuji009 | 2013年11月15日 (金) 17時53分
がた老さん、毎度です。ばんとです。
ソフトUARTって結構使えるものなのですね。
当方ソフトUARTで通信をやったことがあり
ません。
ところで、AVRの内部RC発振は正確な周波
数で発振してくれたらいいのですが、こ
れがまたいい加減です。
当方も、春に作ったときは、何も問題な
くUSARTで通信できたものが、夏場になっ
て使ってみると、文字化けだらけの通信
になってしまった経験があります。
作り直しの機会があったのでセラロック
を入れて対処しました。
投稿: ばんと | 2013年11月15日 (金) 12時09分