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

    作成2015.09.07

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


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





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


  4. 気圧センサーモジュール/LPS25H(I2C)のスケッチ
    (1)Wire Libraryを参照して、以下のスケッチを作成しました。
    //LPS25H
    #include <Wire.h>    
    #define disk1 0x5D    //Address of LPS25H eeprom chip
     
    void setup(void)
    {
      Serial.begin(9600);
      Wire.begin();  
        Serial.println(readLPS25H(disk1, 0x0F),HEX );//通信確認正常ならば0xBDを受信
        writeLPS25H(disk1, 0x20, 0x90);//パワーオン、1Hzを設定
    }
     
    void loop()
    {
      int i;
      long data[5];
      float P,T;
    
      for(i=0;i<5;i++)
      {
        data[i]=readLPS25H(disk1, 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);
    }
     
    void writeLPS25H(int deviceaddress, byte eeaddress, byte data ) 
    {
      Wire.beginTransmission(deviceaddress);
      Wire.write(eeaddress);
      Wire.write(data);
      Wire.endTransmission();
     
      delay(5);
    }
     
    byte readLPS25H(int deviceaddress, byte eeaddress ) 
    {
      byte rdata = 0x00;
     
      Wire.beginTransmission(deviceaddress);
      Wire.write(eeaddress);  
      Wire.endTransmission();
      Wire.requestFrom(deviceaddress,1);
      if (Wire.available()) rdata = Wire.read();
      return rdata;
    }
    


  5. 気圧センサーモジュール/LPS25H(I2C)の実行
    (1)メニューの「スケッチ」_「マイコンボードに書き込む」で書込みされ、実行されます。
    (2)メニューの「ツール」_「シリアルモニタ」を選択するとシリアルモニタが表示されます。
    (3)シリアルモニタに以下の受信データが1sごとに表示されます。
    BD
    Pressure(hPa)=1003.25	Temperature(C)=28.53
    Pressure(hPa)=1003.19	Temperature(C)=28.53
    Pressure(hPa)=1003.19	Temperature(C)=28.49
    Pressure(hPa)=1003.22	Temperature(C)=28.49
    Pressure(hPa)=1003.23	Temperature(C)=28.49
    Pressure(hPa)=1003.21	Temperature(C)=28.49
    Pressure(hPa)=1003.19	Temperature(C)=28.50
    Pressure(hPa)=1003.25	Temperature(C)=28.50
    Pressure(hPa)=1003.24	Temperature(C)=28.50
    Pressure(hPa)=1003.19	Temperature(C)=28.50
    Pressure(hPa)=1003.25	Temperature(C)=28.50
    Pressure(hPa)=1003.23	Temperature(C)=28.50
    Pressure(hPa)=1003.25	Temperature(C)=28.50
    Pressure(hPa)=1003.22	Temperature(C)=28.50
    Pressure(hPa)=1003.24	Temperature(C)=28.50
    Pressure(hPa)=1003.27	Temperature(C)=28.50
    


  6. 気圧センサーモジュール/LPS25H(I2C)まとめ
    (1)一般的にはSDAとSCLのプルアップが必要ですが、プルアップ無しで動作しました。
    (2)I2C通信の手順はLPS25Hの仕様に合わせる必要があります。
    (3)このため、Wire Libraryを参考にスケッチを書き直しました。
    (4)SD0を3.3Vに設定しました。LPS25Hのデバイスアドレスは0x5Dとなります。
    (5)最初に通信確認のため、レジスタアドレス0x0Fの値を読みます。0xBDの応答があれば正常です。
    (6)writeLPS25H(disk1, 0x20, 0x90);でパワーオン、1Hzを設定します。
    (7)1s毎に測定した気圧と気温の値はバラツキが少なく、高精度であることが確認できます、
    (8)簡潔な記述でI2C通信ができました。




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

トップページに戻る。