LPS331AP は ST mirco 製のデジタル気圧センサICです。 表面実装タイプではんだ付けしにくいのですが、DIP変換モジュールを 秋月電子と ストロベリーリナックスが販売しています。 電源電圧範囲は 1.71[V]〜3.6[V]ですので、3.3[V]動作のArduinoに 直接つないで使うことが出来ます。 I2CもしくはSPIバスで使います。
ここではストロベリーリナックス製のモジュールをI2Cで接続していますが、秋月電子のものでも同様に使えるはずです。 次のように配線しています。
ピン番号 | 名称 | Arduinoのピン | 備考 |
1 | GND | GND | 1, 8はモジュール内で接続されている |
2 | SCL | SCL (A5) | |
3 | SDA | SDA (A4) | |
4 | SA0 | GND | GNDにつなぐとアドレスがB10111000, 3.3VにつなぐとB1011101 |
5 | ~CS | 3.3[V] (3V3) | I2C接続のときは3.3Vにつなぐ |
6 | INT2 | - | |
7 | INT1 | - | |
8 | GND | GND | 1, 8はモジュール内で接続されている |
9 | VDD_IO | 3.3[V] (3V3) | |
10 | VDD | 3.3[V] (3V3) |
このスケッチは、気圧と温度について読んだそのままの値と[hPa], [℃]に変換した値をシリアルへ出力します。
#include <Wire.h> // Connect INA226 with SCL (A5), SDA (A4) const byte LPS331AP_ADDR = B1011100; // SA0 = GND //const byte LPS331AP_ADDR = B1011101;// SA0 = VDD_IO const byte LPS331AP_WHOAMI = 0x0f; const byte LPS331AP_CTRL1 = 0x20; const byte LPS331AP_CTRL2 = 0x21; const byte LPS331AP_CTRL3 = 0x22; const byte LPS331AP_P_LL = 0x28; const byte LPS331AP_P_L = 0x29; const byte LPS331AP_P_H = 0x2A; const byte LPS331AP_T_L = 0x2B; const byte LPS331AP_T_H = 0x2C; void LPS331AP_write(byte reg, byte val) { Wire.beginTransmission(LPS331AP_ADDR); Wire.write(reg); Wire.write(val); Wire.endTransmission(); } byte LPS331AP_read(byte reg) { byte ret = 0; // request the registor Wire.beginTransmission(LPS331AP_ADDR); Wire.write(reg); Wire.endTransmission(); // read Wire.requestFrom((unsigned int)LPS331AP_ADDR, 1); while (Wire.available()) { ret = Wire.read(); } return ret; } void setup() { Serial.begin(9600); while (!Serial) {} Wire.begin(); Serial.println(LPS331AP_read(LPS331AP_WHOAMI), HEX); // should show BB LPS331AP_write(LPS331AP_CTRL1, B10010000); // |||||||+ SPI Mode selection // ||||||+- DELTA_EN // |||||+-- BDU: block data update // ||||+--- DIFF_EN: interrupt circuit enable // |+++---- ODR2, ODR1, ODR0 (1Hz) // +------- PD: 0: power down, 1: active } void loop() { long P; short T; float p, t; P = LPS331AP_read(LPS331AP_P_H); P = (P << 8) | LPS331AP_read(LPS331AP_P_L); P = (P << 8) | LPS331AP_read(LPS331AP_P_LL); T = LPS331AP_read(LPS331AP_T_H); T = (T << 8) | LPS331AP_read(LPS331AP_T_L); p = P; p = p/4096.0; t = T; t = 42.5 + t/480.0; Serial.print(P); // pressure (reading) Serial.print(" "); Serial.print(T); // temperature (reading) Serial.print(" "); Serial.print(p); // pressure in [mbar]/[hPa] Serial.print(" "); Serial.println(t); // temprerature in [`C] delay(1000); }
上記のスケッチです