AIR Temperature and Humidity Measurements

Note: Temperatures of many kinds and in different materials can be measured as shown here: http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

See our Temperature and Humidity Display Project.

Air is all around us and we feel it... Air is a mixture of gases including nitrogen, oxygen and water vapor. We often need or want to measure the Temperature of air and the Relative Humidity of air.

DHT11-HumidityTempVSG.jpgdht22.jpgHere we will show how to connect Arduino to an electronic sensor to make these measurements: The DHT11 ($2.50) and DHT22 ($10.00) are relative cheap sensors for measuring temperature and humidity. The DHT22 is similar to the DHT11 but has a greater accuracy and temperature range. (DHT22 shown on the left, DHT11 on right). (Available here)

The DHT11/22 has three lines, +5V ,a single Signal line, and GND. The connections are as shown on the right photo. NOTE: The third pin is unused. By means of a handshake the values are clocked out over the single signal line. The data formats are different but a library (below, by Rob Tillaart) makes these easy for you to use. More details and updates will be found on Rob's page on the Arduino Playground.

To use these sensors, you have to connect them to V (Arduino +5V), S (An Arduino I/O pin), and G (Arduino GND). For example, if you used Arduino pin 2 and connected a DHT11 sensor, you could run this test Software Sketch:
/* YourDuino.com Example Software Sketch
   DHT11 Humidity and Temperature Sensor test
   Credits: Rob Tillaart
   http://arduino-direct.com/sunshop/index.php?l=product_detail&p=162
   terry@yourduino.com */
   
/*-----( Import needed libraries )-----*/
#include <dht11.h>

/*-----( Declare objects )-----*/
dht11 DHT11;

/*-----( Declare Constants, Pin Numbers )-----*/
#define DHT11PIN 2

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Temperature (oF): ");
  Serial.println(Fahrenheit(DHT11.temperature), 2);

  Serial.print("Temperature (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(2000);
}/* --(end main loop )-- */

/*-----( Declare User-written Functions )-----*/
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
        return 1.8 * celsius + 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 A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-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;
}

/* ( THE END ) */





DETAILS: Before you can use an "Arduino Software Library", you must make it available by copying it into the correct "libraries" folder. From the playground pages mentioned above:

Notes


To use the library, unzip the file below into your SKETCHBOOKPATH\libraries.

Here is a .ZIP file available with these files for easier installation: external image zip.png DHT11.zip