제조공정
BMP180 장치는 디지털 기압 센서입니다. 이것은 I2C 인터페이스를 통해 센서에 대한 액세스를 제공하는 소형 모듈에서 사용할 수 있습니다. 이를 통해 최소한의 배선으로 Raspberry Pi에 쉽게 연결할 수 있습니다.
내 모듈은 5핀 헤더가 있는 15x13mm 크기의 작은 PCB입니다. 핀의 순서는 다른 모듈에 따라 다를 수 있으므로 라벨을 주시하여 Pi에서 올바른 전선을 연결하십시오.
BMP180은 Bosch에서 제조했으며 공식 BMP180 데이터시트에는 모든 기술 세부정보가 포함되어 있습니다.
이 모듈을 사용하려면 기본적으로 활성화되어 있지 않은 Raspberry Pi에서 I2C 인터페이스를 활성화해야 합니다. 이것은 상당히 쉬운 과정이며 내 Raspberry Pi에서 I2C 인터페이스 활성화 자습서에 설명되어 있습니다.
아래 표는 모듈이 Raspberyr Pi의 GPIO 헤더(P1)에 연결되는 방법을 보여줍니다. 다이어그램은 제 GPIO 헤더 가이드를 참조하세요.
모듈 PCB | 설명 | GPIO 헤더 핀 |
---|---|---|
VCC | 3.3V | P1-01 |
GND | 그라운드 | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3.3V | – | – |
다음은 브레드보드 설정 다이어그램입니다. 모듈의 4개 핀을 Pi에 직접 연결하는 경우 4개의 암-암 와이어만 필요합니다.
브레드보드 다이어그램은 Fritzing에서 정의한 맞춤 부분을 사용합니다. 핀 배열이 다른 다른 모듈을 사용할 수 있으므로 이 튜토리얼에 표시된 것과 다른 경우 올바른 핀을 Pi에 연결했는지 확인하세요.
장치가 연결되고 Pi 전원이 켜진 상태에서 "i2cdetect" 명령은 주소가 0x77인 장치를 표시해야 합니다.
다음은 센서에서 압력 및 온도 데이터를 읽는 Python 스크립트의 예입니다.
<표 테두리 ="0"cellspacing ="0"의 cellpadding ="0">#!/usr/bin/python
가져오기
smbus
가져오기
시간
from
ctypes
가져오기
c_short
장치
=
0x77
# 기본 장치 I2C 주소
#bus =smbus.SMBus(0) # Rev 1 Pi는 0을 사용합니다.
버스
=
smbus.SMBus(
1
)
# Rev 2 Pi는 1을 사용합니다.
def
convertToString(데이터):
# 바이너리 데이터를 변환하는 간단한 함수
# 문자열
반환
str
((데이터[
1
]
+
(
256
*
데이터[
0
]))
/
1.2
)
def
getShort(데이터, 색인):
# 데이터에서 2바이트를 서명된 16비트 값으로 반환
반환
c_short((데이터[인덱스]<<
8
)
+
데이터[색인
+
1
]).값
def
getUshort(데이터, 색인):
# 데이터에서 2바이트를 부호 없는 16비트 값으로 반환
반환
(데이터[색인]<<
8
)
+
데이터[색인
+
1
]
def
readBmp180Id(addr
=
DEVICE):
# 등록 주소
REG_ID
=
0xD0
(chip_id, chip_version)
=
bus.read_i2c_block_data(addr, REG_ID,
2
)
반환
(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
# 오버샘플 설정
샘플 초과
=
3
# 0 - 3
# 보정 데이터 읽기
# EEPROM에서 교정 데이터 읽기
칼
=
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
+
(오버샘플 <<
6
))
time.sleep(
0.04
)
(msb, lsb, xsb)
=
bus.read_i2c_block_data(addr, REG_MSB,
3
)
UP
=
((msb <<
16
)
+
(lsb <<
8
)
+
xsb)>> (
8
-
샘플)
# 온도 조정
X1
=
((UT
-
AC6)
*
AC5)>>
15
X2
=
(MC <<
11
)
/
(X1
+
MD)
B5
=
X1
+
X2
온도
=
(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) <<오버샘플)
+
2
)>>
2
X1
=
AC3
*
B6>>
13
X2
=
(B1
*
B62)>>
16
X3
=
((X1
+
X2)
+
2
)>>
2
B4
=
(AC4
*
(X3
+
32768
))>>
15
B7
=
(UP
-
B3)
*
(
50000
>> 과샘플)
P
=
(B7
*
2
)
/
B4
X1
=
(P>>
8
)
*
(P>>
8
)
X1
=
(X1
*
3038
)>>
16
X2
=
(
-
7357
*
P)>>
16
압력
=
P
+
((X1
+
X2
+
3791
)>>
4
)
반환
(온도
/
10.0
,압력
/
100.0
)
def
메인():
(chip_id, chip_version)
=
readBmp180Id()
인쇄
"칩 ID :"
, chip_id
인쇄
"버전 :"
, chip_version
인쇄
(온도, 압력)
=
readBmp180()
인쇄
"온도:"
, 온도,
"C"
인쇄
"압력 :"
, 압력,
"mbar"
if
__이름__
=
=
"__main__"
:
메인()
다음 명령을 사용하여 이 스크립트를 Pi에 직접 다운로드하는 것이 좋습니다.
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
또는 브라우저에서 이 링크를 사용하십시오.
실행하려면 다음 명령을 사용할 수 있습니다.
자세한 내용:BMP180 I2C 디지털 기압 센서
제조공정
구성품 및 소모품 Arduino UNO × 1 Arduino MKR GSM 1400 × 1 압력 변환기(0-150psi) × 1 Adafruit DHT22 온도 및 습도 센서 × 1 DS3231 RTC 모듈 × 1 Adafruit 논리 레벨 변환기 - BSS138 - 4채널 I2C 안전 양방향 × 1 Adafruit 3.7V LiPo 배터리(2000mAh 이상) × 2 전압 승압 변환기 ×
기압 센서 정보, 날씨 측정은 일상 생활의 필수적인 측면입니다. 기술 발전 덕분에 기상 측정 장비는 이제 다양한 회로에 통합할 수 있을 만큼 충분히 작아졌습니다. 따라서 이 글에서는 좀 더 알고 싶은 분들을 위해 센서의 다양한 면을 살펴보도록 하겠습니다. 1. 기압 센서란 무엇입니까? 기압 센서는 대기압을 감지하는 센서입니다. 기압계의 현대적 형태라고도 합니다. 압력 센서 분류는 센서의 작동 방식과 재료에 따라 이루어집니다. 예를 들어, 압전 저항 공기압 센서는 실리콘 반도체를 사용합니다. 저항 브리지 회로를 연결하는 다