Introduction: A Designers Clock
welcome to the adventure of clock making enjoy
Supplies
- Computer
- Jumper wires
- Breadboard
- Dupont wires
- Arduino Uno
- USB power cable
- LCD1602 module
- GY-521
- Power Box Battery Holder Box with Cable on
- batteries
- Arduino program
- rubber band
- scissors
- hot glue
- popsicle sticks
- drill
- hinge
- screws
Step 1: The Beginning
in the beginning:
- TinkerCad opened
- the design is made and remade to thy liking, add, take, and make your kind of clock book design (sunny design optional but optimum)
- then it is to be printed! get a 3d printer !!, if you can afford one, get a cardboard box, and cut squares from it to make a bookcase similar to the image, or to the design you created on Tinkercad, then use hot glue carefully, to glue the sides together. ( if you know how to use one be careful, If not get a parent or someone you know to help you)
- while you wait for it to be printed, or for the hot glue to dry, it is best to start the Arduino processing!!
Step 2: Arduino This
the Arduino process:
to go to Arduino (which is ) in the windows (bottom left) go to the A section (top) of the windows.
after reaching the given screen
go to the tools section and select Manage Libraries
to the search bar look for the following to download:
- Wire. h library for the I2C interface (included in Arduino IDE)
- LiquidCrystal_I2C.h library (by Frank de Brabander) for the I2C 16×2 LCD module (GitHub link)
- RTClib.h library (by Adafruit) for the DS3231 RTC module (GitHub link)
once finished go on to the next step
Step 3: Code This
now you put the following code:
/*
function to update RTC time using user input
*/
void updateRTC()
{
lcd.clear(); // clear LCD display
lcd.setCursor(0, 0);
lcd.print("Edit Mode...");
// ask user to enter new date and time
const char txt[6][15] = { "year [4-digit]", "month [1~12]", "day [1~31]",
"hours [0~23]", "minutes [0~59]", "seconds [0~59]"};
String str = "";
long newDate[6];
while (Serial.available()) {
Serial.read(); // clear serial buffer
}
for (int i = 0; i < 6; i++) {
Serial.print("Enter ");
Serial.print(txt[i]);
Serial.print(": ");
while (!Serial.available()) {
; // wait for user input
}
str = Serial.readString(); // read user input
newDate[i] = str.toInt(); // convert user input to number and save to array
Serial.println(newDate[i]); // show user input
}
// update RTC
rtc.adjust(DateTime(newDate[0], newDate[1], newDate[2], newDate[3], newDate[4], newDate[5]));
Serial.println("RTC Updated!");
/*
function to update LCD text
*/
void updateLCD()
{
/*
create array to convert digit days to words:
0 = Sunday | 4 = Thursday
1 = Monday | 5 = Friday
2 = Tuesday | 6 = Saturday
3 = Wednesday |
*/
const char dayInWords[7][4] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
/*
create array to convert digit months to words:
0 = [no use] |
1 = January | 6 = June
2 = February | 7 = July
3 = March | 8 = August
4 = April | 9 = September
5 = May | 10 = October
6 = June | 11 = November
7 = July | 12 = December
*/
const char monthInWords[13][4] = {" ", "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
// get time and date from RTC and save in variables
DateTime rtcTime = rtc.now();
int ss = rtcTime.second();
int mm = rtcTime.minute();
int hh = rtcTime.twelveHour();
int DD = rtcTime.dayOfTheWeek();
int dd = rtcTime.day();
int MM = rtcTime.month();
int yyyy = rtcTime.year();
// move LCD cursor to upper-left position
lcd.setCursor(0, 0);
// print date in dd-MMM-yyyy format and day of week
if (dd < 10) lcd.print("0"); // add preceeding '0' if number is less than 10
lcd.print(dd);
lcd.print("-");
lcd.print(monthInWords[MM]);
lcd.print("-");
lcd.print(yyyy);
lcd.print(" ");
lcd.print(dayInWords[DD]);
// move LCD cursor to lower-left position
lcd.setCursor(0, 1);
// print time in 12H format
if (hh < 10) lcd.print("0");
lcd.print(hh);
lcd.print(':');
if (mm < 10) lcd.print("0");
lcd.print(mm);
lcd.print(':');
if (ss < 10) lcd.print("0");
lcd.print(ss);
if (rtcTime.isPM()) lcd.print(" PM"); // print AM/PM indication
else lcd.print(" AM");
}
void setup()
{
Serial.begin(9600); // initialize serial
lcd.init(); // initialize lcd
lcd.backlight(); // switch-on lcd backlight
rtc.begin(); // initialize rtc
}
void loop()
{
updateLCD(); // update LCD text
if (Serial.available()) {
char input = Serial.read();
if (input == 'u') updateRTC(); // update RTC time
}
}
Step 4: Making the Fun Part
step 1. The Dupont wires connect to the breadboard (as shown in the model), ensuring they align with the GY-521: SCL, SDA, VCC, and GND.
step 2. Connect one set to the Arduino Uno as shown SCL - A5, SDA - A4, VCC - 5V, GND - GND.
step 3. Connect another set to the LCD1602 module as shown SCL - SCL, SDA - SDA, VCC - VCC, GND - GND.
step 4. Get Power Box Battery Holder Box with Cable on with a batteries
step 5. connect the USB power cable to the computer with the Arduino Uno
Step 5: Just in Time
step 1. Go to the serial monitor,
step 2. Open the serial monitor
in step 3. Press the letter U
in step 4. Start preparing the time
Step 6: It Time
complete the following:
- get drill
- get hinges
- get screws
- connect hinges with screws
- drill the screws onto the design
- continue until hinges are screwed onto the design
- using a hot glue gun get popsicle sticks and glue them into the design, or outside product depending on if you altered the original.
- (if original design not altered) drill a hole inside the design so that wires may come out
- (optional) check if the sunny design fits the screen if not sandpaper it into oblivion or just put the screen in front of the sunny design
- (optional ) sunny design to be hot glued onto the design
- put in Arduino, breadboard, and other functions connected to the breadboard,( screen too, depending on if you change/altered the design of the original, if not then make sure wires are connected but the screen doesn't go inside)
Step 7: Admire Your Work
congrats you made it
if your design is similar to this one congrats, if it's better looking kudos to you!!



