A Designers Clock

by 160871 in Workshop > 3D Printing

498 Views, 0 Favorites, 0 Comments

A Designers Clock

IMG_5368.JPG

welcome to the adventure of clock making enjoy

Supplies

IMG-2452.jpg
IMG-2453.jpg
IMG-2454.jpg
IMG-2455.jpg
IMG-2457.jpg
IMG-2741.jpg
IMG-2403.jpg
IMG-2404.jpg
IMG-2407.jpg
IMG-2404.jpg
IMG-2405.jpg
IMG-2407.jpg
IMG-2408.jpg
IMG-2409.jpg
IMG-2415.jpg
  • 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

clock .png
tinkercad-logo.png

in the beginning:

  1. TinkerCad opened


  1. the design is made and remade to thy liking, add, take, and make your kind of clock book design (sunny design optional but optimum)


  1. 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)


  1. 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

IMG-2742.jpg
IMG-2743.jpg
IMG-2744.jpg
IMG-2745.jpg
IMG-2746.jpg

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

arduino model .png

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

IMG-2777.jpg
IMG-2778.jpg

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

IMG-2456.jpg
IMG-2452.jpg
IMG-2453.jpg
IMG-2454.jpg
IMG-2458.jpg
IMG-2459.jpg

complete the following:

  1. get drill
  2. get hinges
  3. get screws
  4. connect hinges with screws
  5. drill the screws onto the design
  6. continue until hinges are screwed onto the design
  7. using a hot glue gun get popsicle sticks and glue them into the design, or outside product depending on if you altered the original.
  8. (if original design not altered) drill a hole inside the design so that wires may come out
  9. (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
  10. (optional ) sunny design to be hot glued onto the design
  11. 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

IMG-2672.jpg
IMG-2673.jpg
IMG-2674.jpg
IMG-2675.jpg

congrats you made it

if your design is similar to this one congrats, if it's better looking kudos to you!!