これまではモジュール化されて「接続するだけ」となったチップや変換器を紹介してきましたが、ここではセンサーそのものであるTE Connectivity社のMS5837-30BAという圧力センサーを紹介します。本体そのものが極めて小さいので、このセンサー本体の扱い方を知っていると、いろいろな場所に埋め込んだり、便利なことがあると思います。MS5837-30BAは容量3MPaの絶対圧センサーで、AD変換器が内蔵されており、出力(I2C通信)は24bitデジタルです。圧力に加え、同時に温度も計測することができます。購入数により単価は異なりますが、1個の場合、買う場所によって1000~3000円くらいです。リールで数百個買うと、単価は数百円まで下がることがあります。
小さッ!基盤部は辺3.3mm、円筒部は先端のフランジ径が2.64mm、根元の径が2.98mmです。3mm径の穴にちょうどはまります。
詳しい諸元やデータシートはこちらのメーカーウェブサイトから手に入ります。
https://www.te.com/jpn-ja/product-CAT-BLPS0017.html
まだ本格的に使い始めてから数か月で、長期的なフィールド挙動を確認していないのですが、少なくとも短期間使ってみた感じとしては、非常にコストパフォーマンスに優れたセンサーのようです。ただ、基板実装用であり、非常に小さいので、手作業での実装(ケーブルへのはんだ付け)がとても難しく、この過程でかなりの確率で失敗して無駄にしてしまうことがあります。ひどいときは5個くらい連続で壊してしまいます。「きさま・・・1つのセンサーを作るのにいくら壊してきた?」と聞かれたら、「お前は自分が食ったパンの枚数をおぼえているのか?」と答えるしかありません。ここでは、失敗しづらい実装法も紹介します。
ブレークアウトモジュール
このセンサーの概要を示すために、まず、既に実装された製品を試してみます。基板実装されたものはAmazonなどで購入できますが、1個6000円程度とかなり高価なうえに、基板のせいで組み込みの自由がきかないという問題があります。あくまで評価ボードとして用いることになります。
使い方は簡単で、I2C通信によるものなので、たとえば第22回のBME280/BMP280と同様にArduinoに接続すればよいです。そして、例によってフリーのライブラリを使います。
https://github.com/bluerobotics/BlueRobotics_MS5837_Library
ここでは、毎秒(delay(1000);)圧力と温度を計測してシリアルモニタに表示するスケッチを示します。上記ライブラリにあるサンプルとほぼ同じです。ちなみにこのセンサーのI2Cアドレスは0x76ですが、このライブラリのコードにすでに書き込んであるので、ユーザーがどこかに書く必要はありません。なお、MS5837-30BAの入力電圧は1.5-3.6Vなので、VDDにはArduinoの3.3V出力端子を接続します。このブレークアウトモジュールは電圧レギュレータが載っているので問題ありませんが、後述のように「素」から製作した場合、5Vにつなぐと簡単に壊れたので注意してください。
センサー本体からの製作
センサーそのものは、最初から小さな基板に載っています。この基板裏に4つの金属パッドがあり、これがI2C通信に必要なVDD、GND、SCL、SDAになります。このパッドに4芯ケーブルのそれぞれの芯をはんだ付けするのですが、注意点としては、
・VDD - GND間には100nFのコンデンサが必要
・VDD – SCL、VDD – SDA間には10kΩの抵抗が必要
・ケーブルはシールドケーブルがよい?
・パッドは非常にはがれやすく、一度はがれると復旧は無理
10kΩの抵抗についてですが、仮にマイコン(Arduino)側にプルアップ抵抗があっても、このセンサー直近に追加しないとうまく動作しませんでした。また、I2CはSPI同様、周辺機器との通信を目的としており、ケーブルが長くなるとうまく動作しないことがあります。シールドケーブルを用いることでノイズに強くなりますが、ケーブル長には限界があると思います。ここで紹介する方法で、3mまでは動作確認しています。では、一つ一つ解説していきます。
① ピンヘッダ―のはんだ付け
ケーブルの先端をバラにして直接MS5837-30BAの基板裏にはんだ付けを何度も試みましたが、つけ終わった芯に力がかかるたびにパッドがはがれてしまい、5連敗ほどして、この方法は諦めました。これを避ける方法として、ピンヘッダーをあらかじめ4本ブロックにしておき(黒いプラスチック部分に瞬間接着剤をつけて固定する)、これをはんだ付けします(パッドにあらかじめはんだをつけておくといいです)。これに成功したら、勝負は8割決まったと思っていいです。なお、はんだ付けに手こずって基板を熱しすぎると、表面加工が融けてパッドを覆ってしまい、はんだが付かなくなります。
② コンデンサー・抵抗×2のはんだ付け
下の図のようにコンデンサー・抵抗×2をつけます。写真の通り、とても小さいのでなかなか難しいです。特に、VDD – SDAという対角線の位置関係にあるピン同士を抵抗でつなぐには技術が必要です。ピンセットとツールクリッパーは必須です。
③ ここで、4芯シールドケーブルをはんだ付けします。ケーブルは、細いロボットケーブルなどが便利です。モノタロウで5mが1000円ほどで買えます。
④ 以上で、電気的な作業は終わりで、あとは筐体作製になります。この状態で放っておくとピンヘッダーとパッドの間に力がかかることがあるので、まずはその前にこの状態を固定します。速乾性アラルダイトで基板を覆って固定するといいです。アラルダイトは絶縁体なので、コンデンサー・抵抗を覆っても構いません。ところで、この圧力センサーを最終的にどのように対象物とコンタクトさせるかという問題があります。単に水位を測るだけならば、水中に放置するだけなので、先端はこのままでも構いません。しかし、例えば管の内部などの圧力を測る場合、チューブに接続しなければなりません。ここでは、外径4mmのポリウレタンチューブに接続することを想定し、ワンタッチタイプのハーフユニオンに接着します。SMC製のKQ2H04-01NSは孔の内径が3mmなので、MS5837-30BAの筐体がちょうどはまります。この状態でアラルダイトでくっつけると便利です。
⑤ これに、内径10mm弱のステンレス管をちょうどよい長さに切ってはめます。ステンレス管はホームセンターで買うか、100円ショップのガーデンライトの茎の部分を使ったりしています。錆びないステンレスがよいですが、ちょうどよい太さのものがあればプラスチックでもいいかもしれません。そして、両端を再びアラルダイトで固定します。
⑥ 以上で完全防水になりました。ただ、アラルダイトなどのエポキシ樹脂は水中で劣化します。これを抑えるために、さらに防水タイプ(内側にシール材が塗布されているもの)の熱収縮チューブを被せます。
これで非常にそれらしく見えます。ケーブルの先の4本を先の図のように接続すれば使えます。ノイズの問題があるようなら、シールドをGNDにつないでみます。
パフォーマンス
上記のようなモデルを4個作って較正したところ、ゲージ圧0~80kPaに対してほぼ正確に反応しました。ただし、オフセット(大気圧開放下での出力値)には±1.5kPa程度の個体差がありました。個体ごとのオフセットは記録しておいたほうがいいでしょう。真空レギュレータを使って負圧に対しても較正しましたが、こちらも正確に反応しました。
バッテリーでArduinoを駆動した際には出力は非常に安定しており、48時間の計測値の増減はAMeDASの気圧データと一致しました。ただし、携帯電話充電用の5V出力アダプタを使ってArduinoのUSB接続端子から給電したところ、値がかなりゆれました。3.3V出力端子から印加するときにArduinoからの電圧は安定化されているはずなので、この結果は不思議なのですが、とにかくこのようになりました。長期観測結果がおかしい場合は給電方法も検討してください。適切な方法で使用すれば、下図のような安定性が得られるはずです。
最後に余談ですが・・・製作の過程でたくさんのMS5837-30BAを壊したと書きました。壊したら分解せずにはいられないのが理系の性ですが、分解すると、実はセンシング部分は本当に塵くらいの大きさしかないことがわかります。半導体テクノロジーの世界では当たり前なのでしょうが、どうしてこのようなものが作れるのか、土木系の自分は驚嘆するばかりです。大きいものを作るのも大変ですが、小さいものをつくるのは本当に技術だと思います。