Arduino och HH10D fuktmätare
Postat: 22 mars 2013, 11:53:58
Sitter och testar en HH10D fuktsensor men får inga bra värden. Någon som har någon bra kod?
Jag använder denna kod:
Koden tycker att luftfuktigheten i rummet är 6-7% vilket inte känns rimligt. Det jag hittar som skiljer sig mot andras värden är kalibrationsvärdet sens som i mitt fall är 327, någon annan hade fått ett värde på 420 eller så. Borde vara detta som gör att min avläsning blir för låg?
Jag använder denna kod:
Kod: Markera allt
/*
* Read HH10D humidity sensor (http://www.sparkfun.com/products/10239)
* It contains a M24C02BN6 Eeprom with calibration values.
*
* Author: Patrik Hermansson, www.patrikhermansson.se
* Date: 110309
*
* Example calibration values:
* Sensitivity: 327
* Offset: 7499
*
* Connections:
* Vss - Gnd
* Vdd - +3.3V
* Fout - D5 (Mega168 pin 11)
* SDA - A4 (pin 27)
* SCL - A5 (pin 28)
*/
#include <Wire.h>
#include <FreqCounter.h> // http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
int rv = 0, offset;
float sens;
long int freq;
void setup() {
Wire.begin();
Serial.begin(38400);
Serial.println("Hi!");
readCalib(81,10);
sens = rv;
// Debug, test without I2C connection
//sens = 327;
Serial.print("Sensitivity: ");
Serial.println(sens);
readCalib(81,12);
offset=rv;
// Debug, test without I2C connection
//offset = 7499;
Serial.print("Offset: ");
Serial.println(offset);
delay(1000);
}
void loop() {
// Calculate frequency out from HH10D
FreqCounter::f_comp= 8; // Set compensation to 12
FreqCounter::start(1000); // Start counting with gatetime of 1000ms
while (FreqCounter::f_ready == 0) // wait until counter ready
freq=FreqCounter::f_freq; // read result
float RH = (offset-freq)*(sens/4096);
//int RH = (7499 - freq) * 0.09033203125;
Serial.print("Sens: ");
Serial.println(sens);
Serial.print("offset: ");
Serial.println(offset);
Serial.print("Humidity: ");
Serial.println(RH);
Serial.print("Freq: ");
Serial.println(freq);
Serial.print("offset-freq: ");
Serial.println(offset-freq);
Serial.print("sens/4096: ");
Serial.println(sens/4096);
Serial.print("offset-freq)*sens/4096: ");
Serial.println((offset-freq)*sens/4096);
delay(10000);
}
int readCalib( int deviceaddress, int calibAddress ) // deviceaddress is 1 according to datasheet
{
// Set address
Wire.beginTransmission(deviceaddress);
Wire.write(calibAddress);
Wire.endTransmission();
// Request return value
Wire.requestFrom(deviceaddress, 2);
// Collect return value
for (int c = 0; c < 2; c++ )
if (Wire.available()) rv = rv * 256 + Wire.read();
return rv;
}