ページ

2022/02/27

Raspberry Pi Picoに触ってみる⑤

全開記事でラズピコの自動実行とその終了方法についていろいろ苦労したことを書いたが、その補足。 分電盤センサを作っている過程で、偶然見つけてた。

Thonny上でラズピコとラズパイのUSBシリアル通信を実行する方法。

基本は全開記事に書いてあるものと同じだが、うまくいかなかった理由は、「マウントポイント」の指定がうまくいっていなかったから。
いろいろなサイトにはUSBシリアル通信をするときは「/dev/ttyACM0」がデフォルト値として指定されているが、自分の環境ではttyACM1だった。

つまり、ラズパイ側でラズピコとシリアル通信を受信するプログラムの冒頭でマウントポイントを指示するわけだが、そこで正しく指示しないといけない。

マウントポイントの確認方法は、コマンドラインでdmesgコマンドを実行。

すると、接続デバイスに関するログがもろもろ出てくるので、その中から最新のマウントポイントと思しきも文字列を探す。

具体的なフローは以下。
ThonnyのMicroPythonでラズピコのシリアル送信プログラムを実行。

出力ウィンドウにはラズピコからの出力が表示される。

Thonnyのタブをラズパイの受信プログラムに切替、Pythonでプログラムを実行。

しかしここではttyACM0がビジーか見つからないかで怒られ、実行に失敗する。

この時点で出力ウィンドウからはラズピコの出力が見えなくなり、ラズピコを制御できなくなる。

コマンドラインでdmesgを実行。マウントポイントを確認。

ラズパイ側の受信プログラムのマウントポイントを変更、実行。

ラズピコからの受信データを受信プログラムが処理した結果が出力ウィンドウに表示される。


では停止はどうやるか。やはり、ThonnyのStopボタンからは停止できないため、ラズピコのRUNピンのショートが必要。ただ、前回と異なり、ラズピコ側をmain化していないので、最悪USBケーブルの抜き差しでも可能。ラズパイ側のSDカードが壊れるリスクは少ない。(と思いたい)

マウントポイントがわかったので、sudo unmountコマンドでラズピコプログラムを強制的に切れるかと思いきや、ダメだった。
ただ、main関数を使わずに実行できるようになっただけでも進歩である。


Raspberry Pi Picoに触ってみる④

自分の構想では、分電盤センサはラズピコとラズパイがクライアントサーバ型で役割分担している。ということは、ラズピコとラズパイが通信をする必要がある。

ラズベリーパイPicoでUSBシリアル出力する

を参考にラズパイとラズピコをシリアル通信するプログラムを作っていた。
しかし、うまくいっていない。

実行自体はうまくいく。定期的にラズピコの電圧を読みだしているように見える。
しかし、きちんとプロセスを終わらせることができない。
また、起動方法も独特で、
Thonnyのmicro pythonモードでラスピコプログラムを実行

タブを切り替えてpyhonモードにする

ラズパイ側のプログラムを起動
である。

Thonnyの出力ウィンドウにはPythonのラズパイプログラム出力か、MicroPythonのラズピコプログラムどちらかの出力しか表示されないので、分かりにくい。
Thonnyでラズピコのプログラムを起動しつつ、コマンドプロンプトでラズパイ側のプログラムを起動する手を考えたがうまくいかなかった。コマンドプロンプト側でUSBにアクセスできないと怒られる。

いろいろ試してみる。
全開記事のサイトをもとに、ラズピコ側のプログラムをmain.pyとして保存。
Thonnyを一回落とし、USBケーブルを抜き差し。
→LEDチカチカ。プログラムが自動実行された!

この状態で、ラズパイのコマンドプロンプトからラズパイ側受信プログラムを実行すると、コマンドプロンプトにラズピコから送られてきた電圧値が表示された!
やった!

喜びもつかの間。困ったことに。これらのプログラムの終了方法である。
上記のサイト通りにラズピコに接続しても

 Connecting to /dev/ttyACM0 (buffer-size 512)...

からつながらない。

Raspberry pi Pico 謎が解けた

のサイトどおりにやってもdevice is busyで怒られる。フラッシュボタンを押しても認識できない。うーん、どうしたものか。
ラズピコに書き込んだプログラムはバックアップを取っていないので、初期化することは避けたい。

いろいろなサイトを見て、書いてることを試して失敗した後、海外のBBSにたどり着いた。

Device is busy or does not respond - Raspberry Pi Pico

ここによると、バグかも。しかも修正版のリリースはまだ。BOOTSELボタンを押したまま起動し、ラズピコを再インストールするしかないのか。。。上記で作ったプログラムがすべて消えてしまう・・・

その後も粘って検索を続けたところ!
ラズピコのRUNピンとグラウンドをショートしてリセットを試したら、うまくできた!!

やり方はこう。

Thonnyを起動(MicroPythonモード)

RUNピンとGNDをショート

ラズピコが再起動

ThonnyのシェルでBackend terminated or disconnected. Use 'Stop/Restart' to restart.というメッセージが出る

そこでThonnyのSTOPボタンを押す

ラズピコの動作が止まる(main.pyに仕込んでいたLEDチカチカがとまる)

Thonnyのsaveウィンドウでラズピコのmain.pyを右クリックで削除

これでできた!



2022/02/26

Raspberry Pi Picoに触ってみる③

ラズピコとADCの組み合わせで遊んでいたら、面白い結果がでた。

ADCの各CHは、なにもピンを指さないとプログラム実行時初期値として40~500くらいのランダムな値をとる。

そこにグラウンド接続をしたピンを指してやると、7くらいで安定する。ところが、そこからまたピンを外すとかなりでたらめな値になる。3129を指したこともあった。これは誤差の範疇ではない。電子回路のグラウンド接続の重要性がわかるし、同時に計測していないときはどう接続しておけばよいのか迷う結果でもある。

Raspberry Pi Picoに触ってみる②

 次に、SPI通信でADC MCP3208のデータをラズピコで読んでみる。

Raspberry Pi Picoでプログラミング ⑬ spi APIとA-DコンバータMCP3008

このサイトを頼りに配線。



プログラムを移植するが、うまくいかない。SPIDEVが無いと怒られる。その他はC言語の解説サイトばかり。。今回自分が使っているのはMicroPython。

Raspberry Pi Picoを使ってADC(LTC2462)からカウント値を取得する

ここが参考になるかも。しかし、この通り書いても動かない。
SPIオブジェクトにそんなメンバはないと怒られる。。ではクラスのメンバは何があるのか?ということで

クラス SPI -- シリアルペリフェラルインタフェース バスプロトコル(マスタ側)

ここも参考にしながら格闘中。

今回はかなりドハマりしたが、以下結果。

  • ケーブル配線ミス。MCP3208のDoutを分圧してpicoに取り込んでいるが、電圧のより低い方に配線していた。
  • SPIの関数をどれにすればよいかわからなかった。総当たりで試した結果、結果的にはwrite_readintoがよかった。なぜこれが良くて他はだめなのか、技術的な観点は追いかけていない。
  • 配線設計ミス。CSピンをつないでいなかった。
  • CSピンをずっとグラウンドにつないでいる参考サイトがあって、そこを参考にしたのが一番の失敗→参考サイトの情報は信じてしまうので、こうなるとつらい。
  • CSピンはラズピコにつないで、きちんと1→0にしてやらないとデータを読んでくれない
  • ラズパイの時と違って、CSピンの制御はSPIの関数群に含まれていない。よって、自前での制御が必要
  • ラズピコにはSPIのID0と1がある。それはいいのだが、ID0の中でもピンが2セットある。どれを使えばいいのか、どれを使ってもいいのか、不明。これは実験してみてもよいかも。→後で試してみたら、4番ピン(SPI0 SCK)だとうまくいくが、9番ピン(SPI0 SCK)だとうまくいかなかった。これも技術的な理由は不明。

上記をうけて、回路図を書き直し。
うまくできた!







print文なしのシンプルなプログラムでADC読み込みをループした。
1秒当たり2564回実行していた。すると、1実行0.39msということになる。
毎ループ実行する必要がなさそうなものをfor文の外出しにしても0.3msくらい。

うーん、ラズパイ+ADCのときと変わらないか遅いくらい。。。。マイコンは余計な処理がない分、速いイメージがあったが、ラズピコにしてももそんなに早くならないんだな。プロセッサの違いだろうか。ボーレートを3倍にしても変わらず。

MCP3208のCH0~CH7を走査してみると、10000回実行に25秒かかった。すると、1実行2.5ms。
将来作りたい分電盤センサの要件と併せて考えてみる。
商用周波数50Hzをラズピコで計測するなら1波長8回サンプリング。ということは、サンプリング周期はπ/4。
交流電流のリアルな波形を捉えたいと思えば、ベストは電流の正弦波のピーク値をサンプリングできることだが、現状のラズピコだとワースト値はそこからπ/8ずれることになる。
正弦波であれば、そのずれは、cos(π/8)=0.999976 ん?意外と精度よいではないか。というか、この程度なら自宅使用で許容できる。


Raspberry Pi Picoに触ってみる①

Raspberry Pi Pico(ラズピコ)を購入。ラズピコはラズパイと異なり、OSが動かない。より低位のマイコンと呼ばれるものだ。なぜ買ったかというと、500円と安かったことと、複雑な処理を必要としないIoTネタ(最終的にやりたいと思っている分電盤センサもそう)にいちいちラズパイを使っていたのでは宝の持ち腐れで、小遣いもなくなってしまうということである。世の中のラズパイ系のブログを見ると、・・・をやってみたでおわり、そのあと恒久的に運用している印象は受けないが、自分は長期間のデータを取りたいと思っているアイデアが多いので、各アイデアにラズパイを使っていると出費がかさむのである。

ラズピコの初期設定は以下を参照した。

【ラズパイPico】MicroPythonをラズパイから書き込む/Lチカ

ラズパイでChromiumからデータを落としてこい、という趣旨なのだが、Chromiumが途中でフリーズ。。描画が追い付いていないっぽい。根気が足りないのだろうか。Ctrl+alt+f2とプロセスキルで脱出し、Windowsからのインストールを探る。

ラズパイ(Raspbian)のスワップ容量を変更する

結果的には上記サイトを参照し、ラズパイのスワップファイルサイズの拡大でできた。スワップファイルはもともと100MBしか用意されていなかった。うーん、100MBでは確かに足りないだろう。これはラズパイの初インストール時にやるべき作業だな。100MBでは、ブラウザ起動しただけで100%になってしまう。なお、コメントにあるように、SDカードのサイズがなんであろうが、2GBまでしか設定できないので注意。また、フリーズはしなくなるが、microSDのスワップのため、最初のページ表示までが遅いのは変わらない。外付けUSBメモリにスワップを移す方法もあるらしいが、今回は試さない。

その後、エルチカ成功。ラズパイとラズピコをつないで開発するメリットが体感できた(?)これは楽だわ。←正確には、Windowsにラズピコをつないで開発する不便さを体感しないと、何と比べて楽なのか、言えない。

ここで疑問。
ラズパイThonnyでコーディング

プログラムをラズパイに保存

Thonnyで実行ボタン

の流れはわかりやすいんだが、ラズピコのみを電源につないでも動かない。毎回Thonny経由で実行するのは、逆に面倒くさいこともある。というかマイコンのイメージではない。

Pico: main.pyとrshellの取り扱い

これがその答え。mainというファイル名で保存するとラズピコ電源投入→自動実行になるらしい。と同時にラズパイから認識できなくなる。そのリカバリ方法も示されている。これはとりあえず、モノができたらおためしだな。




2022/02/20

自動車バッテリーテスタを使って性能測定(スズキ ソリオ)

 前回記事でスズキ ソリオのバッテリーを交換した。
タイミングが遅くなってしまったが、中華性バッテリーテスタを購入したので、試してみる。テスタはKINGBOLEN BM550というAliExpress購入品。1820円。


測定時に、測定対象バッテリーのCCA値を入力しなければならないのだが、日本のメーカーはCCA値を公表していないことが多いらしい。参考になるか分からないが、JIS値でいうと以下の通り。
交換前のバッテリーであれば55B24 CCA370、交換後バッテリーであれば65B24 445か?少なくとも実際はこれ以上ということだろう。走査的にいろいろなCCAで測定した。

以下、交換前のバッテリーの測定結果。SOHはStatus of Healthの略らしい。




交換後のバッテリーはこれ。












交換前バッテリーと交換後バッテリーを比較した図。交換後バッテリーを長距離走ってエンジンルームを温めた後の測定結果も合わせた。温めると測定結果がよくなるようだ。
SOHというのは実際のCCA/事前設定CCAのことかと思っていたが、そうでもないようだ。
割り算しても一定値にならない。テスタの内部アルゴリズムで決まっているようだ。
ということは、バッテリーの劣化を見るためには、特定のCCAで測るのではなく、毎回CCA400~1000を測定し、グラフのカーブ自体が段々下がっていく様子を見ていくのがよさそう。今後継続的に見ていこう。

今後はそれでよいとして、このテスタの数字だけ見ると、交換前のバッテリーはまだまだ使えたのではなかろうか・・・「アイドリングストップ車のバッテリーは3年しか使えないらしい、突然死する前に交換しよう」といった手前、家族には言えないが。アイドリングストップ車のバッテリーは3年で交換というのは、商売文句だったのだろうか。





2022/02/06

自動車バッテリーの交換(スズキソリオ)とコスト比較

 マイカーが3年目車検を受けた。そこでバッテリー交換を勧められたが、自分でやると安いようなのでやっていたという記録。

車種:スズキ ソリオ(マイルドハイブリッド)
メーカー推奨バッテリー:N-55
ディーラー見積:18000円(N-60使用)

市中にはN-55というバッテリーはそもそも売っていなかった。

今回の候補

  • パナソニック Caos N-N80/A3 \16370
  • GSユアサ ECO.R Revolution ER-N-65/75B24L \14290
  • 古河電池 エクノIS UltraBattery N-55/B24L \17340
  • エナジーウィズ(旧昭和電工マテリアルズ) Tuflong PREMIUM PLUS PPAN70LB24L9A \12790
他にも海外製のバッテリーで廉価なものがたくさんあるが、今回自分でバッテリーを交換するのが初めてで、しかも壊れた時に家族に責められるのも不安なので、日本製から選択した。独身時代であれば間違いなく海外製にしていただろう。

バッテリーの性能値では、パナソニック>エナジーウィズ≒?GSユアサ>古河電池となるが、価格はこの順ではない。
パナソニックが高性能・高価格なのはいいとして、古河電池の価格の高さはいったい何だろう?メーカーサイトを見てみると、キャパシタを使うことでバッテリーの劣化を抑える仕組みがあるようだ。これにより、JIS規格の性能値には表れない性能の高さがあるのだろうか。
自動車のバッテリーについては製品間を公平に比較したレビュー記事が皆無なので、このあたりは本当なのかよくわからない。ほかの電気製品に必ずある製品間の比較試験をしているサイトがないのがっても不思議。
また、GSユアサは性能値が65なのか75なのか分からない品番になっている。
パナソニックは追加パーツでバッテリーの経年劣化をリアルタイムでチェックできるというのが魅力だが、ちょっとコストかけすぎかなーというところ。限界ギリギリまでバッテリーを使い切るという方針だと家族から不安に思われそう。

結局コスパの比較というのはできないので、感覚で選ぶことにした。
パナソニックは数か月前に原材料高騰による値上げをしており、GSユアサも2022/2/1から10%以上の値上げをプレスしている。バッテリーを選んでいる時点でGSユアサはまだ値上げされていなかったので、買い急ぐ感じでGSユアサを選んだ。

ちなみにバッテリー交換後見てみたら、ソリオに初期装備としてついていたバッテリーは日立化成(昭和電工マテリアルズの前身)製のN-55であった。

今回バッテリーテスターを買ったので、CCAや内部抵抗の変化を見ていこう。
現在の総走行キロは19219km。購入後ちょうど3年。


さて、アイドリングストップ車(IS車)は得なのかということを考えてみたい。
ソリオはマイルドハイブリッドであり、積算節約燃料というものが表示できる。
現時点で66633ml。最近は記録的な原油高で、ガソリンも高い。170円/ℓとして、1万円強節約していることになる。
ソリオの非ハイブリッドモデル(5BA-MA27S)を見てみると、バッテリーの形式は46B24L。同等かそれ以上の性能ランクのバッテリーを見ていくと、8000円台からある。GSユアサ製でも12000円。非IS車は3年より長くバッテリーが使えるとは思うが、同じ使用期間を仮定すると、バッテリーの1交換サイクル3年で2000円~4000円の差。10年乗ったとすると、ガソリン価格が常に高い状態でトントンくらいか。実際はIS車が負けている可能性大。
さらにIS車と非IS車の車両価格差は30万円弱で、ここまで考慮すると、IS車はもっと歩が悪い。もちろん、この価格差は自動スライドドア等の付加価値が入っていて、購入時はそれが決め手になったので、非IS車を選べるわけではないが。
少なくとも我が家の乗り方ではIS車の恩恵はないということが分かった。

ラズパイとラズピコで分電盤センサを作成(14)

回路の実装図作成に取り掛かろうと思ったが、ここで一つ寄り道。 ADCへの入力前に交流電圧に対して直流バイアスをかける手段として、オペアンプを使う方法が出てきた。 アナデジ太郎の回路設計 というか、バイアスをかけたい場合、この方法の方がメジャー・・? と思ったのだが、オペアンプは以...