Classroom Clock

43,209

367

67

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

2 People Made This Project!

Recommendations

  • Hand Tools Only Challenge

    Hand Tools Only Challenge
  • Modify It Speed Challenge

    Modify It Speed Challenge
  • Remix Contest

    Remix Contest

67 Discussions

0
Spectraham
Spectraham

Question 4 months ago on Introduction

Very nice looking clock! Do you think Dotstar led strips could be used in place if Neopixles? I have several strips of them but no Neopixles.

0
gary180
gary180

Question 1 year ago

Hi, thank you for this great clock.
I made one myself after numerous setbacks and it works fine, the only problem is that I need the countdown to work when I press a button and not at the end of each period, Is that even possible?

I need it for a class project.
Thank you
Gary


0
NJORGE
NJORGE

Question 1 year ago

Hi, I'm from GUATEMALA
And I ask if the project I can sell it to teachers or people who are interested in it, and that if it is really great, before I start I need author authorization
Because in GUATEMALA you need to activate productivity and have more trade.
I await your response
ATT. JORGE GUTIERREZ

0
CameronM37
CameronM37

3 years ago

Great project. I was able to successfully complete this, but have issues with the time. It always seems to lag about 17secs behind the actual time of my laptop, no matter what I've tried. Do you have any suggestions to explore on this?

0
tastewar
tastewar

Reply 1 year ago

I know this is probably too late to be helpful, but this is (likely) because of how the time is initially set. The arduino sketch 'knows' the time it was compiled, and uses that time to set the clock, if it hasn't been set already. But it takes actual time to upload the compiled sketch to the arduino and run it the first time. Mine was about 12 seconds off. I added that offset in when setting the time on the clock. I would say the best approach is to use a different, dedicated purpose sketch to set the clock, and remove the time setting functionality from the classroom clock sketch.

0
CameronM37
CameronM37

Reply 1 year ago

Yup. That's the issue. I am a real time nerd, so even off by a second is completely unacceptable. I have moved the code to use an ESP8266 device and use NTP. Now I never have to reset the clock.

0
tastewar
tastewar

Reply 1 year ago

!!! Seriously?! That is **next** on my list. The device is on order. I have another one at home that a friend gave me years ago, that I'm just starting to play with. Is your code in github? Mine is a fork of the original. I'm seriously planning to use MicroPython for the project, but am slightly torn by the prospect of starting mostly from scratch.

0
thec34
thec34

3 years ago

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!

0
tastewar
tastewar

Reply 1 year ago

Having just finished this, I am very inclined to re-do the guts of it with a more sophisticated controller. Looking at using an Adafruit Huzzah ESP8266 board running MicroPython. This would enable clock synchronization, and also the possibility of reading a pre-allocated configuration file from the internet. That would mean schedule changes would *not* involve editing and rebuilding the sketch, and uploading it to the arduino.

0
jasongobus
jasongobus

2 years ago

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

0
jdeboi
jdeboi

Reply 2 years ago

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.

0
jasongobus
jasongobus

3 years ago

Worked it out..

Your missing

#include <RTC_DS1307.h>

in the code

0
binods7
binods7

Question 2 years ago

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

0
jdeboi
jdeboi

Answer 2 years ago

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

0
binods7
binods7

Question 2 years ago

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

0
RAHMİ SUSAM
RAHMİ SUSAM

2 years ago

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

0
jasongobus
jasongobus

Reply 2 years ago

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??

0
RAHMİ SUSAM
RAHMİ SUSAM

2 years ago

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

0
jasongobus
jasongobus

3 years ago

PLEASE HELP..

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

whats happening???? PLEASE HELP