●Arduinoで大気圧センサーモジュールを使う

Amazonで購入できるBMP180 大気圧センサーモジュールを手に入れたので気圧計を作成したいと思います。
GY-68 圧力センサー,BMP180圧力気圧センサモジュールデジタルブルー

だいぶコンパクトなセンサーで思った以上に小さいです。
センサーの金属缶には小さな穴があいてます、その中には真空の器とそれを覆う”ひずみ”センサーが入っていて機械的な気圧計とほぼ同じ構造になっています。
このセンサーには気圧計と温度計が内蔵されています。
裏面はこのような感じです。




▼ハードウエアの接続
電源電圧は本来なら3V程度です、このモジュールはレギュレターが入っているみたいですが、念のために3.3Vの端子に接続しました。

GNDをArduinoのGND
VINをArduinoの3V3
SDAをArduinoのA4
SCLをArduinoのA5


▼ソフトウエアの作成
難しい事は無しにしてサクッとライブラリに頼りましょう。
ツール→ライブラリの管理 を選択してライブラリマネージャを開きます。
そこで 検索をフィルタ...に"adafruit BMP085"と入力してライブラリをインストールします。


▼ 値をシリアルモニタに出力する
こんな簡単に出来るなんて、やはりライブラリは偉大です。
このプログラムを書き込んでシリアルモニタを開くと値が表示されます。
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
    Serial.println("ERROR");
    while (1);
  }
}

void loop() {
  Serial.print(bmp.readTemperature());
  Serial.print("°C ");

  Serial.print((double)bmp.readPressure() / 100);
  Serial.println("hPa");

  delay(1000);
}

▼ 液晶モジュールを使用する
気圧計の表示部分は、 Arduinoで1602 I2C液晶モジュールを使う で作成した表示部分を流用します。
I2C接続のセンサーのため、I2C液晶モジュールと共用で配線します。

プログラムはライブラリの戻り値をLCDに表示するだけです。
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal_I2C.h>

//アドレス0x27 16文字2行の液晶
LiquidCrystal_I2C lcd(0x27, 16, 2);

 
Adafruit_BMP085 bmp;
   
void setup() {
  lcd.init();
  lcd.backlight();
  
  if (!bmp.begin()) {
    lcd.setCursor(0, 0);
    lcd.print("ERROR");
    while(1);
  }
}
   
void loop() {
    lcd.setCursor(0, 0);
    lcd.print(bmp.readTemperature());
    lcd.print(" ");
    lcd.write(0xDF);
    lcd.print("C       ");
     
    lcd.setCursor(0, 1);
    lcd.print((double)bmp.readPressure()/100);
    lcd.print(" hPa       ");
     
    delay(1000);
}

赤文字部分がBMP180から値を読み出す中心的な部分です。
実際に作成してみました。
気温と気圧が表示されています。



もし、液晶がI2Cではなく、Arduinoで1602 LCDを使うのように1602LCDをデジタルピンで接続している場合は LCD表示部分を変更した、次のプログラムを使います。
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);
 
Adafruit_BMP085 bmp;
   
void setup() {
  lcd.begin( 16, 2 );
  lcd.clear();
  
  if (!bmp.begin()) {
    lcd.setCursor(0, 0);
    lcd.print("ERROR");
    while(1);
  }
}
   
void loop() {
    lcd.setCursor(0, 0);
    lcd.print(bmp.readTemperature());
    lcd.print(" ");
    lcd.write(0xDF);
    lcd.print("C       ");
     
    lcd.setCursor(0, 1);
    lcd.print((double)bmp.readPressure()/100);
    lcd.print(" hPa       ");
     
    delay(1000);
}
赤文字部分を変更して1602液晶の接続方式を切り替えています。


▲トップページ > マイコンなど