Classroom Clock

30,843

339

57

Published

Introduction: Classroom Clock

About: maker, programmer, teacher, activist

The Classroom Clock is a DIY digital clock designed and optimized for teachers. When I began teaching, I found it very difficult to keep track of the rotating block schedule. Classroom Clock solves this problem, in addition to offering several other convenient features:

  • An additional digit that keeps track of the block or period- an especially useful feature for rotating block schedules
  • The ability to program holidays into the code to prevent the block from advancing on days when school is not in session
  • LED digits that fade from green to red as the end of the period or block approaches so that a single glance can convey the remaining class time
  • A countdown timer triggered 6 minutes before the period ends that flashes between the time and the remaining time- a useful feature for signaling cleanup time
  • Other light effects that can be triggered during lunch, free periods, after school, or other special occasions

But the possibilities are endless! How will you program the Classroom Clock?

Step 1: Materials

Tools

  • laser cutter
  • soldering iron + solder
  • wire cutter
  • wire stripper
  • hot glue + gun
  • wood glue
  • super glue
  • 7/16 nut driver

Materials

Cost <$100

Step 2: Laser Cutting

The first step is to laser cut the design. The files were designed with Autodesk Fusion 360, but the svg files for laser cutting can be found in the Github repo. Inkscape is a free vector program that can be used to modify the files.

Cut the following layers from the files in this folder:

  1. 1 bottom
  2. 1 bumper
  3. 1 Neopixel assembly layer
  4. 2 bolt digits
  5. 1 nut digit
  6. 1 magnet digit
  7. 1 acrylic top
  8. 1 circuit case (3 stacked layers, one side panel)

For the Neopixel assembly layer, the text should be etched onto the surface.

For the acrylic layer, the circles should be etched, not cut; the engraving helps to align the acrylic on top of the magnets. The file is purposefully flipped vertically so that the holes are aligned when it's flipped back over.

Step 3: Arduino

We’re going to use an Arduino Nano in this project.

  1. To fit it horizontally on the protoboard, I snipped the front two headers and soldered the microcontroller to the board.
  2. Next I soldered 4 wires to the Nano: a wire to A4 and A5 for (SDA and SCL respectively for I2C communication with the ChronoDot), and a wire to GND and 5V. The other end of these wires will be soldered to the ChronoDot at a later point. These wires should occupy column J, rows 4-8, on the top of the protoboard (the diagram and video are off by one column- they're in column J on the bottom of the protoboard, not top).
  3. Then I clipped the headers of the Nano to make room for the ChronoDot.
  4. Finally, I soldered a 470ohm resistor to digital pin 3 on the Nano, and the other end to a clear spot on the protoboard. I made sure to snip the legs.

Step 4: ChronoDot

The ChronoDot is an extremely accurate real time clock module.

  1. We aren’t going to need pins Bat (battery) through RST, so snip these headers.
  2. Attach the ChronoDot on the underside of the protoboard facing the opposite direction from the Arduino. If you're following this design exactly, the ChronoDot headers should occupy column I, rows 4-8, of the protoboard (adjacent to the 4 wires from the Nano in column J).
  3. Solder the hearders to the protoboard and to the wires coming from the Nano. SDA should be connected to A4, SCL to A5, 5V to Vcc, and GND to GND.

Step 5: Power

  1. Begin by screwing two wires into the positive and negative terminals of the into the DC power adapter.
  2. Assemble the 3 layers of the circuit case to help align the wires on the protoboard.
  3. Solder the wires to the board and snip the leeds.
  4. Next solder a wire from the ChronoDot’s Vcc to the positive power adapter terminal, and the GND of the ChronoDot to the negative terminal.
  5. Then it’s time to add the 1000uF capacitor. The negative lead is connected to the negative power adapter, and positive lead to the positive terminal. If you look closely at the capacitor, you’ll notice an arrow along the side. The arrow points from the negative to the positive lead.

We’re all done. I used a 5V switching power supply to power both the Arduino and the Neopixels when not connected via USB.

Step 6: Neopixels

The next step is to assemble the Neopixels.

  1. The Neopixel assembly layer has numbers etched into the wood.The numbers indicate the order in which the Neopixels must be wired together in order to match the code.
  2. Cut the Neopixel strip apart; there should be one per hole for a total of 32.
  3. Next use the Neopixel assembly layer to hot glue Neopixels in place. Look closely at the pixel and you’ll notice several labels. It’s important to make sure the arrow on the Neopixels always points to the next pixel. So 0 should point to 1, one to 2, and so one.
  4. Now you can recreate the Neopixel strip. Cut, strip, and solder wires between the LEDs ensuring that data always goes to data, 5V to 5V, ground to ground. Next to the numbers etched in the wood are plus and minus symbols (representing 5v and GND respectively). These symbols help to ensure you’re always soldering the right pins together.
  5. Continue soldering the pixels together following the numbered path.
  6. When you’re done, it’s time to solder the Neopixels to the circuit. Slide the circuit holder into place.
  7. The data pin on the Neopixel strip should be attached to the resistor (300-500 ohms), which is connected to digital pin 3 on the Arduino.
  8. 5V and GND from the Neopixel strip should be connected to the DC power adapter + and - terminals respectively.

Step 7: Assembly

Glue bumper onto the bottom layer. Glue two bolt digits together, and glue the hex nut digit layer on top. Feed the bolts through the bottom (use a washer or cut an acrylic spacer between the wood and the hex cap) and bumper layers, and stack the panels in the following order (from bottom to top):

  1. bottom
  2. bumper --------> both glued together
    --------
  3. Neopixel
    --------
  4. digit
  5. digit
  6. hex nut digit --------> all glued together
    --------
  7. magnet digit
  8. acrylic

The advantage of this glueing strategy is that in the event something goes wrong with the Neopixels, the Neopixel assembly layer can be easily detached from the other layers.

Once the above layers are stacked, twist the 1/4" jam hex nuts on top so that they're aligned with the holes in the wood panel, and tighten the bolts from the back with a 7/16 nut driver.

This is a good opportunity to sand and stain the edges of the clock.

Now it's time to super glue the magnets into the final digit layer's circular holes. The magnets should be flush with the bottom but protruding slightly from the top of the wood panel (depending on the size of magnet you use).

Next, put super glue on the magnets and fit the acrylic layer on top. The acrylic layer should have etched circles on the bottom that help to align the layer perfectly on top of the magnets.

When the glue is dry, the top wood layer and the acrylic can slide on and off of the clock exposing the Arduino and circuitry if needed.

Step 8: Code

All of the code (and associated files) can be found in the Github repo.

  1. Install 2 libraries by downloading these directories and placing them in Documents > Arduino > libraries
    1. RTClib
    2. Neopixel
  2. Set values (e.g. the beginning and end of the periods) so that the code matches your schedule.
Rainbow Contest 2016

Third Prize in the
Rainbow Contest 2016

Share

Recommendations

  • Clocks Contest

    Clocks Contest
  • Woodworking Contest

    Woodworking Contest
  • Make it Move Contest

    Make it Move Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

2 Questions

0

please help me codeing it getting error #include <RTC_DS1307.h>

0

did you install the RTCLib? You should have: Documents > Arduino > libraries > RTCLib > RTC_DS1307.h

0

can anybody help me to solve this problem #include <RTC_DS1307.h>

57 Comments

Some things i had to change in the code to make mine work.
First i had a Chinese Chronodot so i had to change the RTC code to DS3231

also i put the LED pin as Pin 6 not 3..

and the NEO_RGB needed a W at the end so it read NEO_RGBW

other than that it works a treat and looks awesome in my classroom.

good luck everyone

1 reply

Thanks for the post. I used RGB Neopixels rather than RGBW LEDs. I believe RGB is more common than RGBW, so check your strip before adding the "W". But good heads up. Also the code currently has the LEDs on pin 3, which is working fine on mine, but it's fine to change it to 6 as long as you modify the code.

Worked it out..

Your missing

#include <RTC_DS1307.h>

in the code

1 reply

I do not know if the full code is given, but there is no one to publish it along with the tenses that finished and finished at the end of the course thanks

1 reply

HEy buddy, I have made this clock,

worked a treat too.. there were a few things i had to change in the code to make it work.

how is yor coming on??

I want to help this clock I need help, if there are some who have done it completely, please help me please please ask me if I am doing this project completely, if you are finished arduino uno thank you for your help **** rahmisusam@gmail.com

PLEASE HELP..

i have a finished clock.. but the code wont compile properly..

whats happening???? PLEASE HELP

Please hlep i am getting an error when i try to upload the firmware to my nano.. i have the lib and i put them in the correct directory.. but i get this error

Build options changed, rebuilding all

classroomClock:36: error: 'RTC_DS1307' does not name a type

RTC_DS1307 RTC;

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void loop()':

classroomClock:142: error: 'RTC' was not declared in this scope

now = RTC.now();

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void initChronoDot()':

classroomClock:622: error: 'RTC' was not declared in this scope

RTC.begin();

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void initChronoDot(int, int, int, int, int, int)':

classroomClock:646: error: 'RTC' was not declared in this scope

RTC.begin();

^

exit status 1

'RTC_DS1307' does not name a type

I have built this but I'm struggling to code the nano. I have had it running example code from adafruit and all the neopixels work beautifully but when I try to compile your code I get an error message for the chronodot library which I am sure I have installed correctly - any ideas? Bit frustrated as it looks great even without the lights!

2 replies

Can you post the error message? I bet it has something to do with the library.

Might be something related to the RTC library which I might have to fix. try changing:

dayOfTheWeek() to dayOfWeek()? (or possibly vice versa)

This is the error i get..

any help??

classroomClock:36: error: 'RTC_DS1307' does not name a type

RTC_DS1307 RTC;

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void loop()':

classroomClock:142: error: 'RTC' was not declared in this scope

now = RTC.now();

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void initChronoDot()':

classroomClock:622: error: 'RTC' was not declared in this scope

RTC.begin();

^

D:\jgobu1\My Documents\Downloads\Classroom-Clock-master\Code\classroomClock\classroomClock.ino: In function 'void initChronoDot(int, int, int, int, int, int)':

classroomClock:646: error: 'RTC' was not declared in this scope

RTC.begin();

^

exit status 1

'RTC_DS1307' does not name a type

Hey Do you have the DXF for this file?? i tried using Inkscape to make the DXF but the scale is HUGE.. it says the length is 1100mm.. .which seems heaps bigger than what you have in your video:?

any help please im keen to make this for srue

Can this be done with a Arduino Mini Pro??

cheers

Hey jdeboi-

What are the basic (rectangular) dimensions of this clock?

I've always wanted to get into electronics and I can now see how easy Arduino is to build gadgets. (I've been a software developer > 30 years) I just bought my first Uno today! I'm going to now build my own version of this clock for my wife's factory that will be used to bake crackers! (Eventually I'll make the clock wireless using a second arduino! Thanks for posting this article!

Great job. I already have 1 pc arduino uno and 1pc rtc ds3231. Can I use it to build this clock too? Can I use the same program or I have to modify it? Please assist me. Thank you.

1 reply

the Uno should work fine (mine is currently running on an Uno; I replaced the Nano). the rtc ds3231 should work too, but there may have to be minor tweaks in the code. Not sure.

HI superb project...............

looking forward to build it

I found a site called Ponoko.com that does laser cutting. Their materials are not the same as what you have listed here. How critical is the thickness of the wood layers? For example, you call out 5mm thickness. But, they have a birch plywood that is 3.2mm. Do you think this would work? Or, conversely, they have an MDF that is 6.4mm. I tend to think something thicker would be better than thinner. What do you think?

Note: the SVG files have to be altered slightly in that colors have to change so that cuts are blue and engravings are red, and engraved areas are black. Fonts have to be changed from objects to paths. I did it in Inkscape after a learning curve. And, it's not cheap. I'm looking at a cost of well over $150 right now.