Arduino-Feuchtemessung

DHT11 / DHT22 szenzor

Das DHTxx-Modul enthält eine resistive Feuchtemesskomponente und eine NTC-Temperaturmesskomponente. Die Messungen werden von einem integrierten 8-Bit-Mikrocontroller durchgeführt, der einen kalibrierten digitalen Signalausgang liefert. Das Modul zeichnet sich durch hohe Zuverlässigkeit und hervorragende Langzeitstabilität aus. Der IC vom Typ AM2302 ist in den DHT22 integriert.

DHT11 gilt als "ultra" billig, anscheinend ist 11 "weniger" (siehe Vergleich unten).

Das DHTxx-Modul kann über eine einadrige serielle Schnittstelle mit einer maximalen Übertragungsentfernung von 20 Metern abgefragt werden. Der Sensor muss an einen digitalen Pin angeschlossen werden.

Feuchtemessmodule

Es gibt zwei Versionen von DHT 11/22 Modulen. Bei einem von ihnen wurden der Widerstand und der Kondensator, die zum Herstellen der Verbindung benötigt werden, integriert (z. B. 140C80, KY-015, ..), bei dem anderen Typ gibt es keine anderen Komponenten als den Sensor, sodass auch der Widerstand und der Kondensator getrennt sind. muss installiert sein (siehe Verkabelung).

KY-015 Feuchtemessmodul

Spezifikation

ParameterDHT11DHT22
Spannung3.3 ~ 5.5V DC
Signalübertragungsentfernungmaximal 20 m
Feuchtigkeitsmessbereich20 - 80% RH0 - 100% RH
Fehlergrenze für Feuchtemessung± 5%± 2 ~ 5%
Langzeitstabilität< ± 1% RH / Jahr
Temperaturmessbereich0 - 50 °C-40 - 125 °C
Fehlergrenze für Temperaturmessung± 2%± 0.5%
AuflösungFeuchtemessung 1% RH, Temperatur 1 ℃

Verdrahtung

DHT11 - Arduino Verdrahtung

Schema der obigen Verbindung:
Diagramm des DHT11-Sensormoduls

Software

Ich habe den Sensor mit einem Arduino Uno getestet. Der einfachste Weg, es einzurichten, ist die Installation des folgenden Verzeichnisses (Adafruit):

https://github.com/adafruit/DHT-sensor-library

Das Verzeichnis wird nicht kompiliert, ohne auf das unten stehende zusätzliche Verzeichnis zuzugreifen (dieses muss ebenfalls installiert sein):

https://github.com/adafruit/Adafruit_Sensor

Diese beiden Bibliotheken müssen also von Github aus installiert werden, dann muss der DHT-Tester über die ebenfalls hier installierten Beispielprogramme ausgeführt werden.

Das "gestrippte" Programm ohne die "Verzögerung" Funktion mit internem Timing (erfordert die obigen Verzeichnisse):

Software zeigen

Software zeigen

#include "DHT.h"
#define DHTPIN 2     // DHT22 pin
 
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
 
unsigned long actTime, oldTime = 0;
 
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  Serial.begin(115200);
  Serial.println("Start, wait..");
  dht.begin();
  delay(2000);
}
 
void loop() {
 
  actTime = millis();
  if (actTime - oldTime > 2000) {
    // time to DHT22 check
    oldTime = actTime;
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
    }
    float hic = dht.computeHeatIndex(t, h, false);
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.print(" *C ");
    Serial.print("Heat index: ");
    Serial.print(hic);
    Serial.println(" *C ");
  };
 
  delay(10);
 
}
SI7021 ModulSHT21 (GY-21) ModulSHT21 Modul
SI7021 ModulSHT21 (GY-21) ModulSHT21 Modul

Dies sind Feuchtigkeits- und Temperaturmessmodule:

  • auf die über die Kommunikation I²C zugegriffen werden kann
  • HTU21D IC ist integriert

Das Modul ist (im Prinzip) technisch identisch mit folgenden Modulen: HTU21D, SHT20, SHT21, HDC1080.

Technische Details

ParameterData
Spannung1.9 .. 3.6 V DC (3,3V empfohlen)
Standby Spannung60nA
Temperaturbereich-40 és 85 °C (-10 .. 60 °C empfohlen)
Temperaturgenauigkeit± 0,4 °C (-10 .. 85 °C)
Feuchtigkeit0-100% relative Luftfeuchtigkeit (20% - 80% relative Luftfeuchtigkeit)
Genauigkeit der Feuchtemessung± 3% relative Luftfeuchtigkeit (0-80% relative Luftfeuchtigkeit)
Temperaturumwandlungszeit7ms
Feuchtigkeitsumwandlungszeit17ms
KommunikationI²C
Fix I²C Address0x40
ÜberbrückungsentfernungEtwa 1 Meter für 100 Kbaud und 6-8 Meter für 10 Kbaud

Die winzige weiße Abdeckung des IC (falls vorhanden) ist ein Membranfilter aus Polytetrafluorethylen (PTFE).

Nach dem Anschließen der Kommunikation empfiehlt es sich, das Vorhandensein des Moduls mit dem Arduino I²C-Scannerprogramm zu testen.

Eine Zusammenfassung des Arduino I²C finden Sie hier: Arduino I²C.

  • Das Modul arbeitet mit 3,3-V-TTL-Logik. Für den Anschluss an die 5-V-Logik muss ein 10-kΩ-Widerstand verwendet werden.
  • Das Modul verfügt über integrierte 4,7-KΩ-Abisolierwiderstände für die I²C-Kommunikation. Wenn Sie andere Teilnehmer an das I²C anschließen möchten, muss dieser Widerstand gelötet werden (oder die anderen Teilnehmer benötigen sie nicht mehr).
  • Der Sensor muss vor physikalischen / chemischen Verunreinigungen geschützt werden, da diese die Genauigkeit der Messung stark beeinträchtigen.

Verdrahtung

SI7021 Verdrahtung

Software

Software Anzeigen

Software Anzeigen

// source: http://www.arduinoprojects.net/temperature-projects/arduino-si7021-i2c-humidity-temperature-sensor.php
#include <Wire.h>
 
const int ADDR =0x40;
int X0,X1,Y0,Y1,Y2,Y3;
double X,Y,X_out,Y_out1,Y_out2;
 
void setup()
{ 
  Serial.begin(9600);   
  Wire.begin();                                   
  delay(100);  
  Wire.beginTransmission(ADDR);
  Wire.endTransmission();                        
}
 
void loop()
{
  /**Send command of initiating temperature measurement**/
  Wire.beginTransmission(ADDR);
  Wire.write(0xE3);
  Wire.endTransmission();
 
  Serial.print("Temp");
  Serial.print("\t");
  Serial.println("Humidity");
 
  /**Read data of temperature**/
  Wire.requestFrom(ADDR,2);
 
  if(Wire.available()<=2);
  {
    X0 = Wire.read();
    X1 = Wire.read();
    X0 = X0<<8;
    X_out = X0+X1;
  }
 
  /**Calculate and display temperature**/
  X=(175.72*X_out)/65536;                        
  X=X-46.85;
  Serial.print(X);
  Serial.print("C");
  Serial.print("\t");
 
  /**Send command of initiating relative humidity measurement**/
  Wire.beginTransmission(ADDR);                     
  Wire.write(0xE5);
  Wire.endTransmission(); 
 
  /**Read data of relative humidity**/
  Wire.requestFrom(ADDR,2);
  if(Wire.available()<=2);
  {
    Y0 = Wire.read();
    Y2=Y0/100; 
    Y0=Y0%100;
    Y1 = Wire.read();
    Y_out1 = Y2*25600;
    Y_out2 = Y0*256+Y1;
  }
 
  /**Calculate and display relative humidity**/
  Y_out1 = (125*Y_out1)/65536;                     
  Y_out2 = (125*Y_out2)/65536;
  Y = Y_out1+Y_out2;
  Y=Y-6;
  Serial.print(Y);
  Serial.println("%");                     
 delay(300);
 
 
Serial.println(); 
delay(1000);
 
}