これを秋葉原で見つけたので買ってみた。
もともとVSTONEで間違えて買ったDHT11という温度湿度センサーでちょっと遊んでいたが、単線シリアルのよくわからないインターフェースだし、精度も良くないらしい。
その点、HDC1000とやらはTI製なのでなんとなく安心感がある。
最初は自力でコードを書いてみたがまともに動かず、Google先生に聞いてみたところ中国だがサンプルコードを見つけた。
このセンサーはI2C接続で、I2Cアドレスが秋月と違う以外はそのまま動いた。値を見る限り、湿度は問題なさそうだが温度は高めに出てる気がする。
もともとVSTONEで間違えて買ったDHT11という温度湿度センサーでちょっと遊んでいたが、単線シリアルのよくわからないインターフェースだし、精度も良くないらしい。
その点、HDC1000とやらはTI製なのでなんとなく安心感がある。
最初は自力でコードを書いてみたがまともに動かず、Google先生に聞いてみたところ中国だがサンプルコードを見つけた。
このセンサーはI2C接続で、I2Cアドレスが秋月と違う以外はそのまま動いた。値を見る限り、湿度は問題なさそうだが温度は高めに出てる気がする。
//Copy from http://will-123456.blogspot.jp/2014/12/hdc1000-arduino.html #include <Wire.h> #define addr 0x40 uint16_t readingT,readingH; void setup() { Wire.begin(); Serial.begin(9600); Serial.println("HDC1000 Test"); sethdc(); } void loop() { readhdc(); delay(1000); } void sethdc(){ Wire.beginTransmission(addr); Wire.write(0x02); Wire.write(0x10); //14 bit 14bit Wire.write(0x00); //14 bit 14bit Wire.endTransmission(); Wire.beginTransmission(addr); Wire.write(0x02); Wire.endTransmission(); Wire.requestFrom(addr, 2); if(2 <= Wire.available()) { readingT=0; readingT = Wire.read(); readingT = readingT << 8; Serial.print(" Config:"); Serial.println(readingT,BIN); } Wire.beginTransmission(addr); Wire.write(0xFB); Wire.endTransmission(); Wire.requestFrom(addr, 3); if(3 <= Wire.available()) { readingT=0; readingT = Wire.read(); readingT = readingT << 8; Serial.print(" ID:"); Serial.print(readingT,BIN); Serial.println( Wire.read(),BIN); } } void readhdc(){ Wire.beginTransmission(addr); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(20); Wire.requestFrom(addr, 4); if(4 <= Wire.available()) { readingT=0; readingH = 0; readingT = (Wire.read()<<8); readingT+=Wire.read(); readingH = (Wire.read()<<8); readingH+=Wire.read(); Serial.print(" Temp:"); Serial.print(readingT); Serial.print(" =>"); Serial.print(readingT/65536.0*165.0-40.0); Serial.print(" RH:"); Serial.print(readingH); Serial.print(" =>"); Serial.println(readingH/65536.0*100.0); } }
0 件のコメント:
コメントを投稿