Introduction: Digital Clock With Arduino, RTC and Shift Register 74HC595
Hello, everybody!
This is my project of a digital clock with RTC (Real Time Clock) using a LED display of 4 digits and 7 segments including interesting features of temperature and humidity. In the control of display I have used an Arduino Uno R3 and 02 ICs of 74HC595 (8 bit shift register with output latches).
The use of shift register is important to save output ports of Arduino. You only need 3 outputs to control the display. With it you transfer serial data into 8 parallel outputs.
There are two breakouts: one for the sensor of temperature (ºC - Celsius / ºF - Fahrenheit degrees) and humidity (% - in percentage) and another one for the RTC.
The assembly is very simple and you just need take care with the wiring. Be patient, follow the schematics and enjoy it.
Step 1: Material
Material list:
- 01 x DS1307 (Real Time Clock)
- 01 x DHT11 (Temperature and Humidity sensor)
- 02 x 74HC595 (8 bit shift register with output latches - 3 state)
- 08 x Resistors of 150 Ohms (Brown, Green, Brown)
- 01 x FYQ-5642BX (Common Anode LED Display 04 digits and 07 segments or equivalent but take care with the pins numbers)
- 01 x Arduino Uno
- 01 x Breadboard
- 01 x Kit of jumpers
Step 2: Assembly
The assembly of components is very simple but you need to follow the schematics with care due to the wire connections. There are 2 shift registers in this project: one to control each segment of the display and another one to control what is the display on.
Important:
If you want to use another kind of LED display, you need to check its datasheet in order to update the output wiring (jumpers) of 74HC595 and also you must update the corresponding logics of Arduino's software.
Step 3: Programming
To run the program on Arduino you need to have the following libraries:
- Time (library for date & time)
- DS130RTC(library for the Real Time Clock)
- Wire (library used to support the RTC)
DHT_Sensor_Libray (Adafruit's library for DHT sensor of Temperature and Humidity)
For the numbering (0 to 9), I have created a table with binary representation of each segment (A to G) that forms the digit as following:
- B01111110 - 0
- B00110000 - 1
- B01101101 - 2
- B01111001 - 3
- B00110011 - 4
- B01011011 - 5
- B01011111 - 6
- B01110000 - 7
- B01111111 - 8
- B01111011 - 9
To show in the LED display the data in sequence of time, temperature and humidity, I have used a "timer" with functions millis() and while().
In this case, each information is presented on the display and after 3 seconds moves to the next one.
Simple and very efficient.
You can apply this function millis() in several different ways to manage the time during the program running.
In many situations you can use it in the place of some timer library.
Another usefull function is digitalWrite(). With this function you can simplify the writting of data into the shift registers.
Take a look on it in the Arduino's home page at http://arduino.cc/en/Reference/DigitalWrite
- How to setup the time of internal clock of RTC module:
1. To update or setup the time of RTC module, load and run the program "SetTime " (you can find it on the library/example of DS1307RTC on Arduino IDE).
2. Reload and run again the program of "Digital Clock".
Following this procedure, the RTC module will keep the right time due its battery pack attached and you do not need to recompile the "Digital Clock" program every time you use it.