From ArduinoInfo
Jump to navigation Jump to search

PROJECT: Temperature and Humidity Display

This project will show air temperature in C and F, and % Humidity on an LCD display. The parts that make up this system are:

  • An Arduino
  • A DHT11 Humidity and Temperature Sensor (costs about $2.50 and uses only 1 Arduino pin)
  • An I2C interface LCD Display (About $18 and uses only 2 Arduino pins) NOTE: This examples uses the Version 1 Display shown on this page:Humidity-Temp-Display1-500.jpg
    • A Sensor Shield ($6.50) or Yourduino RoboRED has these connectors
    • Cables (free with Sensor/Display)
  • The Software Sketch below

There are related pages here:

  • [/TemperatureHumidity AIR Temperature and Humidity Measurements]
  • [/DHT11-Humidity-TempSensor Digital temperature and humidity sensor DHT11]
  • [/LCD-Blue-I2C LCD Display I2C Interface]




DHT-22 Humidity-Temperature Sensor

Here 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 right, DHT11 above).(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).

Software Sketch for Temperature and Humidity Display

/* Example Software Sketch
   DHT11 Humidity and Temperature Sensor test
   Displayed on I2C LCD Display
   Credits: Rob Tillaart */

/*-----( Import needed libraries )-----*/
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
dht11 DHT11;

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

void setup()   /*----( SETUP: RUNS ONCE )----*/
  Serial.begin(9600); //(Remove all 'Serial' commands if not needed)
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  // Print a message to the LCD.
  //lcd.setCursor(0, 1);
  lcd.print("DHT11 Temp/Humid");

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/

  int chk =;

  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;
  lcd.setCursor(0, 1);

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

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

  lcd.print("  H=");
  lcd.print((float)DHT11.humidity, 0);
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 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));

}/* --(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: 
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:
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. To use the library, unzip the file below into your SKETCHBOOKPATH\libraries.

Here is a .ZIP file available with these files for easier installation: