まんぷく

Strawberry LinuxのMPL115A2をArduinoで使う

気圧センサー(MPL115A2搭載)を使う

昨年初頭からマイブームとしてIoT熱は今も続いていまして、私もいつかは何かモノヅクリがしたいと夢見つつ、Arduinoを時々引っ張りだしては遊んでいます。そろそろ組込み屋さんと本気でお近づきにならないいけない気がしてます。

それはともかく、昨年秋に使えるかどうか下調べもせずに購入して、そのままお蔵入りしていたStrawberry Linuxの気圧センサーモジュールをArduinoで使ってみました。

まずはいつも通り情報収集からです

とりあえずパーツに付属してた半ぺらの説明書に目を通してみましたが、例によって良く分かりません(笑)。使い方にI²Cインターフェースで使えと書いてあり、シリアルバス規格の一つで結構いろいろな分野で使われているようです。

回路図を見てもArduinoのどの端子と繋ぐのかいまいち分からないので、MPL115A2とArduinoでググってこのページにたどり着きました。ここで使われている製品は秋月電子製のもので、ちょっとピンの構成は異なりますが、搭載チップ自体は同じものなので、使える事が確定といいますか、もはや勝ったも同然な気分になりました。

あれ?プルアップって何?

意気揚々と基盤にピンをハンダ付けして、ブレッドボードに差して、さきほど見つけたページを参考に回路を構成しようとしたら、回路図に抵抗やコンデンサが書かれていることに(今頃)気がつきました。

そういえば半ぺらの説明書に「プルアップ抵抗は内蔵していませんので、外部でプルアップが必要です。」と書かれていて、さっぱり意味不明なので流してしまっていましたが、これの事だったんですね。

仕方がないのでその日は作業を中断して、翌日近所のパーツ屋で書かれていた通りの4.7kΩの抵抗と1μFのセラミックコンデンサを購入しました。

ちなみに抵抗は100個単位での販売で、いったいいくらするのかとドキドキしながらレジに行きましたが270円(税抜き)でした。一瞬でもビビった自分のチキンさが情けなくなるほど単価は安かったです。

あとはソースを書くだけなのですが、、

ようやく部品も揃ったのでブレッドボード上に各パーツを接続して準備完了です。 I²Cの基礎を覚えるならコードの自作も考慮すべきですが、今回のデバイスに限って言うなら、やり取りとしては読み込みたいアドレスを送信後、読み込みバイト数を指定してデータを読込むだけなので、私としてはあまりグッと来る要素もないので、全部すっとばしてAdafruit作成のライブラリを丸ごと使わせて頂きました。

私の場合Arduino関係でソースコードを探す場合は、まずAdafruitSparkfunを調べます。両者にはそれぞれ学習サイトがあって、いずれもすごく分かりやすいです。

私感ですが国内で頑張ってるのはエレキジャックぐらいで、他に網羅的に書かれているサイトを見た事がありません、もちろん個人ブログや雑誌などは沢山あるのですが、マルツエレックのMaruduinoのように自社制作パーツセットを販売しているサイトでも、肝心の作り方はどこにものっておらず、キットに数枚の説明書(しかもコピー用紙)が入っているだけで、これだけ読んで組み立てられる初心者など絶対にいないだろう断言出来る内容でした。

私の場合も前述のエレキジャックでMaruduinoに関するページを見つけられなかったら、間違いなく挫折していたと思います。企業目的や目指すところが異なるのは分かりますが、裾野を広げるためにももう少し頑張って欲しいところです。

更に言えばAdafruitのこれこれ、Sparkfunのこれなど、いずれの製品も予めプルアップ抵抗等が付加されて完結しているのですぐに使えます。国内企業もこのあたりは見習って頂きたいです。

なんというか最近の Made in Japan はあんまりイケてないです。Omotenashiの心はどこに行ったのでしょうねぇと愚痴ってばかりでは記事が終わらないので最後にソースコードを乗せときます。

#include <LiquidCrystal.h>
#include <Wire.h>
#include <Adafruit_MPL115A2.h>

Adafruit_MPL115A2 mpl115a2;
LiquidCrystal lcd( 2, 3, 4, 5, 6, 7);

void setup(void) 
{
  Serial.begin(9600);
  lcd.begin(16,2);
  
  //Serial.println("Getting barometric pressure ...");
  mpl115a2.begin();
}

void loop(void) 
{
  float pressureKPA = 0, temperatureC = 0;    

  mpl115a2.getPT(&pressureKPA,&temperatureC);
  lcd.setCursor(0,0);
  lcd.print("P (hPa): ");
  lcd.print(pressureKPA*10);
  
  lcd.setCursor(0,1);
  lcd.print("T  (*C):   ");
  lcd.print(temperatureC);
  delay(1000);
}
      
ブレッドボード上のMPL115A2モジュール

ブレッドボード上のMPL115A2

肝心のチップがあまり大きく写っていませんが動作風景なので良しとして下さい。
実際に動かしてみると、ちょっと気圧の振れ幅が大きいので何回か回して平均値をとったほうが良さそうです。
参考にした回路図ではグランド側にセラミックコンデンサが配置されていたのですが、それだと気温がマイナスだったり全然数値がおかしくて、VDD側に配置したら少なくとも数値上はうまく動作しています。配線が根本的に間違ってたりするのでしょうかね。

Categories
tech

Tags
Arduino / MPL115A2 / Strawberry Linux