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
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!!
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
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
}
}
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
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
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)
Admire Your Work
congrats you made it
if your design is similar to this one congrats, if it's better looking kudos to you!!