본문 바로가기
아두이노 센서

[센서/온습도센서] SHT30,SHT31,SHT35,SHT3X 로 온습도를 측정해보자

by 작동미학 2020. 7. 13.
반응형

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-DAdafruit 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

 

반응형