MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now


Lazy Grid Clock

by parallyze Nov 27, 2018
Download All Files

Please Login to Comment

Yes, but how straight?

Just read the manual for the slicer you are using... or simply rotate the part by 45°....


How to not print a solid 1st layer? Set bottom layers to 0. It's all shown in the video (Cura)...

Comments deleted.

Hey! Great Project!

I made a YouTube video about this clock and wrote some code to make it Wi-Fi and Alexa controlled. I also added in NTP functionality for setting the time and a WiFi config portal for initial setup.

YouTube Video: https://www.youtube.com/watch?v=EQLDNrSjHa0
Github Code: https://github.com/thehookup/Alexa-Enabled-LED-Clock

Thanks for all your great work!

I made all connections properly and now is a time for uC programming.

I tried load both sketches but result is always the same. 5 blue pixels in 3rd column. No reaction on buttons :(

Nano clone 3.0 board
lastest CH340 drivers
IDE 1.8.5
board: arduino nano
processor: Atmega 328P (old bootloader)
-fastLED 3.26

That's strange. None of the sketches should start drawing in the middle somewhere...

Does it output anything on the serial console (should say something like "Lazy Grid Clock - v1")?

Within the LGC_Basics_v1.ino script, rename void loop() to something like loop2() and create a new one:

void loop() {
leds[0].setHSV(0, 255, 200);
leds[0].setHSV(0, 0, 0);

This should make the first led (lower left corner) blink without using anything than basic functions.

Nothing changed :/

Compilation throw following warnings:


Mouse.h:29:2: warning: #warning "Using legacy HID core (non pluggable)" [-Wcpp]

warning "Using legacy HID core (non pluggable)"



FastLED.h:14:21: note: #pragma message: FastLED version 3.002.006

pragma message "FastLED version 3.002.006"

I didn't include Mouse.h in any sketch - so this warning shouldn't be popping up.

The pragma/FastLED message can be ignored, it's more informational than an error.

What about the serial output? The leds are connected to +5V (not VIN), GND and D6 (DataIn) on the Arduino?

You'll need to check which of the components is making trouble. Does the Arduino run other simple sketches, like the blink example?

OK. I made blink sketch and nothing changed :/

+5V from external supply is connected to +5V on the board, VCC on D3231, +5V LED
GND > GND on board a, GND on D3231, GND LED

A4 > SDA
A5 > SCL
D6 > thru 320ohm to LED
D3 > 1st button > GND
D4 > 2nd button > GND

Schema is very simple. Broken board? Strip?

Nothing changed? So the blink sketch doesn't work or what do you mean? How about serial output?

I remember someone having a broken arduino on the comments somewhere... but that's pretty rare. If the blink sketch doesn't work this might be possible, though. I still wonder about that mouse.h error. Mouse.h can only be used on 32u4 based boards, so this absolutely doesn't belong there.

I'd check the arduino (basic stuff, blink sketch, serial i/o), then check the leds next (try connecting without resistor, maybe that one's broken (or you may have been delivered the wrong type/resistance?). I'd recommend disconnecting all other stuff (buttons + rtc) and testing one by one.

I think LED strip is broken. Data has been disconnected. Still the same 5 leds are on :(

They will keep the current state as long as power is running through them, that's not an indicator for a defective led strip.

What power supply do you use? I see that one meter of 60led/m strips can take above 3amps! :/

I'm using 1A phone charger right now.

Doesn't matter as power usage is limited to 500mA within the sketch. The basics-sketch doesn't draw anywhere near to that and can be powered ober USB. 60 ws2812b can draw up to 3.6A,yes. Spec is 60mA/each for full brightness on r/g/b (white).

EoD for me. You're not answering any questions, you're not trying to figure out if it's the Arduino by running the Arduino blink sample.

Sorry about that. I was tired yesterday evening. Fortunately, it was possible to start the clock. I had to improve the power supply (parallel capacitor installed near led stripe make power more stable).

Is it posible to share editable models (i.e. STEP format)? I want to make second clock in bigger scale and make some improvements (wall mount)

Great you got it working without having to replace parts! :)

I don't publish my source files or STPs, sorry. Wouldn't adding a wall hook to the upper holes work? Just some kind of bar between two holes on the top. The inner holes have a distance of 80.525mm, the outer ones 139.675mm. Between inner/outer there's 26.725mm.

For anyone interested, here's a port of this code to ESP8266. It's incomplete but at least it gives the time! https://github.com/hjf/LazyGridClock

Can you tell us how to get this open infill effect on front bezel? I have no idea how to do this in Cura.

Here we go: https://youtu.be/RjXbr_ZxQjM
At 0.2mm layer height just change settings to 0.8mm top height/4 layers and the bottom ones to zero. Reducing top layers to 3 gives you 2 layers for open infill.

And because I was at it: https://youtu.be/-q0U3GTte90 replaced by: https://www.youtube.com/watch?v=1hZofhkjUFs
Set wall width/extrusion width to 0.6/1.2 as recommended for most of my things. This will reduce print time by quite a few hours and will give better parts (2x 0.6mm walls touching each other instead of 2x 0.4mm walls with infill).

Advanced/Expert mode has to be activated within Cura, I just recorded the window so this is not visible in the video.

Edit: Using a 0.4mm nozzle at 0.6mm is no problem, just don't set layer height/speed to high :)

Good question... I haven't used Cura for years, just downloading 3.6...

I built this one with the strip I had on hand, some APA102C strip. Unfortunately this one doesn't close completely since this strip is 12mm wide. It works great though and I modified the source to run on ESP8266 and query NTP time. Do you have the code on Github so I can PR my changes? with some #define magic we can make both modes work.


yes, the grid was designed with only the 10mm ws2812b strips in mind. Scaling the frame part along Z should be working...115% along Z would give 12.075mm for the strip. :)

There's no code on github or similar, just the stuff here on thingiverse. I'm not looking for an esp8266 port, so at this time that's nothing I'll put time into. But thanks for the offer!

I plan on starting this project soon, but I was wondering what the thickness of the strip is, because you can get different IP ratings / thicknesses on Ali express for example.


Thanks in advance!

There's only 2.1mm space between the grid cells to put in the strip. IP30s are the only ones which will fit without modifications (they're only around 1mm thick between the leds, ip65/67 have a constant thickness). Additionally the ip65/ip67 are quite hard to bend around the corners.

I am currently assembling this awesome project and it seems that the file for the little bar that holds the pushbuttons is missing here as well as in "Grid for LED strips w/ clock example".
Thanks for your work!

I have an other problem, the code v4 is too large for the arduino nano:
"Global variables use 1076 bytes (105%) of dynamic memory, leaving -52 bytes for local variables. Maximum is 1024 bytes."

Maybe there are some newer versions of a library so its larger for me?

Hi fipsthedog,

the two parts to hold the buttons in place are included. You can see them above the lid part, two small rectangles with a circular cutout. I've changed that from a bar months ago, so maybe you saw one of the older pictures for the Grid Thing. If you look at the picture under "Electronics/Electronics Case" for the Lazy Grid Clock you'll see them on the top left, just above the case.

The memory problem is a bit confusing because of one thing: Arduino Nano with ATMega328 do have 2kbytes of ram. I've just compiled the sketch again, this is what it looks like here:

"Globale Variablen verwenden 1092 Bytes (53%) des dynamischen Speichers, 956 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes."

So I'm wondering why your IDE only shows 1kb of ram for the nano... Did you select the right board/processor inside the Arduino IDE (Arduino Nano -> Atmega328P)? Maybe you've selected an Atmega168P, I think they only do have 1 KB of SRAM.

Specs should be: 32 KB Flash, 2 KB SRAM, 1 KB EEPROM
https://store.arduino.cc/arduino-nano (Tech Specs)

Hallöchen parallyze,

Thanks for your answer, after reading your comment, I found my mistake: I split up the parts and simply forgot to save it into a separate stl and therefore did not print it. ':D

It seems that the Nano I had lying around is a Atmega 168 with 1K SRAM. I fixed it by removing all serial.print("STRING") commands wich resulted in about 20% decrease of size, so now everything fits and works very well.

Thanks again! :D

:D :D

Removing those serial commands probably made the serial.h library completely useless and prevents it from getting compiled at all. I'll try to keep that in mind for future revisions!

Hätte vorher mal auf dein Profil schauen sollen. ^^
Übrigens kann ich das noch toppen mit den "Plättchen" für die Buttons: Hab mal ´ne neuere Revision exportiert und beim Slicen vergessen, die Dinger daneben zu legen. Hab sie dann direkt an Ort und Stelle mit reingedruckt... määähääh.... xD

It really seems that shortening the strings was enough, as at first I just shortend them to one letter and this already decreased size a lot :)

Haha, das haste fein gemacht! :D
Noch mal vielen Dank für die großartigen Projekte die du hier hochlädst!

The way Arduino allocates memory makes it load all hardcoded strings into RAM by default. To avoid doing that, replace Serial.print("string") with Serial.print(F("string")) the F("") part makes it load strings from FLASH memory instead of RAM.

Looks good - nice idea. If I may suggest one change (or addition, rather - if I had the time, I'd do it myself): use a D1 mini/nodeMCU ESP8266 instead of the bare Arduino and have it use the time through your WLAN.

Thanks. I get that suggestion quite often - but still somewhat refuse to do so. I like the projects being as simple as possible. And this just doesn't apply to something which is dependent on many sources: WLAN, ISP, DNS and last but not least a reliable ntp source. Additionally a Wemos D1 uses a logic level of 3.3 volts vs. the 5 volts of the WS2812B (logic level, not supply voltage). While this does work most of the time, I wouldn't publish something like that without using a logic shifter. And for the price of that I can have a DS3231 rtc module which keeps time pretty well... ;)

Also I give those clocks/things away sometimes... and sometimes those people don't even have internet access at home (or at the garage). One of the last things I want is people calling me whenever they swap their routers and don't know how to connect the damn clock to it again... ;)

But the sketch is commented and everything is done in seperate functions. So if somebody wants to port this to a wemos, he could just take the arrays (led/digit defintions) and the function to draw them..

:-) The last part I can understand. And for gifts, for me, the largest obstacle would be the need to hardcode the network password (or finally get WPS to work...).

For the rest, some clever people have found a few elegant solutions (not me, I just use them): a regular http response already contains the server time in the header (at least one of the time libs can use that), that takes care of the ntp, and running a (one of the) WS2812 at 4.3 Volts (5 Volts minus one diode) puts the 3.3 V logic level within the specified tolerance, while keeping the output within the tolerance of the 5 V LEDs.

Yes, there's a few solutions out there. But nothing lasts forever - and getting back a bunch of clocks just because they can't synchronize time over the internet any longer doesn't sound like fun. Let it be some kind of change on http vs https, the domain you're querying, maybe some DNS/DNSSec changes coming. I just don't see any benefits using a nodeMCU based clock... if I wanted greater accuracy I'd add a DCF77 receiver. It's easy to connect and there's libraries out there. Remember, this project is aimed at beginners.
And there's quite a lot of clocks online here on thingiverse running on nodeMCUs... so the more advanced people should be able to puzzle together what they like :)
And while I will help out if someone needs help porting something else to one of my things used as a display - personally I just don't like the limitations of internet connected clocks, so I'll probably never publish something like that. If a project required a nodeMCU/WLAN (sending status messages from a RasPi for example), that might be different.

Awesome! Thank you for all the work you put into this tutorial!

  • Posted with 3D Geeks Thingiverse Browser App

Thanks :)

But keep in mind you have to check my other things for documentation on the electronics :)

Edit: Added schematics and the video directly to this thing, so people don't have to click through 3 different things.