Introduction: Clock With Thermometer Using Arduino, I2c 16x2 Lcd, DS1307 RTC and DHT11 Sensor.
Hello! It's been a while I've didn't posted anything on Instructables, but now I made a simple project that I've seen on internet in various forms. I managed to build a code using other codes I've found on internet and I got to say it's working good.
For this project you need:
- Arduino Uno
- 16x2 LCD with i2c module
- DS1307 RTC
- DHT11 temperature and humidity sensor
- a bread board
- some wires for connections.
As you can see the RTC is homemade because I had a DS1307 chip and a battery extracted from an old german electronic cash registering device.
So the connections are very simple:
The RTC and the i2c LCD are connected to A4 pin (SDA) and A5(SCL) and DHT11 sensor is connected to D2 pin. DHT11 has 4 pins, but only 3 are actually used. First pin is Vcc, the second is for data and the forth pin is for ground. As I said, connect data pin of the sensor to D2 on Arduino.
Now, the hardest part: the code. !!!DOWNLOAD THE ORIGINAL SKETCH FROM HERE!!!
I've tried some sketches I've found on internet, but there were alot of errors caused by incompatible libraries and so on. I managed to build a code made from parts of other codes and it's working like a charm now. There is a single problem though. You can find in the sketch a bit of code for displaying first 3 letters of the week day, but for some reason it doesn't work. Instead of those letters it shows some unknown characters and it's pretty ugly. I suspect that is a problem caused by i2c communication because in standard connection (4bits) it works without problems.
My inspiration came from this page http://arduino-info.wikispaces.com/PROJECT-Temp-Humidity-Display, and this page http://www.ucontrolit.tv/184/
This is the library used for this project http://arduino-info.wikispaces.com/file/view/DHT11.zip/390039522/DHT11.zip and don't forget to use the new LCD library that can be found right here https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads (when you add this new library in the folder, delete the old LiquidCrystal folder!)
And this is a PREVIEW of the code:
________________________________________________________________________________________________
/* YourDuino.com Example Software Sketch
DHT11 Humidity and Temperature Sensor test
Displayed on I2C LCD Display
Credits: Rob Tillaart
http://arduino-info.wikispaces.com/PROJECT-Temp-Humidity-Display
terry@yourduino.com
Combined with:
Mark Johnson's code
http://uControlIt.tv
December 2012
License: GNU General Public License
Modiffied by Timofte Andrei ( http://timofteandreidiy.wordpress.com )
January 2014
*/
/*-----( Import needed libraries )-----*/
#include
#include
#include
#include
#include
//const char* zile[] =
// { "Lun", "Mar", "Mie", "Joi", "Vin", "Sam", "Dum"}; //days of the week in romanian (not used)
const char* luni[] =
{"Dec", "Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Noi" }; //months of the week also in romanian
byte termometru[8] = //icon for termometer
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
byte picatura[8] = //icon for water droplet
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
/*-----( Declare objects )-----*/
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Set the LCD I2C address
dht11 DHT11;
/*-----( Declare Constants, Pin Numbers )-----*/
#define DHT11PIN 2 //dht11 signal pin connected to D2
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Wire.begin();
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
lcd.backlight();
lcd.clear();
lcd.createChar(1,termometru);
lcd.createChar(2,picatura);
// part code from http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
// end part code from http://tronixstuff.wordpress.com/
setSyncProvider(RTC.get);
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
afisare_temperatura(); //displaying temperature
data_si_ora(); //displaying date and time
}
void afisare_temperatura()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(1, 1);
lcd.write(1);
lcd.setCursor(3, 1);
lcd.print((float)DHT11.temperature, 0);
lcd.setCursor(5, 1);
lcd.print((char)223); //degree sign
lcd.print("C");
lcd.setCursor(9, 1);
lcd.write(2);
lcd.setCursor(11, 1);
lcd.print((float)DHT11.humidity, 0);
lcd.print("%");
delay(2000);
}
void data_si_ora()
{
tmElements_t tm;
(RTC.read(tm));
lcd.setCursor(0, 0);
afisare2cifre(tm.Hour);
lcd.print(":");
afisare2cifre(tm.Minute);
lcd.setCursor(7,0);
afisare2cifre(tm.Day);
lcd.print(" ");
lcd.print(tm.Month[luni]);
lcd.print(" ");
lcd.print(tmYearToCalendar(tm.Year)-2000);
// lcd.setCursor(12,1); // this code is used for displaying day of the week
// lcd.print(tm.Wday[zile-2]); //it's disabled because for some reason it doesn't work on i2c display
}
void afisare2cifre(int numar) { //this adds a 0 before single digit numbers
if (numar >= 0 && numar < 10) {
lcd.write('0');
}
lcd.print(numar);
}
/* ( THE END ) */
____________________________________________________________________________________________________

Participated in the
123D Circuits Contest

Participated in the
Supercharged Contest
9 People Made This Project!
- marik2500 made it!
- marik2500 made it!
- AaronW100 made it!
- oschari made it!
- IsraelD3 made it!
- jhunmar100 made it!
- RenatoL1 made it!
- kantona80 made it!
- airfoil233 made it!
45 Comments
2 years ago
Can someone please tell me how to connect and read the DS1302 RTC module ?
I've tried to set it up, but i can't get any information from the RTC. Also something is displaying the wrong information instead of the date and time...
The two numbers displayed change with the Temp and RH...
Any help would be nice :)
Kind regards, Chris
4 years ago
termometru_dht11_cu_ceas:89: error: 'afisare_temperatura' was not declared in this scope
termometru_dht11_cu_ceas:90: error: 'data_si_ora' was not declared in this scope
C:\Users\Mártika\Desktop\termometru_dht11_cu_ceas\termometru_dht11_cu_ceas.ino: In function 'void data_si_ora()':
termometru_dht11_cu_ceas:123: error: 'afisare2cifre' was not declared in this scope
This is a very good instructable, but i am struggling with it for a week now.
I will not waste any time for it anymore.
5 years ago
Can you send me a schematic please?
6 years ago
Thanks! It was really helpful for me. To share some wiring there is a good tool - http://fritzing.org/home/
6 years ago
Where i plug RTC?????
7 years ago
For everyone of you who's going to use this project for himself: please learn basic electronics before crying out loud around because it's not my fault you don't have any idea of pull-up resistors, anti-parallel diodes and so on. The schematic is described in words just to see the amount of people which are understanding electronics or not. I know I have some issues with terms in english, but you have to start getting informations from elsewhere to understand a project. I know I'm rude in this comment, but if you don't start to understand what are you doing, you just waste your time and time is expensive, but you don't know that yet!
Reply 6 years ago
why on earth would you make an instructable with deliberate mistakes in it? whinging about people needing help, make the instructable correct and people wont ask questions, you dead set wanker.
Reply 6 years ago
I have one comment :
//months of the week also in romanian
basic nowledge ? ;D
6 years ago
Can i use DSI 1502 with the same code ?
6 years ago
Timofte, thanks for posting this project. Very helpful!
6 years ago
Hey, can i change the lcd with bluetooth module for controlling by android? Please for the respon
6 years ago
Hey i want complete code and diagram of this project because when i tried i got error please some one send me code and diagram at alakh.madhav32@gmail.com
6 years ago
I think will be nice if the " : " able to blink for each second, have any one already try and willing to share the sketch ?
7 years ago on Introduction
Cool!
7 years ago on Introduction
It is not works!!! I trying do this for six hours and I did nothing. Error and error and error. I regret that I bought parts, in Poland I spent 150 zloty`s its a lot of money in Poland.
Reply 7 years ago
https://www.dropbox.com/s/ycgh1sa88tqq8r8/termometru_dht11_cu_ceas.ino THIS IS THE CODE
Reply 7 years ago
Here's the schematic. It is described in the project text, but it's hard to read. I'm usualy not providing schematics just to see how people are handling this...
You really have to learn how electronic systems are working, otherwise you only waste your time.
Read the code to see what pins are used by each sensor/device. If it uses i2c bus, in arduino uno there are only 2 pins used: A4(SDA) and A5(SCL), with the coresponding 4.7K pull-up resistors. In my case the pull-up resistors are integrated in the RTC module. Do no copy-paste the code from the page because it's not going to work because of html issues of the page.
Reply 7 years ago on Introduction
can you give me electronic plan of this project?
8 years ago on Introduction
How to adjust correct time. Thanks
Reply 7 years ago on Introduction
please help!