Portable Arduino Uno Temperature and Humidity Sensor With LCD Screen

5,288

37

17

Posted in TechnologyArduino

Introduction: Portable Arduino Uno Temperature and Humidity Sensor With LCD Screen

About: Guy in his 30's who has always had an interest in building things since a kid. I build hardware durning the summer and software durning the winter. I know a lot about a little and a little about a lot. The w...

Hey everybody. I have gotten a lot of great ideas from instructables over the years. As this is my first 'ible, I figure I would share something I made as well. I am entering this into the Full Spectrum Laser Contest 2016. If I were to win, I would be able to 3d print a case for this project and use the laser engraver to etch an awesome design into the case. If you enjoy this 'ible, please vote for me.

In this Instructable, I am going to show you how I made a temp and humidity sensor with an Arduino Uno. My end goal is to make one with an Attiny84 and etch a PCB for it. While I do have the parts and pieces to do this, the weather outside is not cooperating. It is hard to etch a board in my garage at less than 10 degrees Fahrenheit. That will be a different instructable for a later date.

Without further delay, here is my instructable. Thanks again for taking time to read my project.

Step 1: Parts BOM

To start out, the following is required for this project:

All parts can be purchased at sparkfun or adafruit. Or you can do as I do and salvage as much as you can from old devices.

  • Arduino (I used an UNO R3, but 5V any will work)
  • Breadboard
  • DHT11 temperature and humidity sensor
  • 10k ohm potentiometer
  • 16x2 LCD screen
  • tactile button
  • USB A-B cable
  • Power Bank
  • Jumper Wires

Step 2: Building the Circuit

Now it is time to attach all the wires to the devices. Please refer to the Fritzing schematic (please note I do not have jumper wires between the two power rails on the breadboard. you will need them if you use both):


The LCD display I am using was recovered from an old fire alarm annunciator panel. Pins 15 & 16 are located before Pin 1 and instead of Pin 16 being Gnd, it is actually 5v and Pin 15 is Gnd. Please double check your own display and make sure your pins are correct. As my display pinout is most likely different from almost everybody else, I have made the Fritzing schematic with the "standard" display instead of my exact pinout.

Uno

Gnd --> negative rail on breadboard

5v --> positive rail on breadboard

DTH11

Pin1 --> 5v and 10k ohm resistor

Pin2 --> Arduino Pin8 and 10k ohm resistor

Pin3 --> no connection

Pin4 --> Gnd

16x2 LCD Screen

Pin1 --> Gnd

Pin2 --> 5v

Pin3 --> 10k ohm potentiometer wiper pin ( middle pin. the other two pins on the POT go to 5v and Gnd)

Pin4 --> Arduino Pin12

Pin5 --> Gnd

Pin6 --> Arduino Pin11

Pin7 --> no connection

Pin8 --> no connection

Pin9 --> no connection

Pin10 --> no connection

Pin11 --> Arduino Pin5

Pin12 --> Arduino Pin4

Pin13 --> Arduino Pin3

Pin14 --> Arduino Pin2

Pin15 --> 5v

Pin16 --> Tactile button (other side of tack button goes to Gnd)

Step 3: The Code

Below is the code:

I used the DHT library from Adafruit.

https://github.com/adafruit/DHT-sensor-library

--CODE--

// include the library code:
#include "DHT.h"

// set the DHT Pin #define DHTPIN 8

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

dht.begin();

// Print a message to the LCD.

lcd.print("Temp: Humidity:"); }

void loop() {

delay(500);

// set the cursor to column 0, line 1

// (note: line 1 is the second row, since counting begins with 0):

lcd.setCursor(0, 1);

// read humidity

float h = dht.readHumidity();

//read temperature in Fahrenheit

float f = dht.readTemperature(true);

if (isnan(h) || isnan(f)) {

lcd.print("ERROR");

return;

}

lcd.print(f);
lcd.setCursor(2,1);

lcd.print(char(223));

lcd.setCursor(3,1);

lcd.print(" F");

lcd.setCursor(7,1);

lcd.print(h);

lcd.setCursor(9,1);
lcd.print(char(37));

}

--CODE--

Step 4: Finished!

After all of the wiring, plug your power bank to the Arduino.

Your LCD display and DHT11 should start up. Press the tact button and your LCD backlight should light up.

Now you have a portable temperature and humidity sensor with a real time display.

This has helped me determine my draftiest windows in my house and how best to set my house ventilation.

Thanks again for taking the time to read my first instructable.

UPDATE #1

Thanks to Waggabob, the LCD display has been updated to display the degree symbol. I also added the % symbol to the humidity. (see last picture for updated display)

2 People Made This Project!

Recommendations

  • Science of Cooking

    Science of Cooking
  • Pocket-Sized Contest

    Pocket-Sized Contest
  • Spotless Contest

    Spotless Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

17 Comments

A.This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Uno"

sketch_dec03a:39: error: 'dht11' does not name a type

sketch_dec03a.ino: In function 'void setup()':

sketch_dec03a:46: error: 'DHT11LIB_VERSION' was not declared in this scope

sketch_dec03a.ino: In function 'void loop()':

sketch_dec03a:52: error: 'DHT11' was not declared in this scope

3 replies

Did you install the DHT library from adafruit?

Yes. I installed it. Is it because of my windows? it is win 10.

I don't think so. I have used Win 7,8,8.1 and 10 as well as MacOS and Linux. Double check your installation location. I have noticed that the Arduino IDE looks for the libs in various places. Most likely either C:\Arduino and/or C:\Users\[username]\Documents\Arduino (or something like that.

I have had that problem but was able to fix it by checking the IDE preferences for the location that it is looking for libraries in

when I try to verify then upload I get this message please help I am very new to this stuff.

( C:\Users\Dans\Desktop\ARDUINO STARTERKITS\code\DHT11_interface_with_arduino_and_lcd\DHT11_interface_with_arduino_and_lcd.ino:46:19: fatal error: DHT11.h: No such file or directory

#include <DHT11.h>

^

compilation terminated.

exit status 1

Error compiling for board Arduino/Genuino Uno.)

1 reply

when I try to download it, I get the error

exit status 1

'LiquidCrystal' does not name a type.

The code doesnt work. Here is the error code

LCD_DHT11:11: error: 'DHT' does not name a type

DHT dht(DHTPIN, DHTTYPE);

^

/Users/masteruser/Downloads/LCD_DHT11/LCD_DHT11.ino: In function 'void setup()':

LCD_DHT11:16: error: expected unqualified-id before '.' token

dht.begin();

^

/Users/masteruser/Downloads/LCD_DHT11/LCD_DHT11.ino: In function 'void loop()':

LCD_DHT11:28: error: expected primary-expression before '.' token

int h = dht.readHumidity();

^

LCD_DHT11:30: error: expected primary-expression before '.' token

int f = dht.readTemperature(true);

^

exit status 1

'DHT' does not name a type

3 replies

Hey muhammet resule. Thanks for checking out my 'ible.

Did you install Adafruit's DHT library? That is what I used and the only one I could make work. Make sure you have the DHT library installed and everything should work well.

yes i already installed the library, this is the error code after i install the library...

Ok. First, where did you install your library? If using windows, there usually ends up being a library folder in the C:\Arduino\ path and the ~Documents\Arduino path. Make sure it is installed correctly. I am on a mac now and have only one location but also have a Win 10 pc that always gives me a twist when installing a library.

Second, did you copy the code from the page or download the .ino file?

Can you post your code?

Very nice Instructable! Thanks for sharing!

These projects are a great way to start with Arduinos! Can I make 2 suggestions. Firstly if you can get a DHT22 sensor they have better accuracy for not much more cost. Second, you can include the "degrees" symbol like this:

lcd.print((char)223);

That makes it look nicer on the screen.

1 reply

Thanks WaggaBob. I made the changes and it looks a lot better. I did update the instructable. I agree with the DHT22. I am using a DHT11 because I was gifted 10 of them. For what I have been using this for, 1-2 degrees is rounding error.

This is great! Thanks for sharing you project! Welcome to the community!