ホームホーム

気圧センサ LPS33HW を使ってみる

はじめに

LPS33HW は STMicroelectronis 社の 10 気圧防水対応気圧センサです。 測定範囲は 260~1260 hPa。ADC 分解能は 24 ビット。精度は ±0.2 hPa 以内です。 今回は STM32 マイコン(STM32F446RE)と接続して気圧を取得してみます。

LPS33HW
川内 康雄 (著)

接続

LPS33HW そのものは極小の表面実装パッケージで扱いにくいので,LPS33HW を搭載したストロベリーリナックスの「LPS33HW 【防水】気圧センサモジュール(I2C/SPIタイプ)」(注文番号:#12133)を使用しました。

マイコンボードは,STMicroelectronics の STM32F446RE を搭載した NUCLEO-F446RE を使用しました。

電源は LPS33HW の VDD 端子と VDD_IO 端子に 3.3 V を供給しました。

マイコンとセンサの接続は I2C または SPI が使えますが,今回は I2C で接続しました。SCL と SDA の2本を接続します。外部にプルアップ抵抗が必要です。 I2C で使う場合 LPS33HW の CS 端子は VDD_IO に接続する必要があります。

I2C のスレーブアドレスは SA0 端子のレベルで決まり,GND に接続すると 0b1011100,VDD_IO に接続すると 0b1011101 になります。 今回は GND に接続しました。

LPS33HW の接続

気圧測定

まずはじめに LPS33HW を動作させるために,レジスタ 0x10 にデータ 0x10 を書き込みます。すると LPS33HW は 1 秒ごとに気圧を測定するようになります。

    uint8_t data[] = { 0x10 };

    HAL_I2C_Mem_Write(phi2c, 0b1011100 << 1, 0x10, 1, data, 1, 1000);

測定された気圧データを読み出すには,レジスタ 0x28 からの 3 バイト(24 ビット)を読み出します。0x28 が最下位バイト,0x2a が最上位バイトです。 読み出した値を 4096 で割ると,hPa(ヘクトパスカル)単位の気圧になります。

    uint8_t data[3];

    HAL_I2C_Mem_Read(phi2c, 0b1011100 << 1, 0x28, 1, data, 3, 1000);

    double pressure = (data[0] | data[1] << 8 | data[2] << 16) / 4096.0;
川内 康雄 (著)