Masurarea temperaturii si umiditatii cu DHT11

In primul rand trebuie spus ca pe piata veti gasi o gama larga de senzori DHT11. De la senzor cu 4 picioruse in care trebuie sa puneti niste rezistente pe un breadboard, pana la senzor cu 3 pini, lipit pe o placuta cu rezistentele necesare. In acest tutorial vom folosi unul cu toate lipiturile deja facute.

Asadar inainte de a incepe aveti grija la pinii senzorului: + GND si S(sau data).

Specificatii:

  • Model: senzor DHT11
  • Gama de transmitere a semnalului: 20m
  • Domeniu de măsurare umiditate: 20 – 95% RH
  • Eroare de măsurare umiditate: + / -5%
  • Interval de măsurare a temperaturii: 0 – 50 ° C
  • Eroare de măsurare a temperaturii: + / -2 ° C
  • Tensiunea de operare: 3.3 – 5V
  • Tipul de ieșire:  ieșire digitală
  • Dimensiunea plăci mici PCB: 3.2 x 1.4cm
  • Greutate neta: 8g

Dupa ce l-am cablat si programat, termometrul de camera arata 21 C, iar senzorul arata pe seriala 23 C.  Deci este in regula, respecta specificatiile.

Daca nu il folositi in aplicatii unde masurarea temperaturii trebuie sa fie cat mai exacta, il recomand, caci este foarte usor de folosit si cablat. O varianta mai buna este DHT22.

Image

Image

 

Cod:

//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}

// fast integer version with rounding
//int Celcius2Fahrenheit(int celcius)
//{
// return (celsius * 18 + 5)/10 + 32;
//}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
return celsius + 273.15;
}

// dewPoint function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double RATIO = 373.15 / (273.15 + celsius); // RATIO was originally named A0, possibly confusing in Arduino context
double SUM = -7.90298 * (RATIO – 1);
SUM += 5.02808 * log10(RATIO);
SUM += -1.3816e-7 * (pow(10, (11.344 * (1 – 1/RATIO ))) – 1) ;
SUM += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO – 1))) – 1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM – 3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 – T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a – temp);
return Td;
}

#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2

void setup()
{
Serial.begin(9600);
Serial.println(“DHT11 TEST PROGRAM “);
Serial.print(“LIBRARY VERSION: “);
Serial.println(DHT11LIB_VERSION);
Serial.println();
}

void loop()
{
int chk = DHT11.read(DHT11PIN);
switch (chk)
{
case DHTLIB_OK:
//Serial.println(“OK”);
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println(“Eroare de Checksum”);
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println(“Eroare de Time out”);
break;
default:
Serial.println(“Eroare necunoscuta”);
break;
}

Serial.print(“Umiditate (%): “);
Serial.print((int)DHT11.humidity); //Serial.print((float)DHT11.humidity, 2);
Serial.write(” “);
Serial.print(“Temperatura (oC): “);
Serial.println((int)DHT11.temperature); //Serial.println((float)DHT11.temperature, 2); //cu zecimle
//Serial.write(” “);
//Serial.print(“Temperatura (oF): “);
//Serial.println(Fahrenheit(DHT11.temperature), 2);
/*
Serial.print(“Temperatura (K): “);
Serial.println(Kelvin(DHT11.temperature), 2);

Serial.print(“Dew Point (oC): “);
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

Serial.print(“Dew PointFast (oC): “);
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
*/
delay(1000);
}

Libraria si codul sursa pe care le-am folosit:  aici.

Tutorial avansat: aici. -> este in engleza, pentru eventuale informatii folositi formularul de contact de pe magazinul online ArduHobby.

 

Advertisements