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 a guide 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.
DISCORD server: https://discord.gg/EhqqePPcKk
Code for the project can be found on its Github page: https://github.com/DIY-Machines/DigitalClockSmartShelving
3D printed parts and wiring diagrams can be downloaded from here: https://www.prusaprinters.org/prints/94364
Drawing for CNC drilling of the backboard (if you have access to a CNC machine or know someone else who does):
https://www.etsy.com/uk/DIYMachines/listing/1081760909
DISCORD server: https://discord.gg/EhqqePPcKk
Click on an image to see a larger version.
FAQ's
There are two files on the Github page for this project. Both need to be opened as tabs in the IDE when uplaoding.
First open 'Shelf_Edge_Clock_V1.ino' in the IDE then click 'Sketch' from the menu bar, followed by 'Add file'. Choose the 'Digits.ino' file.
The file 'Digits.ino' explains to the system which LEDs need to light up to create each number (0 through to 9) on the right-most digit. This is expressed as follows for the number one:
void digitOne(int offset, int colour){
stripClock.fill(colour, (0 + offset), 9);
stripClock.fill(colour, (36 + offset), 9);
}
In this function we have a line for each continouse run of LEDs which are swithced on. These lines start with 'stripClock.fill'.
This is followed by the variable 'colour' which controls the colour of the LED.
The first number represents the first LED to switch on (remembering we count from zero and the order is as you have soldered them in series). There is another variable 'offset' which can be ignored for now followed by another number ('9' in the above example) which says how many LED's to light in a continouse run from this first one.
If you we're using 18 LED's per segment it might look like this for you:
void digitOne(int offset, int colour){
stripClock.fill(colour, (0 + offset), 18);
stripClock.fill(colour, (72 + offset), 18);
}
You also need to adjust the offset value as found in the main program on lines; 185, 197 and 211.
These values should represnt how many LED's come before the first LED which forms the next 'digit' on the shelf clock.
I printed two layers of white (at a 0.2mm layer height per layer) before changing to the wooden filament.
In Prusaslicer you can prompt the printer to chnage filament as explained here by Prusa: https://youtu.be/bzf20FxsN2Q?t=361
I would recommend taking look at the great work done by Florian here: https://github.com/florianL21/LED-ClockShelf
All Rights Reserved | DIY Machines Ltd
-