背景
気圧センサのLPS25Hのデフォルトのサンプリングレートが1Hzと中々に遅いので、
25Hzまで上げたというお話。
普通にデータシート読めば一瞬なのですが、備忘録として。
http://www.st.com/content/ccc/resource/technical/document/datasheet/58/d2/33/a4/42/89/42/0b/DM00066332.pdf/files/DM00066332.pdf/jcr:content/translations/en.DM00066332.pdf
使用機材
- Arduino UNO x 1
- LPS25H(I2Cでつなぎました)
配線
Arduino | LPS25H |
---|---|
3.3V | VDD(1) |
A5(SCL) | SCL(2) |
A4(SDA) | SDA(3) |
3.3V | SDO(4) |
3.3V | CS(5) |
GND | GND(8) |
コード
sensor.ino
/**
* LPS25Hのサンプリングレートを上げたコード
*/
#include <Wire.h>
#define LPS25H_ADDRESS 0x5d /* SA0 -> VCC */
//#define LPS25H_ADDRESS 0x5c /* SA0 -> GND */
#define LPS25H_WHO_AM_I 0x0f
#define LPS25H_CTRL_REG1 0x20
#define LPS25H_PRESS_OUT_XL 0x28
#define LPS25H_PRESS_OUT_L 0x29
#define LPS25H_PRESS_OUT_H 0x2a
#define LPS25H_TEMP_OUT_L 0x2b
#define LPS25H_TEMP_OUT_H 0x2c
void setup() {
// put your setup code here, to run once:
Serial.begin(19200);
Wire.begin();
Serial.print("WHO_AM_I = 0x");
Serial.println(whoAmI(), HEX);
setCtrlReg1();
}
void loop() {
Serial.print("Pressure = ");
Serial.print(getPressure());
Serial.println(" hPa, ");
delay(50);
}
int whoAmI() {
Wire.beginTransmission(LPS25H_ADDRESS);
Wire.write(LPS25H_WHO_AM_I);
Wire.endTransmission();
Wire.requestFrom(LPS25H_ADDRESS, 1);
while(Wire.available() < 1) {
;
}
return Wire.read();
}
void setCtrlReg1() {
Wire.beginTransmission(LPS25H_ADDRESS);
Wire.write(LPS25H_CTRL_REG1);
Wire.write(0xC0); // 25Hzにまであげる
//Wire.write(0x90); // default: 1Hz
Wire.endTransmission();
}
float getPressure() {
long pData = 0;
for (int i = 0; i < 3; i++) {
Wire.beginTransmission(LPS25H_ADDRESS);
Wire.write(LPS25H_PRESS_OUT_XL + i);
Wire.endTransmission();
Wire.requestFrom(LPS25H_ADDRESS, 1);
while(Wire.available() < 1) {
;
}
pData |= Wire.read() << (8 * i);
}
return pData / 4096.0;
}
float getTemperature() {
short tData = 0;
for (int i = 0; i < 2; i++) {
Wire.beginTransmission(LPS25H_ADDRESS);
Wire.write(LPS25H_TEMP_OUT_L + i);
Wire.endTransmission();
Wire.requestFrom(LPS25H_ADDRESS, 1);
while(Wire.available() < 1) {
;
}
tData |= Wire.read() << (8 * i);
}
return 42.5 + tData / 480.0;
}
以上です。