Arduino Binary Clock (hours, minutes and seconds)

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 cronos_80@hotmail.com

#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