はじめに
大気圧センサーを使って大気圧を測ります。
アマゾンで購入したBMP180(KKHMF GY-68)というセンサーを使います。
3個で\600と安いです。しかもかなりコンパクト。
測定結果はシリアル通信でPCに表示します。温度も同時にとれるので大気圧と温度表示させます。
・BMP180用のライブラリを使用
・気圧センサーとArduinoとはI2C通信
使用部品
・Arduino uno
・BMP180
・ブレッドボード、配線 4本
BMP180の使い方
測定圧力範囲:300hPa~1100hPa
電源電圧:1.8V~3.6V
購入時はセンサーとピンが別になっています。
はんだ付けする必要があります。
VIN:電源+(3.3V)5Vでは使えないので注意
GND:電源-
SCL:I2C信号(クロック信号)
SDA:I2C信号(データ信号)
はんだ付けした状態
接続図
I2Cの配線はA4とA5に配線しました。Arduino unoにはSCL,SDAの端子もあります。内部的にA4はSDA、A5はSCLに繋がっています。どちらに配線してもOKです。
プログラム
#include <Adafruit_BMP085.h> //ライブラリ呼び出し
Adafruit_BMP085 bmp; //ライブラリ変数名bmpに設定
void setup() {
Serial.begin(9600); //PCとの通信開始宣言と通信設定(通信速度9600bpsに設定)
if (!bmp.begin()) { //BMP関数開始宣言 (数値が無い場合はエラー表示)
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
//温度
Serial.print("温度:");
Serial.print(bmp.readTemperature()); //温度取得と表示
Serial.println("℃");
//大気圧
Serial.print("大気圧:");
Serial.print(bmp.readPressure()/100); //気圧取得と表示
Serial.println("hPa");
/* //標高
Serial.print("標高:");
Serial.print(bmp.readAltitude()); //標高取得と表示
Serial.println("M");
//海面気圧
Serial.print("海面気圧(計算値):");
Serial.print(bmp.readSealevelPressure()/100);//海面気圧取得と表示
Serial.println("hPa");
//実際の標高
Serial.print("実際の標高:");
Serial.print(bmp.readAltitude(101500)); //温度と気圧から標高を計算値取得と表示
Serial.println("M");
*/
Serial.println(); //表示を1行空ける
delay(2000); //2秒待つ
}
注意
BMP180を使うにはライブラリをインストールする必要があります。
インストール手順は次の通りです。
ライブラリ名ははBMP85になっていますが、BMP180と共通です。
サイト:Adafruits-BMP85-Libraryに使い方が載っています。サンプルプログラムから作りました。
if (!bmp.begin()) { //BMP関数開始宣言 (数値が無い場合はエラー表示)
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
この記述がないと表示されません。代わりにbmp.begin()だけでも動作しましたが、エラー表示も出るので、こちらのほうがいいと思います。
bmp.readTemperature():温度取得
bmp.readSealevelPressure():気圧取得(データはPa表示です。天気予報でよく聞くhPa表示に変換するため100で割っています。)
標高、海面気圧、計算からの標高も表示されます。今回は温度と気圧表示だけのため、コメントアウトしています.”/*”、”*/”を消すと、表示されます。
結果
2秒ごとに測定結果が表示されました!
頻繁に変わるデータではないので、待機時間はもっと長くてもいいかもしれません。
気象庁のデータを調べてみると1007hPaでした。誤差も少なく測定出来ていることが分かりました。
センサーは安い割に精度もよく、なかなか使える部品です。今後何かに使っていきたいと思います。
コメント