WIZwiki-W7500을 이용해서, 스위스의 Sensirion社(http://www.sensirion.com/)의 고정밀 온/습도센서인 SHT15의 값을 읽어 보았다.
<SHT-xx 시리즈 소개>
디지털 출력형 온/습도 센서인 SHT 시리즈는 생산 단계부터 완전히 온도 보정된 제품이며, 저가에 뛰어난 성능과 안정성을 제공한다. SHT시리즈는 디지털 CMOSsens기술을 이용하여, 하나의 칩에 온도센서와 습도센서를 집적화 시킨 제품이다. SHT시리즈는 마이크로프로세서의 GPIO를 이용하여, 데이터와 클럭라인을 생성하여 제어하는 방식이다.
- 한 개의 반도체 칩 위에 두개의 센서 : 상대 습도 & 온도 센서
- 온도 측정 범위 : -40 ~ +120도(max)
- 습도 측정 범위 : 0% ~+99.9% RH
- 보정된 디지털 출력
- 빠른 반응 속도 < 8 sec
- 저전력 소비 (typ. 30 uW)
- 낮은 가격
위 사진이 SHT-1x 시리즈는 SMD타입이고 SHT-7x 시리즈는 PIN타입이다. 그리고 별도의 전용 필터캡을 판매하고 있어서 고객들이 제품화 할때 기구적으로 편리하게 설계할수 있도록 배려하였다.
나는 SHT-15를 보유하고 있어서 SHT-15를 사용했다.
위 표를 보면 SHT-1x의 PIN 맵을 볼수 있다. VDD, GND 2개와 DATA 1개, SCK 1개로 구성되어 있고, 나머지 핀들은 모두 Not connect 이다.
위 사진은 Sensirion社의 공식 데이터시트에 나와있는 가장 기본적은 회로이다.
전원 입력의 범위는 2.4 ~ 5.5V를 지원하지만, 3.3V를 추천하고 VDD와 GND 사이에는 Decoupling CAP으로 100nP를 연결한다. DATA 라인에는 10K 풀업저항을 연결한다.
DATA와 SCK이 두 핀으로 통신하기되는데 기본적으로 I2C 통신방식을 사용하지만, 정식 I2C 방식이 아니기 때문에 I2C 페리를 사용할수가 없다. 그렇기 때문에 MCU의 GPIO를 이용해 DATA와 SCK 파형을 만들어서 통신을 해야한다. Sensirion社에서 공식적인 예제소스를 제공한다.
<회로 구성>
아래 사진과 같이 회로를 구성했다.Decoupling CAP은 그냥 빼버렸다. 전원 노이즈 제거용으로 Decoupling CAP이 사용이 됬는데 그냥 테스트를 할 용도이기 때문에 빼버렸다. 절대로 귀찮아서 그런건 아니다...
나는 DATA는 D2, SCK는 D3으로 연결을 했다.
아래 사진은 실제로 구성한 모습이다. SHT-15 그루브 모듈의 과거에..한 4년전?? 에 한번 만들어 봤던 모듈이다. 집에서 잡동사니를 넣어 놓았던 박스에서 겨우 찾아서 사용했다.
<mbed로 코딩하기>
WIZwiki-W7500은 ARM mbed에서 사용이 가능하기 때문에 mbed에서 코딩을 해보았다.
우선 mbed의 장점중에 하나인 많은 라이브러리 중에 SHT시리즈가 있는지 검색을 해보았다. 만약에 없으면..... 제조사에서 제공해주는 예제소스를 내가 직접 포팅을 해야한다. 그러면....굉장히 작업시간이 길어질텐데... 머리도 아파지고..피곤해진다..
뚜둥!!
역시 나의 기대를 져버리지 않고 SHT 라이브러리가 있다. 가장 Import가 많은 라이브러리르 선택했다. Roy van Dam이라는 사람이 만들어 놓은 라이브러리인데 참고마운 사람이다. Thank you!!
나중에 한번 말을 걸어봐야 겠다. 지금은 바쁘니깐 일단 패쓰!!
그리고 아주 친절하게 예제코드도 작성해서 공유를 해놓았다. 네덜란드 사람이던데 네덜란드 사람들은 참 친절한가 보다.
내가 작성한 예제 코드는 아래 URL에서 확인 할수있고 마음것 퍼가셔도 됩니다.
https://developer.mbed.org/users/nanjsk/code/SHT15_WIZwiki-W7500/
#include "mbed.h" #include "SHTx/sht15.hpp" Serial pc(USBTX, USBRX); DigitalOut busy(LED1); // I used D2 and D3 here but you // can use any other GPIO as well. SHTx::SHT15 sensor(D2, D3); int main() { pc.baud(115200); wait(0.5f); pc.printf("Hello WIZwiki-W7500!\n\r"); pc.printf("===========================================\n\r"); // Speed things up a bit. sensor.setOTPReload(false); sensor.setResolution(true); while(1) { busy = true; sensor.update(); busy = false; // Temperature in celcius sensor.setScale(false); pc.printf("Temperature [ %3.2f C ]\r\n", sensor.getTemperature()); // Temperature in fahrenheit sensor.setScale(true); pc.printf(" [ %3.2f F ]\r\n", sensor.getTemperature()); // Relative Humidity pc.printf("Humdity [ %3.2f %% ]\r\n", sensor.getHumidity()); pc.printf("===========================================\n\r"); wait(3); } }
덕분에 아주 간단하게 구현을 했다. 이 코드를 적용하는 것보다 이 글을 쓰는데 거의 90%의 시간이 든것 같다.
아래 사진은 시리얼로 온도 값과 습도 값을 출력하는 것을 캡쳐한 것이다.
이 다음에는 네트워크를 연결해서 NTP 프로토콜을 통해 시간을 받아와서 현재 시간과 함께 온/습도 값을 출력하는 예제를 작성하겠다.
'IT / Development > mbed & ARM' 카테고리의 다른 글
[mbed] 7 Segment를 이용한 네트워크 시계 (0) | 2016.03.02 |
---|---|
[mbed] WIZwiki-W7500으로 SHT15 온/습도센서값을 읽어 NTP를 이용해서 시간정보를 함께 표시해보자. (0) | 2015.08.27 |
[mbed] WIZwiki-W7500을 이용해서 Smart LED를 만들어보자. (0) | 2015.06.29 |
[mbed] WIZwiki-W7500으로 PIR motion sensor 값 받기. (0) | 2015.06.29 |
[mbed] WIZwiki-W7500으로 CDS센서 값 읽기. (0) | 2015.06.29 |