Temperatur- und Feuchtigkeitsmessungen mit dem AVR Webserver
ArticleCategory: [Choose a category, do not translate
this]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or
http://homepage]
original in en Guido Socher
AboutTheAuthor:[A small biography about the author]
Guido likes Linux because it is a really good system to
develop your own hardware.
Abstract:[Here you write a little summary]
Der tuxgraphics AVR Webserver hat eine Menge generelle
IO Pins, an die externe Hardware wie Sensoren sehr leicht angeschlossen werden können.
In diesem Beispiel benutzen wir den sensirion sht11 Sensor zum
- Messen der Temperatur
- Messen der Feuchtigkeit
- Berechnen des Taupunktes
All das machen wir mit nur einem Sensor. Es werden keine weiteren Komponenten benötigt.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:[The article body]
Der sht11
Der sht11 von www.sensirion.com ist ein voll kalibrierter Sensor. Kein einziges externes Bauteil wird gebraucht, um ihn zusammen mit dem AVR Microcontroller zu benutzen.
Er hat:
- einen weiten Spannungsversorgungsbereich (2.5-5.5V)
- 2 Sensoren für die relative Feuchtigkeit und Temperatur
- Präzise Taupunktberechnung ist möglich
- Messungsbereich: 0-100% RH
- Absolute relative Feuchtigkeitsgenauigkeit: +/- 3% RH
- Temperaturgenauigkeit: +/- 0.4°C @ 25 °C
- digitale Ausgabe und vollkalibrierter Sensor.
Ein Datenblatt ist im Downloadabschnitt von diesem Artikel verfügbar oder von www.sensirion.com.
Es ist Sensor mit sehr guter Qualität, der in der Schweiz entwickelt wurde.
Ein paar Dinge sind etwas irreführend, wenn man das Datenblatt des Sensors liest und ich möchte sie hier erwähnen, um Überraschungen zu vermeiden:
- SHT11 hat eine zwei-Drahtschnittstelle und diese schnittstelle ist nicht identisch mit der atmel 2-Draht Schnittstelle (atmel TWI).
Atmel TWI ist eine I2C konforme Schnittstlle. Die sensirion Implementation
ist nicht I2C konform. DerHauptunterschied ist die Startbedingung.
Sensirion sagt nicht, warum sie nicht I"C konform sind. Meine persönliche Meinung ist, dass sie dies mit Absicht gemacht haben, um Lizenzdiskussionen mit Philips, die I2C entwickelt haben, zu vermeiden. Der Code, der gebraucht wird, um mit dem Sensor zu kommunizieren, ist nicht größer als der Code für eine atmel TWI ZUstandsmaschine (state machine). Deshalb macht es nciht wirklich etwas, dass SHT11 nicht I2C konform ist.
-
Der Sensor liefert eine Prüfsumme, um die Integrität der Messdaten zu gewährleisten.
Das C-code Beispiel von Sensirion benutzt dieses Feature nicht. Ich wollte es benutzen, und es hat mich einige Zeit gekostet, es zum Laufen zu kriegen. Da Problem ist, dass Sensirion keine Standard CRC8 Prüfsummen benutzt. Sie benutzene CRC8 mit den Bytes bit-umgedreht.
- Das Datenblatt spricht von mehreren Sekunden Antwortszeit und nennt dies schnell. Es wäre viel zu langsam für einen Webserver, der Daten zu der Zeit einer http-Anfrage liest. Man müßte die Messung im Hintergrund laufen lassen. Glücklicherweise scheint dies entweder die Antwortszeit zu Änderungen in der Umgebung zu sein oder sich auf eine ältere Sensorrevision zu beziehen. Die Sensoren, die ich gesehen habe, haben alle weniger alls 200msfür die Messungen gebraucht. sehr schnell..
Was man braucht
... und dies ist, was man bekommt:
Feuchtigkeits- und Temperaturdaten sind verfügnar vom jedem Webbrowser. Du kannst sie sogar für dein Handy verfügbar machen, wenn du deinen DSL Router entsprechend konfigurierst.
Was ist der Taupunkt?
Die Taupunkttemperatur ist die Temperatur, zu der die Luft soweot angekühlt ist, dass sie saturiert ist.Wenn die Temperatur auf den Taupunkt abgekühlt ist, können Nebel und Tau auftreten.
Beispiel: In deinem Badezimmer mißt du 23'C Und 61% Humidität (Feuchtigkeit). Der resultierende Taupunkt ist über 15'C. Wenn deine Fenster oder Wandtemperatur 15'C oder weniger betragen würden, dann würde es nass.
Den Sensor verbinden
Der SHT11 Feuchtigkeits- und Temperatursensor kann wie folgt mit dem Atmega Microcontroller verbunden werden. Es werden keine weiteren Bauteile benötigt.
An Pin 1 (oben) und die Pins rechts muß nichts angeschlossen werden. Sie scheinen für Tests und die Kalibration während der Produktion verwendet zu werden.
Du brauchst nur einen IO-Pin mehr pro weiterem Sensor, für den Fall, dass du mehr als einen Sensor anschließen willst.
Die sck Zeile kann geteilt werden, aber jeder sensor braucht seine eigene Datenzeile, da die Sensoren alle identisch sind und sonst nicht mit dem Bussystem verbunden werden können.
Das sensirion_protocol.c, das im Downloadabschnitt verfügbar ist, erwartet, dass der Sensor wie folgt angeschlossen ist:
SHT11 | Webserver board |
Vcc | 3.3V (available on the analog port) |
Data | PD1 (available on the digital IO port) |
SCK | PD0 (available on the digital IO port) |
GND | GND (available on the digital IO port) |
Man kann dies beliebig ändern. Editiere einfach die Definitionen am Anfang von
sensirion_protocol.c.
Der Code, um dies zu machen
Obwohl der Sensor nicht I2C konform ist, ist es trotzdem möglich, ihn mit einem AVR Mikorcontroller zu integrieren mit weniger als 1kb kompiliertem
C-code. Alles mit wirklich sehr kleinem Code: Messung, Einheitsumwandlung, Prüfsummenberechnung und Taupunktberechnungen.
Du kann den benötigten Code im Download-Abschnitt herunterladen. Er ist Teil des tar-archive des AVR Webservers. Im tar-archive findest du 3 Dateien: sensirion_protocol-NOcrc.c sensirion_protocol-crc.c und
sensirion_protocol.h, die für die Schnittstelle mit dem SHT11
Sensor verantwortlich sind.
sensirion_protocol-NOcrc.c ist ein kleines bißchen kleiner und führt keine
CRC8 Prüfsummenberechnungen durch. sensirion_protocol-crc.c benutzt CRC8. wenn der Sensor nahe beim Microcontroller ist (2-50 cm Kabel), ist es nicht nötig, die Daten gegen Beeinträchtigungen oder Übertragungsfehler zwischen dem Sensor und dem Mikrocontroller zu schützen. Du kannst dann die Datei ohne CRC8 Berechnungen benutzen.
Eine der beiden Dateien (sensirion_protocol-NOcrc.c oder sensirion_protocol-crc.c)
sollte auf den Namen sensirion_protocol.c kopiert werden und sensirion_protocol.c ist das, was dann durch das Makefile kompiliert wird.
Der tatsächliche Gebrauch des von sensirion_protocol.h zur Verfügung gestellten apis ist dann sehr einfach:
#include "sensirion_protocol.h"
unsigned int humival_raw,tempval_raw;
unsigned char error;
int temp, dew;
unsigned char rh;
//measure temperature
error=s_measure( &tempval_raw,0);
if (error==0){
error=s_measure( &humival_raw,1); //measure humidity
}
// measurement was OK (you could use error to detect if there
// is no sensor attached of if there is a CRC data integrity problem.
// We don't do this here to keep the example short).
if (error==0){
temp=calc_sth11_temp(tempval_raw); // calculate temperature
rh=rhcalc_int(humival_raw); // calculate relative humidity.
dew=calc_dewpoint(rh,temp); // calculate dew point temperature
}
//
// That's it. Now you have temperature in Celsius * 10 in temp (e.g 251 for
// 25.1'C), dew-point in dew and relative humidity (values 0-100 %) in rh.
Das obige Beispiel ist da für den Fall, dass du den Sensirion Sensor as Teil deiner eigenen Entwicklung verwenden willst. Wenn du den Sensor zusammen mit dem AVR Webserver von tuxgraphics benutzen willst, dann muß nichts geschrieben oder geändert werden. Benutze einfach das tar-archive aus dem Downloadabschnitt so wie es ist und folge der enthaltenen README.htm Datei.
Meien Anwendung
Es gibt sicherlich viele Anwendungen hierfür. Man kann es überall benutzen, wo man einen oder alle der Werte Temperatur, Taupunkt und Feuchtigkeit messen möchste.
Ich möchte hier nur erzählen, was mein Gebrauch dafür ist. Wenn ich in den Urlaub fahre, dann drehe ich normalerweise die Heizung im Haus ab, um Kosten zu sparen. Das Problem dabei ist, dass es entweder zu kalt oder zu feucht im Haus werden kann.Wenn du ein Fenster offen läßt, dann wird es vielleicht zu kalt. Wenn du das Fenster zu läßt, dann kann es sehr tropisch werden (=zu feucht) wegen der Blumen in den Räumen und fehlender Lüftung. Mit diesem Sensor kann ich die Situation beobachten und die Nachbarn bitten, ein Fenster für eine Weile zu öffnen, wenn es nötig ist.
Ich kann das jederzeit von meinem Handy oder einem Computer beobachten.
Viel Spaß und fröhliches Löten!
Referenzen