ページ

2022/03/13

スクロールができなくなったトラックボールの分解(エレコム M-HT1URBK)

 エレコムのトラックボール M-HT1URBK を愛用していたが、ある日突然スクロールホイールが効かなくなってしまった。普段はホイールを回すたびにクリック感があるのだが、それもなくなり、完全に自由に回るようになってしまった。ドライバやユーティリティを更新してみたが、なおらないので、マウスを分解してみることにした。

【トラックボール分解】ELECOM HUGEの動画がとても参考になった。

このトラックボールはトルクスねじで止められている製品もあるようだが、自分のものは運よくプラスねじだった。

スクロールホイールまわりのみ分解を進める。



ホイール周りにゴミ等はみあたらない。


ここまできて原因判明。
ホイールの軸が折れている。。
軸が折れているので、ロータリーエンコーダに回転が伝わらないのが原因。
ロータリーエンコーダに六角レンチを入れて回してみると、ちゃんとクリック感があった。

折れた軸の部分を接着剤でつけようとしたのだが、軸が細すぎるのか素材と接着剤の相性が悪いのか、つけられなかった。スクロール以外は問題なかったので、しばらくつかってみたが、スクロールがないというのはとても不便だった。残念ながらこのトラックボールは処分行き。。

それにしても、スクロールホイールの軸はとても細い印象。こんなんでよくすぐ折れないな~。このホイールは2,3年はもった。

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年で交換というのは、商売文句だったのだろうか。





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

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