산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

BMP180 I2C 기압 센서 – 라즈베리 파이 연동 가이드

소개

보쉬(Bosch) BMP180은 I2C로 통신하는 고정밀 디지털 기압 센서입니다. 이 가이드에서는 라즈베리 파이에 연결하고 I2C 버스를 활성화하며, 즉시 실행 가능한 파이썬 스크립트로 온도와 기압을 읽는 방법을 배웁니다.

모듈 개요

모듈은 5핀 헤더가 있는 15×13mm의 컴팩트한 PCB입니다. 대부분의 모듈이 동일한 핀 순서를 따르지만, 연결 전 보드의 라벨을 다시 확인하세요.

핀아웃 및 배선

아래와 같이 모듈을 파이의 GPIO 헤더(P1)에 연결합니다. 브레드보드 설정용 간단한 다이어그램도 포함되어 있습니다.

모듈 PCB 설명 GPIO 헤더 핀
VCC3.3VP1-01
GND접지P1-06
SCLI2C 클럭P1-05
SDAI2C 데이터P1-03

장치에 전원을 공급한 상태에서 i2cdetect -y 1을 실행하면 주소 0x77이 표시되어야 합니다.

I2C 버스 활성화

파이에서 I2C를 활성화합니다(기본적으로 비활성화됨):

sudo raspi-config

Interface Options → I2C → Yes를 선택한 후 재부팅합니다.

파이썬 예제

다음 스크립트는 BMP180에서 온도(°C)와 기압(mbar)을 읽는 방법을 보여줍니다. 센서에 저장된 보정 데이터를 활용해 정확한 결과를 제공합니다.

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

DEVICE = 0x77  # 기본 I2C 주소
bus = smbus.SMBus(1)  # 파이 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()

다운로드 및 실행

스크립트를 파이에 직접 저장합니다:

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

실행 권한 부여 후 실행:

chmod +x bmp180.py
./bmp180.py

추가 자료

제조공정

  1. Infineon, 초소형 고정밀 기압 센서 XENSIV DPS368 공개
  2. Infineon, 업계 최고 디지털 터보 MAP 센서 KP276으로 엔진 효율 극대화
  3. 디지털 마그네틱 홀 센서: 원리, 설계, 자동차 애플리케이션
  4. MAXREFDES220#: 광학 센서로 커프리스 혈압 모니터링 구현
  5. 보쉬 BMP390: 스마트폰·웨어러블·실내 내비게이션용 50% 더 정확한 고도 센서
  6. 5달러 I2C 센서로 라즈베리 파이 온도 로거 만들기
  7. DS18B20 원와이어 디지털 온도계를 라즈베리 파이에 연결하기 – 단계별 가이드
  8. 라즈베리 파이로 리니어 홀 센서 읽기: 자바 가이드 & ADC0832 통찰
  9. 디지털 조도 센서 – 윈도우 10 IoT Core로 주변광에 따라 LED 제어하기
  10. 첨단 액체 금속 웨어러블 압력 센서로 정밀 건강 모니터링