工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

BMP180 I2C気圧センサー - Raspberry Pi統合ガイド

はじめに

Bosch BMP180は、I2Cで通信する高精度デジタル気圧センサーです。このガイドでは、Raspberry Piへの配線、I2Cバスの有効化、完成済みのPythonスクリプトで温度と気圧を読み取る方法を学びます。

モジュール概要

モジュールは5ピンヘッダーを備えたコンパクトな15×13mmのPCBです。ほとんどのモジュールは同じピン順ですが、接続前に基板のラベルを再確認してください。

ピンアウトと配線

以下のようにモジュールをPiのGPIOヘッダー(P1)に接続します。ブレッドボードセットアップ用のシンプルな図も含まれています。

モジュールPCB説明GPIOヘッダーピン
VCC3.3VP1-01
GNDグラウンドP1-06
SCLI2CクロックP1-05
SDAI2CデータP1-03

デバイスに電源を供給した状態でi2cdetect -y 1を実行すると、アドレス0x77が表示されるはずです。

I2Cバスの有効化

sudo raspi-configを実行し、インターフェースオプション → I2C → はいを選択して再起動することで、PiでI2Cを有効化します(デフォルトでは無効)。

Python例

以下のスクリプトは、センサーに格納されたキャリブレーションデータを取り込み、正確な結果を提供しながら、BMP180から温度(℃)と気圧(mbar)を読み取る方法を示します。

#!/usr/bin/python
import smbus
import time
from ctypes import c_short

DEVICE = 0x77  # デフォルトI2Cアドレス
bus = smbus.SMBus(1)  # Pi 2以降はバス1を使用

def convertToString(data):
    return str((data[1] + (256 * data[0])) / 1.2)

def getShort(data, index):
    return c_short((data[index] << 8) + data[index + 1]).value

def getUshort(data, index):
    return (data[index] << 8) + data[index + 1]

def readBmp180Id(addr=DEVICE):
    REG_ID = 0xD0
    chip_id, chip_version = bus.read_i2c_block_data(addr, REG_ID, 2)
    return chip_id, chip_version

def readBmp180(addr=DEVICE):
    REG_CALIB = 0xAA
    REG_MEAS = 0xF4
    REG_MSB = 0xF6
    REG_LSB = 0xF7
    CRV_TEMP = 0x2E
    CRV_PRES = 0x34
    OVERSAMPLE = 3

    cal = bus.read_i2c_block_data(addr, REG_CALIB, 22)
    AC1 = getShort(cal, 0)
    AC2 = getShort(cal, 2)
    AC3 = getShort(cal, 4)
    AC4 = getUshort(cal, 6)
    AC5 = getUshort(cal, 8)
    AC6 = getUshort(cal, 10)
    B1 = getShort(cal, 12)
    B2 = getShort(cal, 14)
    MB = getShort(cal, 16)
    MC = getShort(cal, 18)
    MD = getShort(cal, 20)

    bus.write_byte_data(addr, REG_MEAS, CRV_TEMP)
    time.sleep(0.005)
    msb, lsb = bus.read_i2c_block_data(addr, REG_MSB, 2)
    UT = (msb << 8) + lsb

    bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6))
    time.sleep(0.04)
    msb, lsb, xsb = bus.read_i2c_block_data(addr, REG_MSB, 3)
    UP = ((msb << 16) + (lsb << 8) + xsb) >> (8 - OVERSAMPLE)

    X1 = ((UT - AC6) * AC5) >> 15
    X2 = (MC << 11) / (X1 + MD)
    B5 = X1 + X2
    temperature = (B5 + 8) >> 4

    B6 = B5 - 4000
    B62 = (B6 * B6) >> 12
    X1 = (B2 * B62) >> 11
    X2 = (AC2 * B6) >> 11
    X3 = X1 + X2
    B3 = (((AC1 * 4 + X3) << OVERSAMPLE) + 2) >> 2
    X1 = AC3 * B6 >> 13
    X2 = (B1 * B62) >> 16
    X3 = X1 + X2
    B4 = (AC4 * (X3 + 32768)) >> 15
    B7 = (UP - B3) * (50000 >> OVERSAMPLE)
    P = (B7 * 2) / B4
    X1 = (P >> 8) * (P >> 8)
    X1 = (X1 * 3038) >> 16
    X2 = (-7357 * P) >> 16
    pressure = P + ((X1 + X2 + 3791) >> 4)

    return temperature / 10.0, pressure / 100.0

def main():
    chip_id, chip_version = readBmp180Id()
    print("Chip ID :", chip_id)
    print("Version :", chip_version)
    temperature, pressure = readBmp180()
    print("Temperature :", temperature, "C")
    print("Pressure :", pressure, "mbar")

if __name__ == "__main__":
    main()

ダウンロードと実行

スクリプトを直接Piに保存します:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py

実行可能にして実行します:

chmod +x bmp180.py
./bmp180.py

参考リソース

製造プロセス

  1. 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
  2. DS18B20ワンワイヤーデジタル温度計をRaspberry Piに接続 - ステップバイステップガイド
  3. Raspberry Piでリニアホールセンサーを読み取り: JavaガイドとADC0832の知見
  4. デジタル光センサー:Windows 10 IoT Coreで周囲光に応じてLEDを制御
  5. 圧電抵抗センサーの理解:圧力を精密な電子信号に変換
  6. Infineon、XENSIV DPS368発表:超小型高精度気圧センサー
  7. インフィニオン、業界トップクラスのデジタルターボMAPセンサーKP276を発表:エンジン効率向上へ
  8. デジタル磁気ホールセンサ:基礎、設計、自動車応用
  9. MAXREFDES220# - 光学センサーによるカフレス血圧モニタリング
  10. Bosch BMP390:スマートフォン/ウェアラブル/屋内ナビ向け50%高精度な高度センサ
  11. 高性能液体金属ウェアラブル圧力センサーで精密健康モニタリング