Arduino Binary Clock (hours, minutes and seconds)

Summary of Arduino Binary Clock (hours, minutes and seconds)


This project describes building an Arduino-based binary clock that displays hours, minutes, and seconds using LEDs controlled by shift registers and a real-time clock module. The clock represents hours with 4 LEDs, minutes with 6 LEDs, and seconds with 6 LEDs. The design uses two 74HC595 shift registers to control 16 LEDs and an RTC DS1307 module for accurate timekeeping. The Arduino Uno runs the code to read time from the RTC and output the binary representation to the LEDs through shift registers.

Parts used in the Arduino Binary Clock:

  • Arduino Uno
  • RTC DS1307 module
  • 2 × 74HC595 shift registers
  • 16 LEDs
  • 16 × 330 ohm resistors
  • Breadboards
  • Jumper wires

Hello everyone; I was looking for this project for a long time.  Finally I it it together with a lot of effort.  For this project you will need:
Arduino Binary Clock

Major Components in Project
1-   Arduino Uno ($30 from Radio Shack)
2-   RTC DS1307 (like $2 from EBay)
3-   2 Shift Registers 74HC595 (like $1 eachh from Ebay)
4-   16 leds
5-   16 330 hom resistors
6-   Breadboards
7-   jumpers

The clock will display the hours using the first 4 leds, then the minutes using the next 6 leds and finally the seconds using the las 6 leds.

There is a better explanation from the original project here (as well as other cool projects): http://www.multiwingspan.co.uk/arduino.php?page=bclock

Step 1: The schematics

The schematics

Here is the design; mounted in two full breadboards! (Make sure you’ve got all the connections right, fail to to so will give you a few days of headache; it happened to me!)

Step 2: The code (from http://www.multiwingspan.co.uk by M Atkinson)

//orignal code made by M Atkinson, please check his website http://www.multiwingspan.co.uk
//few minor modifications made by [email protected]

#include <Wire.h>
#include “RTClib.h”

RTC_DS1307 RTC;
int datapin = 2;
int clockpin = 3;
int latchpin = 4;
int datapin2 = 8;
int clockpin2 = 9;
int latchpin2= 10;

void setup()
{
Serial.begin(57600);
Wire.begin();
RTC.begin();

if (! RTC.isrunning()) {
Serial.println(“RTC is NOT running!”);
// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(__DATE__, __TIME__));
}

pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(latchpin, OUTPUT);
pinMode(datapin2, OUTPUT);
pinMode(clockpin2, OUTPUT);
pinMode(latchpin2, OUTPUT);
}

void loop()
{

DateTime now = RTC.now();
// All used for checking the time of the clock
// This section can be removed when everything is working
Serial.print(now.hour(), DEC);
Serial.print(‘:’);
Serial.print(now.minute(), DEC);
Serial.print(‘:’);
Serial.print(now.second(), DEC);
Serial.println();
// End of section that can be removed

int mins = now.minute();
int secs = now.second();
int hr = now.hour();
// convert to 12 hour time
if (hr>12)
{
hr = hr-12;
}

// variables to describe pattern of on lights
byte data1 = 0;
byte data2 = 0;

// encode the time
// hr = 1st four bits controlled by the first shift register
for (int i =0;i<4;i++)
{
if (bitRead(hr,i)==1)
{
bitWrite(data1,3-i,1);
}
}
// mins on the first shift register (last 4 leds)
for (int i =2;i<6;i++)
{
if (bitRead(mins,i)==1)
{
bitWrite(data1,9-i,1);
}
}
// mins on the second shift register (first 2 leds)
for (int i =0;i<2;i++)
{
if (bitRead(mins,i)==1)
{
bitWrite(data2,1-i,1);
}
}
// seconds, controlled by the second shift register (all 6 leds)
for (int i =2;i<8;i++)
{
if (bitRead(secs,i-2)==1)
{
bitWrite(data2,9-i,1);
}
}
// output the information
writeByte(data1,1);
writeByte(data2,2);
// a pause every one second for the serial monitor output
delay(1000);

}

void writeByte(byte data, byte set)
{
int d,c,l;
if (set==1)
{
d = 2;
c = 3;
l = 4;
}
else if (set==2)
{
d = 8;
c = 9;
l = 10;
}
shiftOut(d, c, MSBFIRST, data);
// toggle the latch pin so that the data appears as an output
digitalWrite(l, HIGH);
digitalWrite(l, LOW);
}

 

For more detail: Arduino Binary Clock (hours, minutes and seconds)


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top