From ArduinoInfo
Jump to navigation Jump to search

AIR Temperature and Humidity Measurements

Note: Temperatures of many kinds and in different materials can be measured as shown here: [/Brick-Temperature-DS18B20 https://arduinoinfo.mywikis.net/wiki/Brick-Temperature-DS18B20]

See our[/PROJECT-Temp-Humidity-Display 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 Accuracy of the DHT22 is about 2% of Relative Humidity and 0.5% of Temperature. The DHT22 data sheet is HERE:
[/file/view/DHT22.pdf/556588503/DHT22.pdf DHT22.pdf]
[/file/view/DHT22.pdf/556588503/DHT22.pdf DHT22.pdf]
  • [/file/detail/DHT22.pdf Details]
  • [/file/view/DHT22.pdf/556588503/DHT22.pdf Download]
  • 374 KB

The AM2302 is a wired version of the DHT22. It's data sheet is HERE:
[/file/view/AM2302.pdf/556588915/AM2302.pdf AM2302.pdf]
[/file/view/AM2302.pdf/556588915/AM2302.pdf AM2302.pdf]
  • [/file/detail/AM2302.pdf Details]
  • [/file/view/AM2302.pdf/556588915/AM2302.pdf Download]
  • 570 KB
The maximum cable length is 30M and shielded cable is recommended.

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:


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.pngDHT11.zip