온습도 센서 HT-01D arduino example

어디를 찾아봐도 아두이노 용으로 HT-01xx 온습도센서 예제 코드가 없어서,
간단한 코드를 만들어보았다.


I2C에 HT-01 센서를 잘 연결하고 아래처럼 읽을 수 있다.

(덧, 제조사께선 아두이노용 코드를 작성해 배포하면 센서가 훨씬 잘 팔릴것 같습니다. )

메뉴얼
http://www.micosnp.com/data/HT-01D-140403-DATASHEET.pdf
(http://www.micosnp.com/business/sensor2.php)


#include <Wire.h>


int _i2caddr = 0x28;

void setup() {
  const int mybaud = 9600;
  Serial.begin(mybaud);     // opens serial port, sets data rate to 9600 bps
  while (!Serial) ;  // wait for Arduino Serial Monitor

  //i2c init
  Wire.begin();
}

void loop() {
  // put your main code here, to run repeatedly:

  uint8_t buf[4] = {0x0};
  Wire.beginTransmission((uint8_t)_i2caddr);

  delay(3);//wait for measurement

  uint8_t read_now = 4;
  Wire.requestFrom((uint8_t)_i2caddr, read_now);

  for (int i = 0; i < read_now; i++) {
    buf[i] = Wire.read();
    Serial.print(buf[i], HEX);
    Serial.print(" ");
  }
  Wire.endTransmission();
  Serial.println();


  //Convert Humidity
  uint8_t Humidity_High = buf[0] & 0x3F;
  uint8_t Humidity_Low = buf[1];

  double Humidity = ((unsigned int)Humidity_High << 8) + Humidity_Low;
  Humidity = Humidity * 100 / 16384;
  Serial.print("Humidity ");
  Serial.println(Humidity);


  //Convert Temperature
  uint8_t Temp_high = buf[2];
  uint8_t Temp_low = buf[3];

  double Temp = ((unsigned int)Temp_high<<6) + (Temp_low>>2);
  Temp = Temp * 165 / 16384 - 40;
  Serial.print("Temp ");
  Serial.println(Temp);

  Serial.println("\n====");

  delay(2000);
}



그러면 아래처럼 나온다.





그런데, 왠지 습도값이 낮게 나오는데
손으로 잡으면 그럴듯 하게 올라가긴 했지만..
제대로 파싱한건지 걱정이 되니, 이 블로그를 참조하신 분들은 reference를 두고 확인하고 사용하시기 바랍니다.

실험에 쓰인 센서는 부품 모아놓은대에 적어도 5년은 뒀다가 꺼내서 쓰는거라, 이미 고장나있는것일 수도 있겠다..

댓글

이 블로그의 인기 게시물

공유기 2개 쓰는데 동일 네트워크 구성하기 ASUS 공유기 + iptime 공유기, LAN, WIFI 연결

OneDrive가 바꾼 문서, 사진, 바탕화면 기본 폴더 복구하기(레지스트리 사용안하고 복구)

갤럭시북 이온 노트북 소음 잡기