How to Build a Giant Hidden Shelf Edge Clock




Introduction: How to Build a Giant Hidden Shelf Edge Clock

About: Hello, I've recently started making and sharing home DIY projects. I'm really enjoying making these and speaking with the people who make one of their own. It has become my new hobby and I hope to be able to d…

We had a large space on part of our living room wall for which we could never find the right 'thing' to hang on it. After trying for several years we decided to make something of our own. This turned out rather well (in our opinion) so I turned it into a project on my Youtube channel and a written Instructable which you're reading right now!

It's a giant digital LED clock discreetly hidden in the edges of a geometric shelving system. It also included integrated LED downlighters to show off your favorite items on the shelves.

As the lighting is LED (using WS2821B 'Neopixels') you can choose your own colours - both for the clock face and downlighters. A discreet photoresistor is hidden in the top right corner which dims the LED's when the ambient light levels drop - great for evening ambiance in any room.


You will need some supplies to build one of your own. Below are links to where you can find the parts on Amazon.

■ An Arduino Nano(x1):

■ A 5m roll of WS2812B LEDS which has 60 LED’s a meter:

■ A Photosensitive resistor module:

■ A DS3231:

■ Some Hookup wire - ideally three different colours:

■ A couple of 470 Ohm resistors:

■ A couple of electric terminal block strips - each 5 blocks long:

■ No 8 wood screws:

■ A 5v power supply with screw terminals:

■ Some thicker twin core cable

■ Some filament for the 3D printed parts:

■ Wood infused PLA filament:

■ Wooden backboard at least 112 x 39cm the one I used was 138 x 60cm (this will give the finished project a 10cm border around the outside).

Step 1: Video Guide

I have created a video detailing the build of this project. The beginning of the video shows the hidden clock in action if you would like to see it working. If you prefer written instructions broken down into steps then you are in the right place! Read on and I'll explain how to build one of your own.

Step 2: Print the Core Supports

The core supports provide the framework of the shelves, handle the routing of the wires, and act as a standoff for the LEDs.

You will need to 3D print 31 of these. The file is attached for you to use in your slicer program.

I printed mine with a layer height of 0.2mm in a mixture of ABS and PLA. As it won't be seen in the final project it is a great opportunity to use up any colours that need using up. I had several rolls of filament with only a small amount left so used these first before finishing most of them in the rather bright green and bright yellow shades shown in the images above.

Step 3: Mounting the Core Supports

There are two different ways that you can correctly space out the core supports across your backboard

I will explain first how to do it with a 3D printable template, and then the second option is using a CNC machine if you have access to one (or someone else who might).

If you are using the 3D printable template, read on. If you will be using a CNC machine to set out the holes skip the following step....

Step 4: Mounting the Core Supports: Option 1 - Using the Template

3D print the template file attached to this step.

You can then screw the first core support to your backboard using some M8 (or similar) wood screws. Ensure that it is level and parallel to the board's edge. Once the first support is secured you can then lower the 3D printed template over it. This will then show you where to drill the pilot holes for the next three supports.

After drilling the pilot holes remove the template and fit some more supports. Ensure that the notch on the horizontal supports is facing towards the bottom of the clock when you screw them into place. This is where we will be gluing our downlighting LEDs later in the project.

Keep fitting supports until it is six long and two high, the top right one will be left out for now.

If you used the 3D template as mentioned in this step and will not be using a CNC machine you can skip the next step.

Step 5: Mounting the Core Supports: Option 2 - Using CNC Machine

If you have access to a CNC machine you can have someone pre-drill pilot holes to allow you to quickly and easily position and fit the 3D printed supports. This is the route that I took as I used to work for a local furniture manufacturer.

You can find a technical drawing showing the positioning of the holes available to download here:

Once the pilot holes have been drilled you can proceed with installing the core supports.

Ensure that the notch on the horizontal supports is facing towards the bottom of the clock when you screw them into place. This is where we will be gluing our downlighting LEDs later in the project.

Keep fitting supports until it is six long and two high, the top right one will be left out for now.

Step 6: Installing the 'electronics Hub' Core Support

The last core support which is to go in the top right corner is a modified version of the others. It has been designed to accommodate the electronics (mainly Arduino Nano, Real-Time Clock - DS3231 and photoresistor).

This is 3D printed using the same settings as the other core supports.

Position it temporarily other the pilot holes and use a pen or pencil to mark out the rectangular hole in its base. You can then use a drill to create a hole large enough to thread the power wire through. We'll be using this to power the clock once we have finished building it.

Once done, you can install the support using wood screws.

Step 7: Printing and Installing LED Mounts

We use small 3D printed tabs to attach the LEDs to the support structure. I have printed these in white and suggest you do the same to prevent any colour cast showing through the front edges of the shelves and to increase their reflectivity.

I printed mine in PLA at a layer height of 0.3mm.

You need to print 23 of these. (I printed mine three at a time).

Once printed use some gue to attach them to the top of the supports as shown in the attached diagram.

Step 8: Prepare the Clock Face LEDs

We need to prepare 23 lengths of 9 LEDs from our roll of LEDs.

To do this use scissors to cut through the centre of the first set of copper pads thus removing the plug. Repeat this again after 9 LEDs to give us our first strip. You then need to repeat this 22 more times.

Once this is done we can 'tin' the pads of the LEDs. Though this is optional it makes it much easier to connect the wires later. Tinning the pads means using a soldering iron to add and leave a small amount of solder on each pad.

Step 9: Prepare Clock Face Wires

Prepare some lengths of wire in sets of three. One each for the power, data and ground connections on our LED strips.

You will need:

  • 20 sets which are 22cm long
  • 2 sets which are 37cm long
  • 1 set which is 50cm long

As before, tinning both ends of each wire will make connecting them to the LEDs easier.

Step 10: Installing the First LED Strip

Now that the LEDs and their wires are prepared we can start to assemble them onto the front of our clock face. The order in which the strips are connected, and their orientation, is very important. There are little arrows going along the length of the LED strips which represent the direction of data flow. Pay good attention to these as you assemble your clock.

Our first LED strip will sit on the white LED mount above the unique support we printed to house the electronics in the top right corner. Attach two separate sets of 23cm long wires to both ends of one of the 9 long LED strips from earlier.

Remove the self-adhesive backing from the rear of the LEDs and also apply some glue to the top of the LED mount (for extra grip as I found sometime mine would come unstuck without the additional glue) you can then position the strip in place ensuring that the data directional arrows are pointing towards the top of the clock.

Now route the wires at the corner of the clock face down through the wire guide on the support they are on, through and into the adjacent support and up. Whenever you are routing wires along the outside perimeter of the clock ensure you use the inside holes on the wire guides. This will mean the wires are completely hidden when we finish off the clock by adding the 3D printed sleaves to the shelves (which we have not yet printed yet so don't panic!).

Step 11: Installing the Remaining LED Strips

For the next strip, take another set of 23cm long wires and solder these to the outgoing side (the end the data flow arrows are pointing towards) of a fresh strip of nine LEDs.

Solder the incoming side of the LED strip to the wires just routed around the corner from the previous strip. The adhesive backing can then be removed on this strip, some glue applied to the white LED mount and the strip fitted ontop.

The wires coming from this one are routed through the support and turn 90 degrees to the left up into the next support.

Repeat the same steps four more times following the path around the clock as shown in the diagram above. When you get to seventh LED strip you need to attach a 37cm set of wires to its outgoing side instead of the usual 23cm wires.

Now that I've explained and shown you the first few connections you can follow the rest using the diagram I have added above (the one on a dark background). It shows you which lengths of wire to use where, the direction of the LED strips, and how to route everything. It's a lot easier for you to follow this than for me to explain every connection in words. (Plus it would not be great fun to read either).

After you have finished installing the clock face LEDs it should look like the final image.

Step 12: Printing Shelf Sleeves

Let's take a break from electronics and turn back to 3D printing. There are five different styles of shelve sleeves to print depending on where they are going on the clock.

For every sleeve, I printed the first few layers in white and then switched to a wood infused PLA filament for the remainder of the print. This thin white front face is what allows the diffused light from the LEDs to shine through.

They took about seven hours each when printed at a 0.2mm layer height. U usually printed three at a time overnight. I also added a brim so as to help prevent them from becoming unstuck from the print bed. These are easily removed after the print is complete.

You need to print:

  • 9x Sleeve1.stl - This one has cutouts on one side only.
  • 6x Sleeve2.stl - This has cutouts on one side and a hole for the LED downlighter.
  • 10x Sleeve3.stl - This has cutouts on both sides.
  • 6x - This has cutouts on both sides and a hole for the LED downlighter.
  • 1x Sleeve5.stl - This one is specifically designed to house the electronics and includes air holes for ventilation and a hole for the photoresistor.

Step 13: Fitting the Shelve Sleeves

The shelves are installed by carefully sliding them over the supports and LEDs whilst making sure that the wires pass through the cutouts.

The nine Sleeve1's which you printed slide over the supports along the bottom and side of the clock (excluding the special electronics containing support) as shown in the above photo.

The six Sleeve2's all go along the top of the clock with the LED hole facing downwards.

The ten Sleeve3's go in the remaining vertical positions.

The six Sleeve4's fill in the horizontals running along the middle with the hole for the LED facing downwards again.

The last Sleeve5 goes over the remaining support in the top right.

Step 14: Connecting DS3231 to Arduino

You will need to prepare the following for this step:

  • A pair of 8cm wires
  • A pair of 12 cm wires
  • DS3231 - Real-Time clock (RTC)
  • Arduino Nano

Start by soldering an 8cm wire to SCL and another wire to SDA on the RTC. Then solder a 12cm wire to VCC and another to GND (Ground). I'll be using red wires for the positive/VCC connections from now on and black wires for the ground/GND connections to help make it easier to understand what wire should be connected to what.

Taking the Arduino, solder the wire coming from SCL to A5 on the Arduino, then connect the wire from SDA to A4. We will be connecting the power wires later

Step 15: Connecting Photoresistor (light Sensor) to Arduino

You will need the following for this step:

  • Photoresistor module
  • A single 10cm length of wire
  • A pair of 14cm wires

Solder the 10cm wire to AO on the module and each of the 14cm long wires to GND and VCC.

The 10cm AO wire is then connected to A0 on the Arduino Nano board. Again, we will be connecting the power wires later.

Step 16: Prepare the Nano to Connect to Power

For this step prepare:

  • Two 12cm lengths of wire.

Solder one of the wires to any of the GND connections on the Arduino and the other wire to the 5V pin.

Step 17: Connect the LEDs

You will need:

  • One 470 ohm resistor.

Shorten the legs on the resistor slightly as they are much longer than required. Solder one side of the resistor to the wire which is already connected to DIN on the ingoing side of the first LED strip we installed. This is the one over the 3D printed support designed to house all the electronics.

The other end of the resistor is then soldered to D6 on the Arduino.

Step 18: Power Warning...

A quick warning to share with you. Don't connect the mains power supply at the same time you are using the Arduinos USB connection. You risk damaging whichever device is connected to your Arduino. This is why we have not connected the mains power yet and will not be doing so until the project is complete and we no longer need to connect via USB.

Step 19: Connecting the Power Wires

For this step you'll want:

  • Your two strips of terminal blocks
  • 8 short lengths of wire (I did four in red and four in black)

Use each short length of wire along one side of the terminal block to as jumper wires to connect them all together. Once you have screwed them into the terminal blocks, tug on them to ensure they are held well by the screw. Repeat this for both terminal strips.

Now we can take all the VCC/5V wires going to our components and connect them to the same terminal block strip. Then do the same for all the GND/Ground wires with the other terminal block strip.

You should find them coming from each of the following components:

  • Arduino
  • First LED strip
  • DS3231
  • Photoresistor

Step 20: Uploading the Code

Connect your Arduino to your PC via its USB connection and open up the code for this project in the Arduino IDE. You can download the code from Github:

You need to have two different libraries installed in your Arduino IDE for this project; 'Adafruit Neopixel' and 'DS3231 Simple'.

If you do not already have them you will need to install them.

To install the Adafruit library:

In the Arduino IDE, navigate to Sketch > Include Library > Manage Libraries Then in the Library Manager search for Neopixel strip using the search bar. Press install.

For the DS3231 library head to and follow the simple instructions on the page.

We can first set the time on the clock by running a small script provided by the author of the library. We only have to run it once. To do this head to ‘File' >> 'Examples' >> 'DS3231_Simple' >> 'Z1_TimeAndDate' >> 'SetDateTime' set the date and time you want and then upload it to your Arduino. This will set the correct time on your RTC which will persist when the Arduino loses power for as long as the button battery lasts. This window can now be closed and the main project script uploaded in its place.

If everything has gone as it should so far your clock face should spring into life and light up the current time.

Step 21: Adding the LED Down Lighters

For the LED downlighters you will need to prepare the following:

  • 11 sets of 29cm long wires
  • One set which is 48cms long
  • 12 individual LEDs cut from the roll we were using earlier
  • A 470 Ohms resistor

Don't forget that tinning the pads on the LEDs and the ends of the wires will make soldering them together much easier later.

The 3D printed sleeves for the top half and centre row of the clock will need to be removed so that we may install the wiring for the downlighters. To remove them just carefully pull them straight upwards.

The first LED downlighter will be fitted to the horizontal support at the top right of the clock face. Solder a set of 29cm long wires to both sides of one of the individual LEDs and then glue this into place in the notch on the centre support column. You still need to pay attention to the direction of data flow, and for the top row of LED downlighters it should be facing away from the Arduino as highlighted in the image.

You can then thread the wires through the wire guides at both ends of the support. Solder a 470 Ohms resistor the DIN cable which is on the Arduino side of the LED. The other end of the resistor is then connected to D5 on the Arduino.

The VCC and GND connection going to the LED can then be added to the appropriate terminal block strips.

Continue adding the LED downlighters along the top row using the 29cm sets of wires between each one. At the end of the row (6th LED) attach the 48cm set of wires so we reach down to the next row and then carry on adding LEDs with 29cm long wires between them.

I created a diagram that is attached above which makes it clear which wires to use between the LEDs, which way the data arrow must be facing and how to route the wires through the wire guides at the base of the 3D printed core supports.

Step 22: Test the Downlighters

You can now replace all the shelf sleeves with the exception of the one which will cover the electronics.

Connect the USB port on the Arduino to a USB power supply and you should find that you have a fully working project!

Step 23: Connect the Mains Power Supply

Disconnect the USB cable from the Arduino.

Feed the main power supply cable through the hole in the board we made under the 3D printed support earlier. You can then connect the positive lead to the positive power block strip and the ground to the ground strip.

Check that all the wires are still held firmly by tugging on them gently.

Step 24: Position the Photoresistor

Apply some glue to the rear of the photoresistor. This is then positioned so that the circular sensor protruding from it is nestled it the U shaped cutout already made in the 3D printed support. The front of the sensor should be flush with the front so that it does not obstruct the sleeve when lowered over this support.

Step 25: Tidy the Electronics

At this point, we can look to tidy up the electronics so that it can all fit neatly inside of this shelf.

I used glue to hold down the various parts inside the shelf using the large backboard of the 3D printed part to attach them to. You can fit them in any arrangement that works for you, but be careful not to put too much strain on the wires.

The photos above show before and after I arranged mine. Once done, you can slide the sleeve over the support.

Step 26: Completing the Power Supply and Mounting.

The other end of the power supply cable can be fitted onto the screw terminals. Pay attention to which is the positive and negative side of the screw terminals as it may defer to mine.

To mount my shelf edge clock onto the wall I used some kitchen wall unit brackets. One half is fitted to the clock backboard and the other half to wall. The two just slide together.

I also used some strong glue to help keep the power cable coming out of the back of the board in place and to prevent its own weight from straining the cables where they are connected to the strips of terminal blocks.

The last thing I added before putting the shelving up on the wall was two small stacks of rubber band pieces I had glued together. This acts as a small buffer which helps to prevent the bottom of the shelf marking the wall whilst also keeping it equally 'stood off' from the wall.

A small length of cable tidy plastic was used to help hide the otherwise black power cable. This can then be painted to match the wall colour.

Step 27: Project Complete!

Nice, time to make a cup of tea and admire your handy work. :)

I hope you enjoyed making your own. Don't forget to take a look at some of my other projects.

Subscribe here on Instructables and YouTube to find out what my next project is. Please feel free to share this project with anyone you know who might like to build one of their own and if you make one I'd love to see a photo of it.

Otherwise until next time chow for now!

Subscribe to my Youtube channel:

Support me on Patreon:



Clocks Contest

Grand Prize in the
Clocks Contest

12 People Made This Project!


  • Fabric Challenge

    Fabric Challenge
  • First Time Author Contest

    First Time Author Contest
  • Build a Tool Contest

    Build a Tool Contest



Question 10 months ago

where is schema?


Question 10 months ago

I am trying to upload florians code to my esp32. I followed your steps and wired up the photoresistor and all and everything went okay. I turned on “low power mode” by disabling WiFi and setting it to false in the code but when I try to upload I get a “please specify upload port” in platform io in vscode. I also get a usb surge warning on my laptop which I believe is disabling my USB port giving me the error. Is there any way I can circumvent this so that I can upload the code? It seems that the the clock is drawing too much power from the usb port.


1 year ago

Please, give me an advice. When changing to a 24 h mod and adding 5 segments does not show me the first number of hours do you know anyone what it can be?


Question 1 year ago

Can I ask if anyone help me understand the magic numbers - LEDCLOCK_COUNT 216, when 23 x 9 = 207?


2 years ago

I recently made one of these out of wood as I didn't really feel like printing all of it. So just the led covers are printed.
I used an ESP32 controller and no real time clock (as the ESP can connect to wifi and get it's time from the internet)
The wifi connectivity also enables you to change the color of the led segments and the interior lights to be controlled independently from each other. I am using the free Blynk app in order to control it from the smartphone.
I also spent a lot of time creating transition animations for all the numbers and itlooks quite good I have to say.
If someone is interested to use my code let me know and I will put it up on GitHub.
It's not plug and play though as I populated all segments with LEDs and mine is a bit bigger (12 LEDs per segment)
But if there is enough interest I can write some documentation on how to change all of it. It should be quite easy to do.


Reply 1 year ago

I'm in love with this clock, but all the time I'm thinking about making a wood version. Could you please post more detais about the manufacturing process you did? What wood have you used, what tools, how did you routed the wire connections, how it is attached to the bottom wood part and how are the plastic covers attached? :)


Reply 1 year ago

I got the plywood peaces already cut to size from my local carpenter but I guess cutting them with a hacksaw or jigsaw would work fine.
All the parts you need are listed on the thingiverse side I created for it ( In the downloads to it you will also find a pdf file with some details on how the different panels are assembled.
The panels were just glued together with the square profiles with some wood glue. I drilled holes into the profiles to route the cables inside the panels. The panels were assembled beforehand and then some of them were screwed to the backplate to give some rigidity. If I recall correctly the small horizontal ones were just slid in afterwards and then held in place by sliding the long square profile into them once they were in place. Unfortunately I don't remember anymore how I did it exactly.

And the plastic covers I just hot glued them in place by their little tabs so that I could remove them later in case I would need to fix anything.

I hope this helps a little to clarify things. Unfortunately I didn't really document the process of building it...


Reply 2 years ago

HI, I am super interested on the animation. I just created this clock my clock uses NodeMCU and BLYNK app to control the app. Here is the thingiverse remix link.

Will you please share the transition code? I am not fluent on animation programming yet. Thank you in advance.


Reply 2 years ago

I cloned the project, new to git and platformIO. trying to configure the display so I don't have to rewire the whole clock. Good documentation. Thanks for sharing.


Reply 2 years ago

Thanks :)
If you need any help feel free to send me a PM.
Did you build the original version from this site?
I would be interested in adding a configuration that will run by default on this version. So if you configured it and it works it would be cool if you could share the config. We could add it to the github if that is okay with you. Then it would make it easier for other people with that version to get everything up and running.


Reply 1 year ago

Just wanted to say thanks for the huge amount of time you must have put into writing that code repository! I got it working with a 24 hour clock like the one in this Instructable, although I like your version as well and may build another one like it someday.


Reply 1 year ago

Thank you so much :)
Yes it was quite a lot of work but seeing that people are actually building these and putting my code on it made it well worth the effort.
It good to know that it works for 24h too since you are the first one I hear from who has tried it.

Rakshith bk
Rakshith bk

Reply 1 year ago

I've done it in similar way, shelf in wood and front led part in 3D print. I did not have any RTC chips around and came across your comment on using NTP. Great Idea. I have borrowed your code 😁. (


Reply 1 year ago

Happy to hear that you could make use of my code. I've spent a lot of time on it so it's good to know that all the work paid off :)

DIY Machines
DIY Machines

Reply 2 years ago

Hi, that sounds awesome. Animations were something I wanted but were beyond my ability. I would be grateful if you could share a video showing the effect and the code on GitHub so I could study it.
Documentation would also be a huge help. :)


Reply 2 years ago

Alright I attached a short gif for a quick preview of the animations. It is running some demo code to show off the animation effects. I will probably shoot a nicer video of it this Sunday.
I will put in some effort into documenting what has to be done to make the code work on the original version of this. I might also provide a preconfigured one on a separate branch in git wich works on the original version by default if someone can test the code on their version.

DIY Machines
DIY Machines

Reply 2 years ago

Wow, that looks brilliant. If you're happy to branch it off in Github and configure it work on the original design I'll happily test it on the ultimate original in my living room. :)


Reply 2 years ago

I just made a quick branch from my code and configured it.
I deactivated a lot of the code to keep the places where it could fail to a minimum.
Here you can find the first test of the config:
Flashing this should show all zeroes and then count up by one every second displaying the morphing animation when switching digits.
All wifi functionality and also the down lighters are disabled for testing.
Once this works we can start to add back in the rest of the functionality.
You could probably even try to flash this on the arduino nano you have currently installed if you change the board settings in platformio.
Let me know how it goes and don't forget to reconfigure the pin where you have your leds connected to.