

Add to Cart
記述: これは高精度BMP085のための簡単なブレイクアウト板ローパワー大気圧センサーです。BMP085は0.03 hPaにの絶対正確さの300から1100のhPaの測定範囲を提供します。それは圧抵抗EMCの強さ、高精度なおよび直線性、また長期にわたる安定性に基づいてのための技術の持っています。このセンサーは1.8と3.6VDC間の電圧供給を支えます。Iの² Cバスでマイクロ制御回路に直接接続されることを設計します
この回路盤に適する板は6ピン0.1"にBMP085のすべてのピンをピッチ
ヘッダー取り出します。BMP085のアナログおよびデジタル供給は(VDDDおよびVDDA)一緒に結ばれ、単一ピンに取り出されます。私達はまたI2Cラインに2つの4.7kプルアップの抵抗器を置きました。
特徴:
次元:
ガイドは説明しますADXL345ブレイクアウト板にArduinoを接続する方法をここにあります。次はArduinoのどのピンが加速度計のピンに接続されるべきであるか記述するテーブルです:
Arduino Pin | ADXL345 Pin |
A4 | SDA |
A5 | SCL |
3V3 | VCC |
Gnd | GND |
テスト コード:
#include <Wire.h>
BMP085の#define BMP085_ADDRESS 0x77 //I2Cの住所
constの無署名の木炭OSS = 0; //Oversamplingの設定
//の口径測定の価値
int ac1;
int ac2;
int ac3;
無署名のint ac4;
無署名のint ac5;
無署名のint ac6;
int b1;
int b2;
intのMb;
int mc;
int md;
//b5はbmp085GetPressureでもbmp085GetTemperature
(...)で計算されます、この変数使用されます(...)
//は…圧力(...)の前に従って…温度(...)呼ばれなければなりません。
長いb5;
短い温度;
長い圧力;
無効の組み立て()
{
Serial.begin (9600);
Wire.begin ();
bmp085Calibration ();
}
無効のループ()
{
温度= bmp085GetTemperature (bmp085ReadUT ());
圧力= bmp085GetPressure (bmp085ReadUP ());
Serial.print (「温度:」);
Serial.print (温度、DEC);
Serial.println (「*0.1 deg C」);
Serial.print (「圧力:」);
Serial.print (圧力、DEC);
Serial.println (「Pa」);
Serial.println ();
遅れ(1000);
}
//はグローバル変数にbmp085の口径測定の価値すべてを貯えます
//の口径測定の価値は臨時雇用者および圧力を計算するように要求されます
//はプログラムの始めにこの機能呼ばれるべきです
無効bmp085Calibration ()
{
ac1 = bmp085ReadInt (0xAA);
ac2 = bmp085ReadInt (0xAC);
ac3 = bmp085ReadInt (0xAE);
ac4 = bmp085ReadInt (0xB0);
ac5 = bmp085ReadInt (0xB2);
ac6 = bmp085ReadInt (0xB4);
b1 = bmp085ReadInt (0xB6);
b2 = bmp085ReadInt (0xB8);
Mb = bmp085ReadInt (0xBA);
mc = bmp085ReadInt (0xBC);
md = bmp085ReadInt (0xBE);
}
//は温度ある特定のutを計算します。
戻った//の価値は0.1 deg Cの単位にあります
短いbmp085GetTemperature (無署名のintのut)
{
長いx1、x2;
x1 = (((長い) ut - (長い) ac6) * (長い) ac5) >> 15;
x2 = ((長い) mc <<11)/(x1 + md);
b5 = x1 + x2;
戻して下さい((b5 + 8)>>4);
}
//はあきらめられる圧力を計算します
//の口径測定の価値は知られていなければなりません
//b5はまた要求されます従ってbmp085GetTemperature (...)は最初に呼ばれなければなりません。
戻った//の価値はPaの単位の圧力です。
長いbmp085GetPressure (無署名の長い上り)
{
長いx1、x2、x3、b3、b6、p;
無署名の長いb4、b7;
b6 = b5 - 4000;
//はB3を計算します
x1 = (b2 * (b6 * b6) >>12) >>11;
x2 = (ac2 * b6) >>11;
x3 = x1 + x2;
b3 = (((((長い) ac1) *4 + x3) <<OSS) + 2)>>2;
//はB4を計算します
x1 = (ac3 * b6) >>13;
x2 = (b1 * ((b6 * b6) >>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (無署名の長い) (x3 + 32768))>>15;
b7 = ((無署名の長い) (の上で- b3) * (50000>>OSS));
(b7 < 0x80000000)
p = (b7<<1)/b4;
他に
p = (b7/b4) <<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038) >>16;
x2 = (- 7357 * p)>>16;
p += (x1 + x2 + 3791) >>4;
帰りp;
}
//は『住所』で読みましたBMP085からの1バイトを
木炭bmp085Read (無署名の木炭の住所)
{
無署名の木炭データ;
Wire.beginTransmission (BMP085_ADDRESS);
Wire.send (住所);
Wire.endTransmission ();
Wire.requestFrom (BMP085_ADDRESS、1);
間(!Wire.available ())
;
帰りWire.receive ();
}
//はBMP085からの2バイトを読みました
//の最初バイトは『住所』からあります
//の第2バイトは『address'+1からあります
int bmp085ReadInt (無署名の木炭の住所)
{
無署名の木炭のmsb、lsb;
Wire.beginTransmission (BMP085_ADDRESS);
Wire.send (住所);
Wire.endTransmission ();
Wire.requestFrom (BMP085_ADDRESS、2);
間(Wire.available () <2)
;
msb = Wire.receive ();
lsb = Wire.receive ();
(int) msb<<8を戻して下さい|lsb;
}
//はuncompensated温度の価値を読みました
無署名のint bmp085ReadUT ()
{
無署名のintのut;
//は記録0xF4に0x2Eを書きます
//はこれ温度の読書を要求します
Wire.beginTransmission (BMP085_ADDRESS);
Wire.send (0xF4);
Wire.send (0x2E);
Wire.endTransmission ();
//の待ち時間少なくとも4.5ms
遅れ(5);
//は記録0xF6および0xF7からの2バイトを読みました
ut = bmp085ReadInt (0xF6);
帰りのut;
}
//はuncompensated圧力価値を読みました
無署名の長いbmp085ReadUP ()
{
無署名の木炭のmsb、lsb、xlsb;
無署名の長い上りの= 0;
//は0x34+を書きます(OSS<<6)記録0xF4に
//の要求oversampling設定が付いている圧力読書
Wire.beginTransmission (BMP085_ADDRESS);
Wire.send (0xF4);
Wire.send (0x34 + (OSS<<6));
Wire.endTransmission ();
転換のための//の待ち時間は、OSSの時間依存を遅らせます
遅れ(2 + (3<<OSS));
//は読みました記録0xF6 (MSB)、0xF7 (LSB)、および0xF8 (XLSB)を
Wire.beginTransmission (BMP085_ADDRESS);
Wire.send (0xF6);
Wire.endTransmission ();
Wire.requestFrom (BMP085_ADDRESS、3);
利用できるようになるデータのための//の待ち時間
間(Wire.available () < 3)
;
msb = Wire.receive ();
lsb = Wire.receive ();
xlsb = Wire.receive ();
の上= (((無署名の長い) msb <<16)|((無署名の長い) lsb <<
8)|(無署名の長い) xlsb) >> (8-OSS);
リターン;
}