Go Down

Topic: DHT11 + LCD weather station (Read 5 times) previous topic - next topic


Hello, I am quite new to whole electronics and I have been given an assignment in school to do a project with arduino. I selected DHT11 sensor because it was cheap and reliable as I read on the Internet. I have no trouble with getting readings from DHT11 to Arduino software alone or hooking up LCD and displaying something on it. Trouble comes in when I try to display DHT11 readings on the LCD and get readings to computer at the same time. I´m sure this has been done before but I could not find anything on the Internet. Maybe someone of you could try and help me out a little bit?



Maybe someone of you could try and help me out a little bit?

Sure. Which way did you some in?

Seriously, you need to give us something more to go on than "Trouble comes in when I try to display DHT11 readings on the LCD and get readings to computer at the same time.". Something like what the trouble is would be extremely helpful.

Some code that causes the trouble will be necessary, too.


display DHT11 readings on the LCD and get readings to computer at the same time

How is the computer connected to the Arduino?
What software captures the data from Arduino?

If it is the serial monitor of the IDE a statement like Serial.println(reading); in the right place should be enough

BTW there are many DHT 11 sketches on this forum, you can search for them in the upper right corner but be patient as it is not that fast.

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)


May 27, 2012, 04:43 pm Last Edit: May 27, 2012, 05:08 pm by WiredMeUp Reason: 1
Hello and thank you for your fast replies.

I am using arduino uno board, potentiometer, lcd display and arduino connects to pc through usb port. For DHT11 readings I am using this code:
Code: [Select]

//   FILE:  dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino

//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;

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 8

void setup()
 Serial.println("DHT11 TEST PROGRAM ");
 Serial.print("LIBRARY VERSION: ");

void loop()

 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));


I have also wired up the default (at least the default that is in the examples of Arduino software to connect the LCD to arduino, which is:


May 27, 2012, 04:44 pm Last Edit: May 27, 2012, 05:07 pm by WiredMeUp Reason: 1
Code: [Select]

 LiquidCrystal Library - scrollDisplayLeft() and scrollDisplayRight()

Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD and uses the
scrollDisplayLeft() and scrollDisplayRight() methods to scroll
the text.

 The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.



// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
 // set up the LCD's number of columns and rows:
 lcd.begin(16, 2);
 // Print a message to the LCD.
 lcd.print("hello, world!");

void loop() {
 // scroll 13 positions (string length) to the left
 // to move it offscreen left:
 for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
   // scroll one position left:
   // wait a bit:

 // scroll 29 positions (string length + display length) to the right
 // to move it offscreen right:
 for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
   // scroll one position right:
   // wait a bit:
   // scroll 16 positions (display length + string length) to the left
   // to move it back to center:
 for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
   // scroll one position left:
   // wait a bit:
 // delay at the end of the full loop:


And for getting DHT11 reading on LCD I used:

//ver 19Jly10

//This is a re-written DHT11/ DHT22 reading code.
//DHT stuff in subroutines.

//See for more information....

//N.B. "bit" is used in the narrow, computer "1 or 0"
//   sense throughout.

//"DHT" from sensor's names: DHT11, DHT22.
//DHT aka Aosong AM2302, and there's an AM2303 which
//seems to be in the same family.

//Comments on this based on Aosong AM2302, aka DHT22, datasheet.
//Believed to generally apply to DHT11 as well, except in the
//case of the DHT11, I believe the second and fourth bytes are
//always zero.

//The code WORKS... the comments may not yet be EXACTLY right.
//See the web-page cited above for latest news.

//This code works with a DHT11 humidity/ temperature sensing module
//from nuelectronics.com, complied with ver 0018 of the Arduino environment
//Sensor attached to P4 (nuelectonics shield)/ analog 0, aka digital 14.

//That "module", according to the
//nuelectronics site, and visual inspection simply provides for easy
//connection of an Aosong DHT11 unit to the nuelectronics datalogging
//shield. Only 3 wires are involved: Vcc, ground, and a single data
//line. One of the DHT11's 4 pins goes nowhere.

//You should not need to change anything except the next line to use
//the software with the sensor on a different line, or for a DHT22.

//Just "huffing" on the sensor from deeply filled lungs should show
//a near instant rise in humidity

//#define dht_PIN 0      //no ; here. deprecate ADC0...
//even though we are using it as a digital pin.
//Other parts of code restrict us to using
//ADC0-5, aka D14-19
#define dht_dpin 14 //no ; here. Set equal to channel sensor is on,
//where if dht_dpin is 14, sensor is on digital line 14, aka analog 0

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

byte bGlobalErr; //for passing error code back from complex functions.
byte dht_dat[4]; //Array to hold the bytes sent from sensor.
int light_intensity = 0;
unsigned int flip = 0;

void setup(){
       //Blink LED to detect hangs
       pinMode(13, OUTPUT);
       // set up the LCD's number of columns and rows:
       lcd.begin(16, 2);
       lcd.print("hello, world!");
       InitDHT(); //Do what's necessary to prepare for reading DHT
       delay(300); //Let system settle
       //Serial.println("Humidity and temperature\n\n");
       delay(700); //Wait rest of 1000ms recommended delay before
       //accessing sensor
} //end "setup()"

void loop(){
       // set the cursor to column 0, line 1
       // (note: line 1 is the second row, since counting begins with 0):
       //lcd.setCursor(0, 1);
       // print the number of seconds since reset:
       if ( flip & 1 )
               digitalWrite(13, HIGH);
       } else {
               digitalWrite(13, LOW);

Go Up