4610545 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

気圧センサLPS331AP

説明書を見ながら間に合わせな感じでハンダ付け.
精度はかなり良いみたいです.

CIMG7944.JPG

Arduinoでプログラミング. 
気圧センサがちゃんと動きました.
3バイト読みだしてシフトしながら処理すると気圧が読み取れます.
1022.XX hPa の値が読み出せています.

LPS331AP.jpg

データシートはこちら↓ アドレス0x20に書き込むデータで更新頻度が変えられます.
http://strawberry-linux.com/pub/DM00036196.pdf

スケッチはこちら↓

#include < Wire.h>

int sensorAddress = 0xB8 >> 1; // LPS331APのアドレス,SA0=GNDで0xB8,SA0=VDDで0xBA
unsigned long read2a, read29, read28;
float reading= 0;


// I2Cで指定したセンサの指定アドレスから1バイト読み出す
int i2cReadByte(int deviceAddress, int registerAddress){
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1);
return(Wire.read());
}

// I2Cで指定したセンサの指定アドレスに1バイト書き込む
void i2cWriteByte(int deviceAddress, int registerAddress, int data){
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.write(data);
Wire.endTransmission();
}

void setup()
{
Serial.begin(9600);
Wire.begin();

Serial.println( i2cReadByte(sensorAddress, 0x0f), HEX); // 気圧センサのテスト,0f番地からBBが読めれば正常
i2cWriteByte(sensorAddress, 0x20, 0xa0); // 0xa0で7Hz,0x90にすると1Hzで気圧を更新
delay(1000);
}

void loop(){

read2a = i2cReadByte(sensorAddress, 0x2a); // 気圧の上位バイト
read29 = i2cReadByte(sensorAddress, 0x29); // 気圧の中位バイト
read28 = i2cReadByte(sensorAddress, 0x28); // 気圧の下位バイト

reading =(read2a<<16) + (read29<<8) + read28;
reading /=4096; // hPa単位に直す

Serial.print(read2a,HEX); Serial.print(" ");
Serial.print(read29,HEX); Serial.print(" ");
Serial.print(read28,HEX); Serial.print(" ");
Serial.println(reading ); // 気圧をシリアル出力
delay(100);

}


© Rakuten Group, Inc.