HYT939 Temperatur / Luftfeuchtesensor am Arduino

HYT-939 Sensor auf Steckbrett
LEDs Blinken lassen, Tasten abfragen, ein einfaches Lauflicht. So in etwa sieht der typische Alltag eines Mikrocontroller-Neulings aus. Wenn man dann die ersten Hürden beim Einstieg in diese neue Welt genommen hat, taucht schnell der Wunsch nach einer sinnvolleren Anwendung auf. Hier bietet sich zum Beispiel an, eine kleine Wetterstation aufzubauen, oder zumindest das Raumklima zu überwachen.

Während bis vor einigen Jahren die hierzu nötige analoge Sensorauswertung nur sehr aufwändig umzusetzen war, hat natürlich auch hier die Miniaturisierung und die Digitaltechnik für eine elegante Lösung gesorgt. Verschiedene Hersteller bieten komplette Senorsysteme an, welche ohne zusätzliche Komponenten oder Kalibrierung direkt an einen Mikrocontroller angeschlossen werden können.

Für das hier gezeigte Beispiel habe ich den Sensor HYT939 von Hygrochip verwendet, ich habe ihn hier bei (Anzeige) HYT 939 bei www.reichelt.de erworben, hier finden sich auch weitere Informationen wie etwa das Datenblatt.

Nach etwas Recherche im Internet findet man ziemlich knapp beschriebene Datenblätter mit den benötigten Angaben. Demnach ist der Sensor eigentlich recht einfach anzusteuern.

Es gibt insgesamt nur 4 Bytes, welche man vom Baustein lesen kann. Diese enthalten zwei Binärzahlen, welche sich mit zwei einfachen Formeln direkt in anzeigbare Messwerte umwandeln lassen.

Mit dem Arduino-Framework ist auch das recht einfach umzusetzen, hierzu dient folgender kleiner Sketch (Download hier)

//HYT939 Beispiel Sketch

#define HYT939_ADDR 0x28
#define LED_PIN 13

#include <Wire.h>


void setup()
{
//I2C Interface initialisieren,

Wire.begin();
Serial.begin(9600);
Serial.println("HYT939 Beispielcode");
pinMode(LED_PIN,OUTPUT);
}

void loop()
{

//Skalierungsfaktoren laut Datenblatt
#define TFACTOR 99.2909
#define TDELTA 40.0
#define HFACTOR 163.83


unsigned int traw;
unsigned int hraw;

double temp;
double hum;
int i;
unsigned char buffer[4];

//Messung starten
Wire.beginTransmission(HYT939_ADDR); // transmit to device #44 (0x2c)
Wire.endTransmission(); // stop transmitting

//100ms warten
delay(100);


//4 Bytes vom Sensor lesen

Wire.requestFrom(HYT939_ADDR, 4,true);

i=0;

while(Wire.available()) {

char c = Wire.read(); // receive a byte as character

buffer[i]=c;

i++;

}

//Rohdaten aus Puffer lesen
traw=buffer[2]*256+buffer[3];
hraw=buffer[0]*256+buffer[1];

//Daten laut Datenblatt maskieren

traw&=0xfffc;
hraw&=0x3fff;


traw=traw/4;

/*
//Rohdaten ausgeben, zur eventuellen Fehlersuche
Serial.print("\r\nTemp Raw:");
Serial.println(traw);
Serial.print("Hum Raw:");
Serial.println(hraw);
*/

//Rohdaten Umrechnen
temp=(double)traw/TFACTOR;
temp=temp-TDELTA;

hum=(double)hraw/HFACTOR;

Serial.print("Temp:");
Serial.print(temp);
Serial.print(';');

Serial.print("Hum:");
Serial.println(hum);


//LED Blinken
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}


Die Wire-Bibliothek wird eingebunden und initialisiert, eine Begrüssungsmeldung wird auf der seriellen Konsole ausgegeben.

In der Hauptschleife des Programms wird der Sensor periodisch im Schreib-Modus angesteuert, und zwar ohne Daten. Dies löst einen Messvorgang im Sensor aus. Nach einer kurzen Wartezeit (Man könnte auch ein Statusbit abfragen, um das Ende des Messvorgangs zu erkennen), werden dann die 4 Bytes mit den beiden Messwerten für Temperatur und Luftfeuchte gelesen.

Diese Rohdaten werden nun entsprechend dem Datenblatt zurechtgeschnitten und mit den passenden Korrekturfaktoren skaliert. Die Messwerte werden dann einfach auf der seríellen Konsole ausgegeben, wo man sie dann mit einem PC weiterverarbeiten kann.


Messdaten graphisch dargestellt, Sensor angepustet...

Auf diesem Prinzip aufbauend habe ich mit Hilfe der frei erhältlichen Graphik-Bibliothek von www.dygraphs.com noch eine kleine Beispielanwendung realisiert, welche die aufgezeichneten Messdaten in graphisch ansprechender Form darstellt.

Anmerkung:

Dieser Code sollte auch für die Sensoren HYT221 und HYT271 ohne Änderungen funktionieren, diese Sensoren unterscheiden sich nur in der mechanischen Bauform sowie geringfügig in der Messgenauigkeit.

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1214376