Digitaler Feuchtesensor SHT1x

Vitalij Mast · 17 Oktober 2012

Der Feuchtesensor SHT1x von Sensirion ist ein kleiner und relativ leicht anzusteuernder IC, welcher auf einer kleinen Platine untergebracht ist. Zurzeit gibt es drei Versionen (SHT10, SHT11, SHT15) die sich lediglich in der Toleranz unterscheiden.
Ich habe mir einfach mal so ein Breakout-Board von Sparkfun besorgt und an meinen Arduino angeschlossen. Dies funktionierte auch ohne Probleme da der Chip 5V tolerant ist (empfohlen werden 3.3V).

Die Annahme, dass ich den IC ganz einfach über eine I2C/TWI Schnittstelle ansteuern kann, wie die Nachfolgereihe SHT2x, war leider falsch, sodass ich zuerst mal das 2-Wire Protokoll inspizieren musste. Das Protokoll ähnelt zwar dem des I2C/TWI ist jedoch nicht das selbe. Im Internet findet man schon fertige Bibliotheken. Diese blockieren jedoch den Mikrocontroller solange eine Messung stattfindet. Da mir das absolut nicht zusagte, da ich eventuell noch andere Sachen erledigen wollte habe ich kurzer Hand selbst eine kleine Bibliothek geschrieben um die Daten asynchron auslesen zu können. Zu finden ist diese in meinem github Repository.

Die Verwendung der Bibliothek ist ganze einfach, man muss nur den SHT1x-Ordner in den library-Ordner von der Arduino Software einfügen und kann direkt loslegen. Das Beispiel Projekt sieht wie folgt aus:

#include <SHT1x.h>
#define SHT_DATA 10
#define SHT_CLOCK 11
// Eine SHT1x Instanz erstellen um den Sensor auslesen zu können
// hier werden auch alle Initialisierungen für diesen durchgeführt
SHT1x sht1x(SHT_DATA, SHT_CLOCK);
void setup()
{
// Die ausgelesenen Daten werden über die Konsole ausgegeben
Serial.begin(38400);
}
void loop()
{
SHT1x::valType type; // Der aktuelle Sensortyp der ausgelesen wurde (vNone, vTemp oder vHumidity)
float humidity; // Der aktuelle Sensorwert wird hier ausgegeben
// Eine Messung durchführen und Sensor auslesen
// Asynchron, die Funktion führt abwechselnd Messungen für Temperatur und Feuchtigkeit durch
// Sobald das Ergebnis der aktuellen Messung vorhanden ist gibt die Funktion einen Wert
// größer 0 zurück. (0: Wert noch nicht verfügbar, <0:ein Fehler ist aufgetreten)
if (sht1x.getNextValue(humidity, type) > 0)
{
// Sobald der Feuchtigkeitswert ermittelt wurde wird dieser mit der letzten ermittelten
// Temperatur ausgegeben
if (type == SHT1x::vHumidity)
{
Serial.print("temperature: ");
Serial.print(sht1x.getLastTemp(), 2);
Serial.print("°C\tpressure: ");
Serial.print(humidity, 2);
Serial.println("%");
}
}
// hier können weitere Befehle getätigt werden ohne Wartzeit
// zB. weitere Sensoren ausgelesen werden
}

Was noch erwähnt werden muss ist, dass die Berechnung der Ist-Werte teilweise von der Spannung abhängig ist. In der Headerdateier SHT1x.h der Bibliothek befinden sich noch einige Macros die man gegebenfalls anpassen sollte. Wie zB das Macro SHT_SUPPLY_5, dieses sollte auf die Spannung geändert werden mit welcher ihr euer IC betreibt. Zur Verfügung stehen die Werte SHT_SUPPLY_5 (5V, standard), SHT_SUPPLY_4 (4V), SHT_SUPPLY_35 (3.5V), SHT_SUPPLY_3 (3V) oder SHT_SUPPLY_25 (2.5V).

Eventuell kann jemand diese Bibliothek gebrauchen. Ansonsten viel Spaß beim testen und messen.

Twitter, Facebook