0% found this document useful (0 votes)
23 views4 pages

Clock With Thermometer Using Arduino, I2c 16x2 LCD, DS1307 RTC and DHT11 Sensor. - Instructables

This document describes a project for building a clock with a thermometer using an Arduino, a 16x2 LCD with I2C, a DS1307 RTC, and a DHT11 sensor. It includes a list of required components, connection instructions, and a code snippet that combines various existing codes, although it notes an issue with displaying the weekday. The project is inspired by other online resources and provides links to necessary libraries for implementation.

Uploaded by

melchizedekche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views4 pages

Clock With Thermometer Using Arduino, I2c 16x2 LCD, DS1307 RTC and DHT11 Sensor. - Instructables

This document describes a project for building a clock with a thermometer using an Arduino, a 16x2 LCD with I2C, a DS1307 RTC, and a DHT11 sensor. It includes a list of required components, connection instructions, and a code snippet that combines various existing codes, although it notes an issue with displaying the weekday. The project is inspired by other online resources and provides links to necessary libraries for implementation.

Uploaded by

melchizedekche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Clock With Thermometer Using Arduino, I2c 16x2 Lcd, DS1307

RTC and DHT11 Sensor.


By Timofte Andrei in CircuitsArduino

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
[email protected]
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 ) */

____________________________________________________________________________________________________

You might also like