온습도 센서 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년은 뒀다가 꺼내서 쓰는거라, 이미 고장나있는것일 수도 있겠다..
간단한 코드를 만들어보았다.
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년은 뒀다가 꺼내서 쓰는거라, 이미 고장나있는것일 수도 있겠다..
댓글
댓글 쓰기