Lazy 7 / One




Introduction: Lazy 7 / One

Lazy 7 / One

Features/Instructions are the same as on other projects based on the same sketch, here's another video (also linked from the sketch instructions in step 10).

Update - 2021/07/17

Sketch v7 available. I also recommend having a look at the notes about electronics when building one of my things!

Update - 2020/07/30
Splitted the electronics case STL and added another cover (B) including a hole. In case you want to build the 4 digit version this might be a better choice for wall mounting.

Update - 2020/06/02
Added draft of sketch v6 which can be compiled for nodeMCU/ESP8266. It's been added to Step 10. For details/information please have a look at Step 11 from my S7ripClock.

Just when I thought I was finally done with 7 segment modules.... someone came along having specific requirements to one. We ended up building some kind of grid, but it kept me thinking:

Is there an easy way to increase led count inside my 7 segment modules without scaling the model to insane sizes? Or using strips with 144 leds/m, which come with other problems? Yes.

After mixing some elements of my Lazy Grid Clock and 7 segment modules this is what I ended up with. Mainly I was working on another module but just had to build this smaller version with another question in mind:

Can the build be simplified even more compared to my other 7 segment clocks?

Yes, this can also be done. This clock is using a single strip of leds, a whopping 252 leds in total. There's just one long piece (4.2m) inside the frame parts and that's it. 8 leds inside each segment, 56 per digit.

Width: 40.7cm

Height: 14.8cm
Depth: 3.8cm

252 LEDs, 1 continuous strip (WS2812B, 60 leds/m, 4.2m)

Or 388 LEDs, if going for the 6 digits version (6.47m)...

Step 1: Info / Notes

This is more a "proof of concept". The idea behind the 7 segment modules was for advanced configurations where the modules will be mounted straight to boards and powered accordingly to make use of all those leds.

For everyday living room usage this should work with about 1.0A - 2A, you will have to adjust the default power limit inside the sketch according to wire gauge and power supply you're using.

While it will work right out of the box using 750mA (default limit inside the sketch) you'll barely notice any difference between the brightness settings and some color palettes might darken a bit when the dots between digits light up.

Be cautious: Lighting all leds up at full brightness/white and driving them at their rated max current (60mA) you'll end up facing a max consumption of 75.6 Watts (15.12A@5V).

If you plan to use this where high brightness is needed, make sure to use according materials. Running the clock at white and set to a power limit of 7.5A the parts got noticeably warm within 10 minutes of testing...

The sketch is based on my "S7ripClock", so head over there for some more detailed instructions about electronics, buttons and so on - electronics/schematics are exactly the same on this one, except there's only one strip of leds. ;)

S7ripClock - Basic Edition

Oh, and don't be shocked when looking at the amount of STL files. 6 of them is just for two types of diffusers... ;)

Added a wall hook/mount part which can be put above the electronics case. Have a look at the 6 digits extension, there's a rendered picture where you can see two of them mounted (on the 6d version).

Step 2: Required Parts

Printed parts:

  • 1x L7One_Frame_A.STL
  • 1x L7One_Frame_B.STL
  • 1x L7One_Frame_C.STL
  • 1x L7One_Cover_A.STL
  • 1x L7One_Cover_B.STL
  • 1x L7One_Cover_C.STL
  • 4x L7One_Front_AC.STL
  • 1x L7One_Front_B.STL
  • 1x L7One_Elec_Case.STL
  • 1x L7One_Cable_Cover_A.STL
  • 1x L7One_Feet.STL

I suggest printing all of the above using black material.

The diffusers should be printed from clear material:

  • 28x L7One_Diffuser_AC_Type_1 or 2 (blank)
  • 2x L7One_Diffuser_B_Type_1 or 2 (blank)

There's also sets of all diffusers (30 pcs) for Type 1 and 2 in a single STL.

There's also an optional "spacer" to keep rtc/arduino seperated inside the electronics case, you might want to use this.

The biggest part (x/y) to print is 187.3mm x 147.6mm, so it should be printable on most printers.

Other parts you'll need to build the clock as shown are:

  • 252x WS2812B LEDs, 60pcs/meter strips, 5V, each led individually addressable, 10mm wide (IP65/67, coated/rubberized ones do not fit!)
  • 1x Arduino Nano or Pro Mini (atmega328, not 168. 5v, not 3.3v)
  • DS3231 RTC module (ZS-042, DS3231 for Pi or similar)
  • 2x 6x6mm push buttons (button height doesn't really matter, 3-6mm recommended)
  • Some wires (AWG 26 min.recommended)
  • 1x USB cable / USB Wall Charger (1A min.)
  • 12x M3 screws, 8mm-10mm (Note: Absolute max. screw length is 10.25mm! 8mm might be a bit short when connecting feet/wall hook)

You do need a working Arduino IDE to upload the sketch. Also you should know about the difference between compiling and uploading a sketch or installing the required libraries. If you're completely new to leds/arduino I recommend working through something like Adafruits Neopixel Guide first.

The sketch is using the FastLED library. So other LEDs can be used but this instructable will not include such modifications. Same goes for using an ESP8266 without logic level shifters and WS2812B.

For RTC communications the DS3232 library by JChristensen is used. So other models are supported (DS1307), I just didn't come across one without massive drift yet... ^^

Power usage/current is limited to 750mA inside the sketch. You may adjust this if needed and wiring/power supply can handle it.

Step 3: STL Files / Print Settings

Walls are multiples of 0.5mm. So I recommend using an extrusion width/line width of 0.5mm (using a 0.4mm nozzle myself).

I've printed everything at 0.25 layer height, good compromise between speed and looks.

No supports needed. Maximum overhang angle is 45°.

Step 4: Additional Information

Left this one blank in case I forgot something... ^^

Step 5: LED Frames / LED Strip

You'll need Frame_A, B and C to do this. While putting in the led strip you'll be watching at the clock from it's back. So Data In on the left side is what will be the right and 1st digit when looking at the finished clock.

It's important to align them in the correct order, otherwise you will run into trouble when reaching a certain point.

Frame_A is closed to the left side and the indents for clipping on the front parts are facing towards you / on the lower sides of the outer walls.

Frame_B is symmetrical and doesn't really care about it's orientation. It probably never heard of something like that.

Frame_C is closed on the right side, open to the center part on it's left. Here the indents for clipping on the front parts will show up/away from you.

Most led strips come at pieces of 50cm, soldered together to give up to 5 meters. So every 30 leds there will be one of those solder joints - which can't be bent by 90° or 180° as required on some spots. If you cut off the first one from a fresh strip you should have the first solder joint between led #29 and led #30. If that's the case, don't matter any more, all coming joints will fit inside without much trouble.

There will be 4 unused leds between every digit/dot, totalling to 16 (28 when using 6 digits). If you need those leds you will have to adjust the segArray inside the sketch and redefine SPACING_LEDS accordingly. Removing those 16 (28) leds will require a few dozen solder joints, so I think for the ease of build it's totally worth it leaving them in.

The led strip goes in on the left side of Frame_A. Make sure you're not mixing up Frame_A and Frame_C here, you'll have to remove the strip at one point if you do.

Route the strip along the outer walls through the upper 3 segments. Then do a 180° turn and return through the upper 3 segments, this time following the inner walls.

Afterwards route the wire along the upper wall from the center segment. Do exactly the same for the second digit.

When reaching the end of Frame_A put Frame_B in place and route the strip through the upper dot, following the outer walls.

Frame_C is like Frame_A - upper 3 segments outer/inner walls, center segment upper wall for both digits. After the center segment from the second digit inside Frame_C the strip needs to go to the lower right segment.

Now all of the above is repeated, just turned 180° around. So now it's the lower 3 segments, outside walls first, inside walls after that, ending at the lower walls from the center segments/lower dot.

Cut off the strip after the last/4th led inside the center segment on the left most digit.

I recommend testing the leds now...

Note: When I was taking the pictures I was using an old center module which had 16 leds. This was quite irritating as the size was the same as a regular "1", so I modified the center dots to be a bit smaller (12 leds). You can see the current version (12 leds) inside the gallery and later pictures/videos will show it.

Step 6: Testing the LEDs

The test sketch is limited to 500mA, so you can run it safely when powering an Arduino by USB and simply connect the LEDs to +5V / GND. Data In goes to Pin 6.

The test sketch will show up all 252 leds like can be seen in the video. Each led will be lit up here, so don't pay too much attention of light leaking out from the later unused leds between digits/dots.

Afterwards there's a demonstration of displaying 0-9 on each position and counting from 0-99 on the left/right side.

If you're planning to use the HH:MM display in your own projects you're ready to go. All you need is inside the test sketch, including segment and digit definitions and routines to display them easily.

If you'd like to build the clock as shown, continue to the next step...


Test sketch v1 has been replaced with v2. This one can be compiled for either Arduino or nodeMCU/ESP8266 and can be used for 4 or 6 digits.

Step 7: Front / Diffusers

Simply put in the diffusers of your choice inside the front parts and clip them onto the digits/dots. Watch for orientation on the digits, two of them (MM) have the indents for the snap fits on the lower walls, two of them (HH) on the upper ones. The front parts are symmetrical, simply rotate them by 180°.

While capturing the real impression of leds is quite tricky I tried to add a comparison of Type A/B. Type B offers almost some kind of fresnel effect when moving your head, starting from a distance of about 4m the difference between A/B is barely visible.

Step 8: Assembly

Additionally to the 3 wires from the test you'll need to add power to the other end of the strip. Depending on your choice of power supply/cable you'll need to route the wire through the hole inside the cover of Frame_A, like I did when connecting the USB wire.

After doing so put on all the covers on the led frames.

Put the electronics case on the back and put in all 8 screws. I recommend starting with the ones connecting the case to the center module. There's a bit of tolerances, so try to push the modules together, keeping them straight while tightening the screws.

If mounting feet/wall hook I'd suggest doing so after aligning everything and tightening the screws. If only the two screws are removed to mount feet/wall hook alignment should be kept, but aligning everything with the feet in place is a bit tedious.

All screw holes are 2.85mm in diameter. They only reach 7.5mm inside the frame parts, so don't use anything longer than 10mm when everything is in place. Top 1.5mm of the screw mounts are 3.25mm to avoid putting the screw in at an angle, this helps keeping it "straight down".

Mount the base for the cable cover. It's only using one screw and the other side is held in place by the electronics case. Route wires to the inside from the electronics case and put on the cable cover. You'll need to slide it on at a an angle from the side and then push it down after reaching the case.

No white paper on those pictures, when taking the other ones the cable cover didn't exist yet... neither did the spacer between rtc and arduino which can be seen in the last picture. And the wall hook still doesn't... ^^

Put screw #10 inside the outer most right hole to fix the cover.

Step 9: Electronics

The case should fit various combinations of Arduino Pro/Nano and RTCs (DS3231 for Pi, DS1307, DS3231). Or other microcontrollers if you intend to.

Schematics and connections are exactly the same as on my S7ripClock, so for details that's a good place to have a look at.

Depending on wanted brightness levels and power supply you might want to add capacitors near the led strip and the arduino.

Step 10: Lazy 7 / One - Arduino Clock Sketch

The software sketch is at version 6. That's because it is very close to the one I've been using for some of my other projects, so I didn't want to confuse this because of the redesigned "hardware" around it...

Basic usage:

  • Button A: Select brightness
  • Button A (long press): Switch color mode (per digit/per led)
  • Button B: Select color palette
  • Button B (long press): Switch 12h / 24h mode
  • Button A + B: Enter setup

While in Setup: ButtonB -> Increase +1, ButtonA -> Accept/Next

Or simply watch the video, usage instructions start at around 01:38.

After uploading the sketch (and possibly adjusting the power limit on top of it) you're done and good to go. In case of any problems set your serial console to 74880 baud and have a look at it to see what's going on. If the clock enters setup straight away and shows nothing it's likely the buttons are shortened/connected wrong.

For additional information you might want to have a look at my other designs, some of them (tiny edition) offer german instructions as well.

v6 offers support for nodeMCU/ESP8266 and WiFi/ntp, if desired. It's one sketch for 4 or 6 digits on either Arduino or nodeMCU (using rtc or ntp).

v7 available here:

Step 11: (Optional) 6 Digits - Prerequisites

If you'd like to add another two digits and a center module to display HH:MM:SS, here's how to do it.

While this does work, you will need another sketch. I had to modify the original one because of various reasons. Many variables had to be changed because now there's more than 255 leds. Also the sketch is now running pretty low on memory (88% with debug enabled). None of this prevents this from being used - but if you're planning to do modifications you may need to optimize memory usage (or use something else than an Arduino with 2048 bytes RAM, where's already 1164 used for the led array (388 leds x 3 bytes (r/g/b)).


The RAM situation doesn't change - but starting from v6 there is a single sketch for 4/6 digits, so please use the one from the step above. Also v6 can be compiled for nodeMCU/ESP8266 to use WiFi/ntp, if desired. The old seperate sketch has been removed. Uncomment "#define use6D" inside sketch to use 6 digits.

Oh... and when using 6 digits I recommend running this at least with 1.5A, otherwise you'll notice all digits darkening while the center dots light up (24 leds) even on the lowest brightness setting.

For 6 digits the following things are required:

STLs from this section:

  • 1x L7One_Frame_D.STL
  • 1x L7One_Cover_D.STL
  • 1x L7One_Diffs_D.STL (only Type 1 provided, 14x AC and 2x B ones)
  • 1x L7One_Connector.STL

STLs from the original files section above:

  • 1x L7One_Frame_B.STL
  • 1x L7One_Front_B.STL
  • 1x L7One_Cover_B.STL
  • 2x L7One_Front_AC.STL


  • 136x WS2812B LEDs
  • 8x M3 screws

LED Strip(s)

Frame_D doesn't care about orientation, just like Frame_B. So you only have to watch this when putting on the front parts, so the clips match up.

Start on the left upper segment, as before. But this time place the first led inside the frame before the first segment starts. Route the strip through the upper 3 segments as before, leaving the first digit after going along the upper wall from the center module.

Repeat this for the second digit and route the strip through the upper dot from the additional center module when reaching the end. Cut the strip after that as can be seen in the pictures.

Now simply rotate everything by 180° and start with Data In on the center part. Then along the first 3 upper segments from the first digit and so on...

When you're done you should have Frame_D with one strip running through the upper half and another one through the lower half. The upper one starting with Data In on the left side, the lower one starting on the right side. Put in the diffusers in the front parts and clip them on.

Done with the preparations, now let's connect everything...

Step 12: (Optional) 6 Digits - Assembly

Remove everything from the clock until you can safely remove the cover from the right (seen from the back) module and from the center module.

Note: I recommend removing the coin cell from the RTC while doing this!

Now cut the led strip right where it's leaving the center module, before entering the right module.

Move the right module further away until you can fit the additional Frame_D and center module between.

Solder all eight loose ends together and put everything back together (now may be a good time to upload the 6 digits compatible sketch from the previous step).

The plate holding the modules on the right side in place is different from the one I've uploaded. There's some small walls now to support the foot, which I've moved from the electronics case to the right side.

3D Printed Contest

Participated in the
3D Printed Contest

3 People Made This Project!


  • Pets Challenge

    Pets Challenge
  • DIY Summer Camp Contest

    DIY Summer Camp Contest
  • Backyard Contest

    Backyard Contest



Question 2 months ago

i have tried the test code and it is working fine
however, when i try to upload the code it shows this error msg:

Arduino: 1.8.13 (Windows Store (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
In file included from C:\Users\zzzzz\Downloads\S7ripClock_BE_v5\S7ripClock_BE_v5.ino:6:0:
C:\Users\zzzzz\Documents\Arduino\libraries\DS3232RTC-master\src/DS3232RTC.h:59:16: error: 'time_t' does not name a type; did you mean 'size_t'?
static time_t get(); // static needed to work with setSyncProvider() in the Time library
"""" removed the Extra part """
exit status 1
variable or field 'displayTime' declared void
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.


Answer 2 months ago


would you mind editing your post and cutting out the extremely long log entries? This makes browsing the comments a bit tricky for everyone...

This seems to be the relevant part:

"Arduino: 1.8.13 (Windows Store (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
In file included from C:\Users\zzzzz\Downloads\S7ripClock_BE_v5\S7ripClock_BE_v5.ino:6:0:
C:\Users\zzzzz\Documents\Arduino\libraries\DS3232RTC-master\src/DS3232RTC.h:59:16: error: 'time_t' does not name a type; did you mean 'size_t'?"

Is the information correct, are you compiling the S7ripClock-Sketch for a Arduino Nano? (This instructable is about Lazy 7 / One, so I have to ask to make sure what's going on here...)

Did you install the required libraries? Just recently I had some mails/messages about people being very "creative" including libraries. Please use the Arduino Library Manager and make sure the following libraries are installed:

DS3232RTC v1.3.0
Time v1.6.0
FastLED v3.4.0

(I've checked different versions and the current ones for Arduino and nodeMCU, both compile without any errors).


Reply 2 months ago

Fixed the previous comment .. and sorry for that
i downloaded the file from up top the one included in this page named : " L7One_Clock_v6-pre.ino"

also when the complie is done the pointer stops at this line

and the below msg is the last msg to appear
variable or field 'displayTime' declared void
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

i will try the libraries you mentioned above and get back to you


Reply 2 months ago

Thanks for fixing the previous post :)

The sketch you've linked is correct. But the error message was saying:


I just wanted to make sure you're using the right sketch here.

The test sketch did work for you? Then it's probably not a problem with the FastLED library. Let me know about the other two, maybe we have to add another test sketch to find out which one is causing the problems for you.


Reply 2 months ago

it is fixed

actually i was one of the "creative" people who installed a stupid library from the web XD XD
i delete the internet libraries and re installed them from the manager and it worked fine

however, now i am facing another issue
the clock is running out of sync .. in six hours it moved 10 minutes extra (i.e. now it is 4:14 and the clock says 4:24) how can i fix that

in regards to the error msg
maybe i copied the error from the other script because i wanted to try the other script to check if the error was from my end or something in the code
but it turns out that i was an idiot XD

thank you for an amazing effort


Reply 2 months ago

Great it's working. About the drift/running out of sync:

First thing to check would be if the RTC is working at all - does the clock reset to 0:00 when you unplug the power cord for a few seconds?

Sadly there's a lot of "bad" DS3231 clones out there. Some of them don't come with proper DS3231 chips, they're missing the temperature compensation and tend to drift quite a lot sometimes. Personally I had bad luck when buying small "DS3231 for Pi" modules, the bigger ZS-042 modules seem to be a safer bet here so far.

There is an example sketch for the DS3232RTC library, you can find it in your Arduino IDE (File -> Examples -> DS3232RTC -> SetSerial). This will report the RTCs time and the reported temperature (once a minute). If it's not showing the temperature then it's very likely you got a "bad" DS3231 chip.
Also you can use this to check the current time of the RTC and compare it a few hours later to another clock.

The sketch does sync multiple times per minute to the RTC. So if there's drift it's likely the RTC module itself, either by not working at all (inadvertently switched SCL/SDA lines happens quite often) or because it just isn't a proper DS3231 (clone)... :-/

If I remember correctly the "wrong ones" were labelled "DS3231M" and the proper ones "DS3231SN".


3 months ago

sir my button is not working, what can i do right now? i cant setup my clock, led just blinking...

WhatsApp Image 2021-04-16 at 1.16.33 AM.jpeg

Reply 3 months ago

There's only one digit showing on your picture - so this can't be the clock sketch running... what sketch are you running there?

What was the problem with the leds in your previous post?

What's the output from the clock sketch on the serial console?


Reply 3 months ago

on previous post i have wrong soldering in data out, I should solder in data in. that solve my problem, when i plug the led with power, LED run like a random but clock-shaped numbers. i cant push button to set up led.


Reply 3 months ago

What sketch are you runnning?
Are you even running the clock sketch at all or are you still running the test sketch?

Looking at your screenshot from the Arduino IDE and judging by the amount of memory in use this looks like the test sketch, not the clock sketch.

If the "random but clock-shaped numbers" do look like the test sketch from the video on top of this instructable - then you're still running the test sketch...

What's the output on the serial console/monitor (CTRL+SHIFT+M)?


3 months ago

sir, i have uploaded the sketch in adruino, and done uploading, but nothing happens with my led... help me sir...

WhatsApp Image 2021-04-16 at 12.33.47 AM.jpegScreenshot 2021-04-16 003459.png

Question 4 months ago

I love this clock! I'm using NTP, and we just switched to daylight savings time. I'm struggling to find where this is set. I don't see anything in the sketch that specifically addresses time-zone or daylight savings time. Thanks! (So, like in jeopardy - in the form of a questions... How do I change the time to adjust for daylight savings when using NTP?)


Answer 4 months ago

Ugh, I found it... Next time I'll look more thoroughly!!!

// #define timeOffset 120 // time offset to utc in minutes, 120 minutes -> CEST
// #define timeOffset -300 // time offset to utc in minutes, -300 minutes -> EST
#define timeOffset -240 // time offset to utc in minutes, -240 minutes -> EDT


Reply 4 months ago


please have a look at the thread from mondellinifabio below. I've added an edited version of the sketch there recently which will set time automatically using a "TimeChangeRule" from the timezone library.


4 months ago

Hi, i just ordered all the stuff needed to build the 6-digit version of this, and i noticed that your instructions sound a bit like you started with the 4-digit one, then cut the strips and added the additional elements in between. Can i safely assume that if i go with 6 digits straight away, i can just route the whole strip in one piece? Well, two pieces (5m+2m) actually, because i couldn't find a 10m strip. It looks like the data path / LED order would be exactly the same, just without having to solder all the cut parts.


Reply 4 months ago

yes, I started with the 4 digit one. It's been a while but if I remember correctly you should have no problems going for 6 digits using 5+2m... worst thing that could happen would be one of the solder joints sitting directly on an edge, requiring to cut and resolder it to avoid a 90° bend. :)


Question 5 months ago

hi, all your watches are fantastic .. and I chose to make the lazy 7 one with nodemcu at my son's request for his room ..
since I have never picked up Arduino and the like, I just thought of entering the sketch and the game was done .. to configure the wifi ..
but it's not really like that, reading your work is one thing and it seems that my cat can do it too, I start programming I'm a goat .. I printed everything I have all components already assembled the sketch test works for me, but now I'm stuck and I can't find a solution that is understandable to me ..
Ask your kindness if such a thing was possible .. I load sketch and he works? for now it gives me this error ...
C: \ Users \ sunflower home \ Downloads \ + One \ files \ L7One_Clock_v6-pre \ L7One_Clock_v6-pre.ino: In function 'void setup ()':
L7One_Clock_v6-pre: 205: 21: error: 'RTC' was not declared in this scope
setSyncProvider (RTC.get);
C: \ Users \ sunflower home \ Downloads \ + One \ files \ L7One_Clock_v6-pre \ L7One_Clock_v6-pre.ino: In function 'void setupClock ()':
L7One_Clock_v6-pre: 556: 5: error: 'RTC' was not declared in this scope
RTC.write (setupTime); // write setupTime to RTC
exit status 1
'RTC' was not declared in this scope


Answer 5 months ago

'RTC' was not declared in this scope

This usually means that nodeMCU/ESP is selected as a board type inside the Arduino IDE but the sketch still has "#define nodeMCU" commented out...

Both sketches (test & pre-v6) come with "#define nodeMCU" commented out, so if the test sketch did work for you (not using the RTC) you might want to check the "#define nodeMCU" in the clock sketch and/or the selected board type for compilation (Tools -> Board).

Were there any previous errors?


Reply 5 months ago

hello and thank you very much for the help response ..
the selected tab is right, and if I don't get it wrong I have to uncomment #define nodeMCU. and I think I did "I hope in the right mood" ..
I understand that maybe it's asking too much, but you could see that for you as far as I understand it takes a minute to send me the ino file. ready without making changes in the sketch for 4-digit nodeMCU wifi / ntp?
So I can see the comparison with the original sketch and where am I wrong!
ino esp8266.jpg

Reply 5 months ago

As far as I can see you removed "#define nodeMCU" completely instead of commenting it out...?

Please have a look at the instructions/video, it's shown exactly what to do if you want to compile this for nodeMCU: Here it is...