Arduino och HH10D fuktmätare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Arduino och HH10D fuktmätare

Inlägg av PHermansson »

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:

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;
  }

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?
Användarvisningsbild
FormerMazda
Inlägg: 6446
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Arduino och HH10D fuktmätare

Inlägg av FormerMazda »

Inget bra svar på din fråga, men, jag köpte dessa:
http://viewitem.eim.ebay.se/DHT11-Digit ... 16232/item

Och tillsammans med detta lib: http://playground.arduino.cc/Main/DHT11Lib

Busenkelt och vad jag kunde se fungerade det bra.
Projektet har dock inte blivit av, men på testbänk under några timmar låg det rätt stadigt på typ 32%Rh
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino och HH10D fuktmätare

Inlägg av PHermansson »

Jo en sån har jag liggande också. Men jag har som avsikt att köra med två AA-batterier, blir lite låg spänning för DHT11an.
Användarvisningsbild
FormerMazda
Inlägg: 6446
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Arduino och HH10D fuktmätare

Inlägg av FormerMazda »

Ah! Ja, som sagt, jag tillförde nog inget. :wink:
Användarvisningsbild
swesysmgr
Inlägg: 14951
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Arduino och HH10D fuktmätare

Inlägg av swesysmgr »

Jag hade kollat på I2C-bussen och utfrekvensen från sensorn att de adresser som skickas och svaren som kommer verkligen är samma som mjukvaran ger i från sig i andra änden. Pullup för bussen antar jag sitter på din Arduino?
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino och HH10D fuktmätare

Inlägg av PHermansson »

Du menar att jag läser ut fel kalibreringsvärden?
Kollar på frekvensen ut från HH10D nu. Arduinoprogrammet säger ca 7419Hz, min DSO Nano säger samtidigt 7,42kHz. Så långt är det rätt i alla fall...
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino och HH10D fuktmätare

Inlägg av PHermansson »

Jag har visst missat pull-up för SCL och SDA men läst ut samma värden flera gånger. Hmm är ny på I2C :)
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino och HH10D fuktmätare

Inlägg av PHermansson »

Även om jag manuellt ökar värdet på sens till 500 så ökar inte resultatet nämnvärt. Hmm beräkningsfel ändå?
Användarvisningsbild
swesysmgr
Inlägg: 14951
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Arduino och HH10D fuktmätare

Inlägg av swesysmgr »

Ja för att avgöra om felet sitter i sensorns hårdvara eller om den skickar rätt värden på bussen som sedan blir manglade pga. konvertering eller fel byteordning i mjukvaran. Eller att fel adresser i eeprommet avläses eller att bussklockan inte är utanför vad det klarar.

Du borde snabbt och enkelt kunna se I2C-kommunikationen med ett digitaloscilloskop, Saleae eller Buspirate.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino och HH10D fuktmätare

Inlägg av PHermansson »

Hittade detta:
You can hence assume they're close to 7700 (Offset) & 340 (Sens.).

Så jag undrar ändå om det inte är min formel som är fel...
Skriv svar