52章:Arduino演習(気圧センサーモジュール/LPS25H(SPI)編)

    作成2015.09.08

  1. Arduino(アルドゥイーノ)演習参照アドレス
     Arduino(アルドゥイーノ)演習は下記のアドレスを参照します。
    https://www.arduino.cc/en/Tutorial/HomePage


  2. 気圧センサーモジュール/LPS25HSPI)の回路図
     気圧センサーモジュール/LPS25H(SPI)の回路図は以下となります。





  3. 気圧センサーモジュール/LPS25H(SPI)P
    *品名:LPS25H使用 気圧センサーモジュールDIP化キット
    *購入先:秋月電子通商
    *価格:¥600
     LPS25H使用 気圧センサーモジュールDIP化キットの詳細仕様は下記を参照します。
    [51-1.pdf]をダウンロードする。
    [51-2.pdf]をダウンロードする。


  4. 気圧センサーモジュール/LPS25H(SPI)のスケッチ
    (1)SPI Libraryを参照して、以下のスケッチを作成しました。
    //LPS25H-SPI
    #include <SPI.h>
     const int chipSelectPin = 7;
    
    void setup() 
    {
      pinMode(chipSelectPin, OUTPUT);
      Serial.begin(9600);
      SPI.begin();
      delay(5);
      Serial.println(readLPS25H(0x0F),HEX );//通信確認正常ならば0xBDを受信
      writeLPS25H( 0x20, 0x90);//パワーオン、1Hzを設定
    }
    
    void loop()
    {
      int i;
      long data[5];
      float P,T;
    
      for(i=0;i<5;i++)
      {
        data[i]=readLPS25H(0x28+i);
      }
      P=( float)(data[2]*256*256+data[1]*256+data[0])/4096.0;
    
      if(data[4]>=128)
      {
        T=42.5-( float)(65536-(data[4]*256+data[3]))/480.0;
      }
      else
      {
        T=42.5+( float)(data[4]*256+data[3])/480.0;
      }
      Serial.print("Pressure(hPa)=");
      Serial.print(P,2);
      Serial.print("\t");
      Serial.print("Temperature(C)=");
      Serial.println(T,2);
      
      delay(1000);
    }
    
    byte readLPS25H( byte Register ) 
    {
      byte rdata = 0x00;
    
       digitalWrite(chipSelectPin, LOW);
      SPI.transfer(0x80 | Register);
      rdata=SPI.transfer(0x00);
      digitalWrite(chipSelectPin, HIGH);
      return rdata;
    }
    
    void writeLPS25H(byte Register, byte Value)
    {
      digitalWrite(chipSelectPin, LOW);
      SPI.transfer(0x7F & Register);
      SPI.transfer(Value);
      digitalWrite(chipSelectPin, HIGH);
    }
    


  5. 気圧センサーモジュール/LPS25H(SPI)の実行
    (1)メニューの「スケッチ」_「マイコンボードに書き込む」で書込みされ、実行されます。
    (2)メニューの「ツール」_「シリアルモニタ」を選択するとシリアルモニタが表示されます。
    (3)シリアルモニタに以下の受信データが1sごとに表示されます。
    BD
    Pressure(hPa)=1006.82	Temperature(C)=27.87
    Pressure(hPa)=1006.90	Temperature(C)=27.81
    Pressure(hPa)=1006.91	Temperature(C)=27.99
    Pressure(hPa)=1006.94	Temperature(C)=28.02
    Pressure(hPa)=1006.91	Temperature(C)=28.04
    Pressure(hPa)=1006.88	Temperature(C)=28.06
    Pressure(hPa)=1006.91	Temperature(C)=28.08
    Pressure(hPa)=1006.89	Temperature(C)=28.09
    Pressure(hPa)=1006.89	Temperature(C)=28.11
    Pressure(hPa)=1006.91	Temperature(C)=28.12
    Pressure(hPa)=1006.95	Temperature(C)=28.14
    Pressure(hPa)=1006.90	Temperature(C)=28.16
    Pressure(hPa)=1006.94	Temperature(C)=28.17
    Pressure(hPa)=1006.92	Temperature(C)=28.19
    Pressure(hPa)=1006.88	Temperature(C)=28.20
    Pressure(hPa)=1006.81	Temperature(C)=28.24
    


  6. 気圧センサーモジュール/LPS25H(SPI)まとめ
    (1)SPI通信の手順はLPS25Hの仕様に合わせる必要があります。
    (2)このため、LPS25Hの仕様書とSPI Libraryを参考にスケッチを書き直しました。
    (3)最初に通信確認のため、レジスタアドレス0x0Fの値を読みます。0xBDの応答があれば正常です。
    (4)writeLPS25H( 0x20, 0x90);でパワーオン、1Hzを設定します。
    (5)1s毎に測定した気圧と気温の値はバラツキが少なく、高精度であることが確認できます、
    (6)簡潔な記述でSPI通信ができました。
    (7)SPI通信は配線が増大するので、I2C通信の方が利用しやすいです。




53章:Arduino演習(湿度センサーモジュール/AM2321編)に行く。

トップページに戻る。