DHT-11, DHT-22, BME280 등 보다 좀더 정확도가 높은 SHT3X 센서를 사용해보자
▶ 이 가이드를 따라하면
- 온도에서는 0.3도 내외, 습도에서는 2%내외의 오차만을 가진다는 SHT3X 시리즈 센서의 사용법을 알고 값을 얻어낼 수 있다.
▶ 기존 읽어보면 좋을 강의
- DHT-22 : https://bbangpan.tistory.com/3
- BME280 : https://bbangpan.tistory.com/89
▶ 부품 설명 및 회로 구성
온습도는 해당 센서가 저가라서, 의외로 많은 아두이노 샘플에서 다뤄지는데, 이런 저가 센서 중에서는 현재 가장 정확도가 높다고 알려진 SHT3X를 다뤄보자. 2.5V~5.5V 전압에서 작동하며 온습도 측정 범위(-40도~120도 온도)도 상당히 넓다. I2C통신(SCL, SDA핀을 사용한다)을 하므로 핀도 4개면 충분하며 크기도 작다.
[SHT3X 센서, SHT31, SHT31-D라고도 불리는데 디지털이면 사용법은 같다. 오른쪽 4개 핀이 보인다]
[SHT3X 센서 뒷면 확대]
시중에는 SHT30, SHT31, SHT35 세가지 센서가 존재하는 숫자가 높아질수록 정확도가 올라간다. DHT-22나 BME280등은 온도 오차가 1도보다 큰데, SHT35는 스펙상의 오차는 0.1도 수준이다(대략 센서 종류별로 $2 ~ $8정도 한다). 더 세부적으로는 온도나 습도 범위 별로 오차가 조금씩 다른데, 세부 정보는 https://www.sensirion.com/kr/environmental-sensors/humidity-sensors/digital-humidity-sensors-for-various-applications/ 를 참조하자. 필자가 보기에는 SHT31-D가 가성비가 제일 좋다.
센서명 |
온도 오차 |
습도 오차 |
비고 |
DHT-11 |
±2 °C |
±5 % |
0°C~50°C |
DHT-22 |
±0.5 °C |
±2 % |
-40°C~80°C |
BME280 |
±1 °C |
±3 % |
-40°C~85°C |
SHT30-D |
±0.3 °C |
±3 % |
-40°C~120°C |
SHT31-D |
±0.2 °C |
±2 % |
-40°C~120°C |
SHT35-D |
±0.1 °C |
±1.5 % |
-40°C~120°C |
[센서별 정확도 대략 비교, 여기서는 SHT31-D를 실험했다]
연결 배선은 간단하여 아래와 같이 연결하면 된다(VIN->5V, GND->GND, SCL->SCL, SAA/RH->SDA)
[VIN->5V, GND->GND, SCL->SCL, SAA/RH->SDA 로 연결한다]
잘 알려져있다시피 SCL, SDA는 각각 아날로그 핀 쪽의 A5(SCL), A4(SDA)에 꼽아도 작동한다. 여기서는 아두이노 우노 보드의 디지털 핀쪽 상단에 있는 두개의 핀을 사용했다.
관련해서는 여러가지 라이브러리가 있는데, 신뢰도에 있어서 믿음이 가는 Adafruit SHT31-D를 선택했다. 주의를 해야할 것은 I2C를 위한 라이브러리도 필요해서 Adafruit SHT31-D와 Adafruit BusIO 두개를 다운받자. 아두이노 스케치의 라이브러리 다운로드 기능을 사용해도 되고 직접 파일을 다운로드 받아 라이브러리 폴더에 풀어도 된다. Adafruit의 공식 기술 설명은 https://learn.adafruit.com/adafruit-sht31-d-temperature-and-humidity-sensor-breakout 를 참조할 수 있다.
[Adafruit BusIO를 검색하여 설치한다]
[Adafruit SHT31을 검색하여 설치한다. 검색한 후 오른쪽의 설치버튼을 누르고 나서 설치하면 위 화면처럼 나온다]
설치가 끝나면 간단히 Adafruit SHT31 라이브러리의 test샘플을 구동하면 된다. 컴파일해서 업로드하자. 시리얼 모니터는 설정한 속도와 잘 맞춰준다. 아래에서는 편의목적으로 Serial.begin(115200)으로 변경하여 처리하였다(원 소스에서는 9600이다.)
[SHT31test 샘플 구동]
아래와 같이 잘 결과가 나오는 것을 알 수 있다. 간단하게 센서에 입김을 불어넣으면 온도와 습도가 올라간다.
[시리얼 모니터로 온습도 측정 결과를 관측한다]
해당 소스의 온습도 가져오는 코드를 잘 활용하여 응용할 수 있다. 특이한 것은 Heater모드로 설명하는 습기를 증발시키는 목적으로 사용한다고 한다.
아래 위 adafruit 라이브러리를 사용했을 때 주로 사용할 코드를 나열해본다.
Sht31.begin(0x44); // 0x44 주소의 해당 센서와 통신개시 선언
// sht31.heater(True) // 히터를 켜고 끌 때 사용
// sht31.isHeaterEnabled() // 히터 상태를 가져올 때 사용
float t = sht31.readTemperature(); // 온도를 가져온다
float h = sht31.readHumidity(); // 습도를 가져온다
관련 습기가 끼어있을 가능성이 있다면, 주기적으로 Enable하여 쓸 수도 있을 것 같다(대략 필요시는 몇분은 해야하지 않을까 싶은데, 상기 예제에서는 약 30초간 켜고 끄고 다른 예제에서는 몇초간 켜는 등, 짧게만 활용하는 것을 볼 수 있었다) Enable하면 온도가 조금 올라간다. 실내에서는 불필요하지 않을까 판단된다.
AL/AD 핀은 별도 연결하여 실험해보지 않았는데, adafruit사이트에 따르면 AD는 VCC에 연결하면 I2C 주소를 0x45로 바꿔주고, AL은 특정 이벤트 도달시 interrupt를 발생시켜 주는 핀이라고 한다.
▶ 구매 가이드
SHT3X : https://www.aliexpress.com/af/sht31%25252dD.html?d=y&origin=n&SearchText=sht31-D&catId=0&initiative_id=SB_20200712075302 ($3전후)
▶ 강의 키워드
SHT30, SHT31, SHT35, SHT30-D, SHT31-D, SHT35-D, SHT3X, GY-SHT31-D, GY-SHT31-D, GY-SHT35-D, 온습도 센서, humidity, temperature
'아두이노 센서' 카테고리의 다른 글
[센서/마이크증폭센서] 민감도가 자동 조절되는MAX9814 AGC센서 (0) | 2020.07.25 |
---|---|
[센서/UV디지털센서] VEML6075 자외선 센서, UVA/UVB/UV index 측정 (0) | 2020.07.21 |
[센서/소리감지센서] FC-04, 소리 검출 센서, 사운드 센서로 소리 발생 유무를 탐지 (0) | 2020.07.16 |
[센서/레이저 장애물 센서] Waveshare laser sensor , 레이저 장애물 센서 (0) | 2020.07.15 |
[센서/먼지센서] PM7003 plantower 먼지센서 (0) | 2020.07.11 |
[센서/VL53L0X] 레이저 기반의 거리 센서 (0) | 2017.06.09 |
[센서/BME280] 습도, 온도, 기압, 고도 통합 센서 (2) | 2017.06.08 |
[센서/조도,움직임] GY-9960LLC, APDS-9960 RGB and gesture sensor, 조도 및 움직임 센서 (0) | 2017.06.08 |
[센서/컬러센서] TCS34725 센서를 통해 RGB 값을 읽어보자 (6) | 2017.02.12 |
[센서/전압측정] 전압 센서(Voltage Sensor)를 통해 전압을 측정하자 (4) | 2016.05.06 |