LoadCellMonitor

◯きっかけ
以前作成した、接触不良検知機が故障してしまった。液晶の問題のような気がするが、従来のAdruino機とそのシールド基板ではサイズが大きすぎて、どうも直してまで使う気が起きない。
手元にM5Stackがあったので、思い切って作り直すことにした。

1号機を作成したときは、低抵抗計を作ることしか思いつかなかったが、その後、ロードセルを使う機会があり、接触不良検知だけならロードセルの方が簡単だと思いついた。
1号機は、Arduinoに、定電流シールド+操作シールド(液晶+ボタン)の3段重ねだった。今回の2号機は1枚のユニバーサル基板に、M5Stack+ロードセル+抵抗4本というシンプルな構成になった(写真のコードDIPスイッチは、グラフの倍率切り替え用)。

◯M5Stackとの接続
今回は、バッテリー駆動は不要なので、M5Stackとの接続は内部BUSから引き出すことにした。通常なら専用端子を使うところだが、専用端子は割高だしユニバーサル基板との接続も面倒なので、普通の2列ピンヘッダを使うことにした。
作り方は簡単で、M5StackのBUSに2列ピンヘッダを先に刺して置き、そこにユニバーサル基板を被せてハンダするだけだ。これで高さの合った状態でBUS端子がつけられる。

◯ロードセルの選定
ロードセル・モジュールと歪ゲージとの接続は、(コネクタではなく)ハンダが基本になる。このため、しくじるとゴミなってしまう。
そこで安価な中華製ロードセルを使いたいところだが、広く出回っている小形の中華製ロードセル(HX711)は、配線パターン的にクロックが変更するのが難しい。このためSparkfun製と同じ構成の中華製ロードセルを使うことにした。違いは下記の2点。

  • 中華製ロードセルにはVDDピンが無い
    自分の使い方では、VCCと繋いでしまうので、無くても問題はない。
  • 配線パターンが若干異なる
    ピン位置は同じだが、スルーホール位置が異なる(実はかえって好都合)。

◯サンプリング周期
このロードセルの裏面には、サンプリング周期(10/80SPS)を選択するための切断パターンがある。裏面なので、ユニバーサル基板等にハンダしてしまうと、後からでは変更できない。(最初からロードセル・モジュール自体を、表裏逆付けるという手はあるが...)。このロードセルには、切断パターンの近くにスルーホールがある。都合が良いことに中華製ロードセルは、このスルーホールが2.54ピッチの位置にあり、細ピンヘッダでユニバーサル基板へ取り出すことができる。あとは、この端子をスイッチで、開放かGNDに落としてやれば、サンプリング周期の切り替えが簡単にできようになる(事前にパターンを切断するのを忘れずに!。Sparkfun製にもスルーホールはあるが、ICに近いところなの使いにくい)。

◯実は動作しなくて、ほとほと困った...
ロードセルは、すでにESP-WROOM-02で使用実績があるので、何の心配もしていなかった。しかし、ブレットボードで、それっぽい動作を確認後、ユニバーサル基板にしたら、まともに動作せず、本当に困った。なんど見直しても原因がわからない。万策つきて、たまたまESP-WROOM-02につなげてみたら、ちゃんと動くではないか!。ここで、ようやくHX711のライブラリの問題だと気づいた。M5Stack(ESP32)で、返値がすべて0ならもっと早く気づいたと思うが、ノイズのような値が返ってきていたため正常に読んでいるのとばかり思っていた。HX711はI2C接続ではないので、マイコンの動作クロックによっては、動作しないのは当たり前なのだが、まったく気づかなかった。

ネットで検索するとやはり同様の問題が議論されており、ESP32でも動作するライブラリが公開されていたので、参考にさせてもらい、ようやく動作するようになった。

◯出来たもの
1号機の数値表示だけとくらべると、2号機のグラフ表示は圧倒的にわかりやすい(動画参照)。
これを使ってスリーブやコネクタの接触状態を調べてみた。1号機の検査では問題ないと判断していた圧着スリーブが、実は、結構ダメダメだったということがわかった。また、あまり期待していなかったバネ式ターナルブロックも使い方によっては問題なく使用できるということもわかった。やはり、予想はあくまでも予想であり、実際、試してみるまでは本当のことはわからないと実感した。