ArClock - a Smart Display Wrapped in Real Wood

25,914

353

129

Introduction: ArClock - a Smart Display Wrapped in Real Wood

ArClock is my updating of the "LED clock inside a block of wood" idea. It's a pretty simple build and the result is eye-catching but tasteful (depending on how it's configured!).

It's built around a WiFi-enabled microcontroller driving a matrix of addressable RGB LEDs, inside a 3D printed case covered in wood veneer. It uses a NTP to display accurate time, and can also display local weather and ping times. The configuration is all via a built-in web interface.

Check out the video for a quick intro on how to build and configure it:

Supplies

The parts required are:

Total parts cost is around $32. You'll also need:

  • Access to a 3D printer with a sufficiently large bed. I designed this to support common printers such as Prusa i3 and Creality Ender 3, but if you have something smaller please do check before going any further.
  • Some hookup wire rated for at least 4A (e.g. 22 AWG).
  • A 5V power supply with 2.5mm jack. I'd suggest a good quality 4A supply with over-current protection, but it depends on how bright you want the display. 2A is probably adequate in practice, but I prototyped with an 8A supply (after my original one blew up when the brightness went too high!).
  • Contact adhesive such as Thixofix.
  • Polyurethane wood varnish (I used one coat of Yacht varnish and two of clear).
  • Sandpaper of a couple of different grits (around 120 and 200).
  • Soldering iron & solder.

Step 1: Printing

The design prints in just two halves. The STLs and the OpenSCAD source code are available here:

https://github.com/mattaubury/ArClock

The slicer and printer settings don't matter too much, but I went with:

  • 100% infill
  • 0.2mm layer height
  • Brim for bed adhesion
  • White PLA
  • 210° nozzle
  • 60° bed
  • 40 mm/s

This is a relatively large design, so at these settings it will take over a day to print.

You should use whatever settings print cleanly on your machine. The surface finish doesn't matter very much (we'll be covering it up later), but you want to avoid significant blobbing or stringing as this can make it difficult to insert the LED matrix.

Step 2: Electronics

The circuit is relatively straightforward.

We wire power from the DC jack directly into the matrix. Because the matrix is quite large I supply power at all three of the available points (input, output and middle of the matrix).

Power is also supplied from the jack to the ESP8266 board via the diode. This allows the final design to be powered from a single jack, but means that when programming the ESP8266 over USB we don't pass power from USB to the matrix (which can easily draw >4A, far beyond the limit of the USB connection).

The only other connection is the single wire control signal from the ESP8266 to the matrix.

I used 90 degree headers on the ESP8266 to make soldering it together easier, with heatshrink to keep everything neat.

There is some advice on the internet (e.g. https://learn.adafruit.com/adafruit-neopixel-uberg...) that suggests using a decoupling capacitor on the matrix, and adding a resistor between the ESP8266 and the matrix control wire. I haven't used them here, but would suggest at least using the decoupling capacitor.

At this point I'd would skip ahead and program the ESP8266 to check that everything works as expected, before continuing with the assembly.

Step 3: Assembly

To assemble, start by screwing the ESP8266 board onto the base. You'll need a couple of small self tapping screws - I scavanged mine from some defunct equipment; they're quite common for mounting PCBs in things like kids toys. Check that the Micro-USB connection is accessible from the bottom of the case.

Now slide the LED matrix into the main part of the case. It's something of a tight fit (perhaps I should have allowed a little more space!) but it will fit with a little gentle persuasion. If you're struggling, try curving the short ends of the matrix very slightly. As you slide it in you might find it catches - often this is because one of more LEDs has wedged itself in one of the case holes. Gently poke it with a screwdriver whilst applying pressure to the matrix and you should find it slides in okay.

Now insert the DC jack. The lugs on the jack should be bent at right angles, and you may need to gently open the case up a little to fit the jack in. If you struggle to get it through the hole, just open it up a little with a knife.

Once that's in, make sure the connections to the matrix are secure, place a thin line of superglue along the fin of the base, then slide the base into the main body. Hold it securely for a few seconds and you're done.

Step 4: Applying the Veneer

Cut the veneer into pieces large enough to cover each of the front, back, top and sides of the case, with a decent margin around the edge (say, 1cm). In the rear piece, make a hole just big enough for the power connector to fit through in roughly the right place. You may also choose to add veneer to the bottom edge.

Proceed in stages, applying first the rear layer, then the two sides, then the top, and finally the front. You'll need to allow the glue to dry after each stage, then trim and sand, so this will take a while.

For each stage, apply a thin coat of contact adhesive to both the case and the "inner" (paler) side of the veneer. This can be a messy process, so wear gloves and ensure you have excellent ventilation. Wait ten minutes until the adhesive is touch dry, then bring the veneer and case together and press firmly all over to ensure good contact, particularly around the edges. You might choose to clamp the veneer whilst the glue dries (I didn't), but take care not to use too much pressure as the veneer can be easily damaged.

Allow a couple of hours for the glue to dry, then trim the veneer with a sharp knife. Don't try to trim it exactly, leave around 1mm margin. Then, use a medium grit sandpaper (e.g. 120 grit) to sand the veneer flush along the edge.

Once you've applied veneer to each (visible) side, it's time for the finishing touches.

Step 5: Varnishing

Before varnishing, remove any excess adhesive around the edges, rub down the body with a fine (200 grit) sandpaper and clean off any dust or marks with a little white spirit.

The choice of varnish is very much a matter of taste - it's worth experimenting on veneer off-cuts to find a combination you like.

I found the maple too pale by itself, so I applied a single coat of yacht varnish which has a orange tinge to it, bringing it closer to oak in shade. I then applied two coats of clear satin polyeurethane varnish to get a nice finish, rubbing down with a fine (200 grit) sandpaper in between coats. Follow the instructions on your chosen varnish for drying and re-coating times, and remember to work in a well ventilated area.

Allow the final coat to dry fully then fit the nut on the power connector to secure it in place.

Step 6: Programming

First, install the Arduino IDE and add the ESP8266 package as described here: https://github.com/esp8266/Arduino

Select the "LOLIN(WEMOS) D1 R2 & mini" board.

Add the following libraries in the Library Manager:

  • ESP8266-ping
  • Adafruit GFX Library
  • NeoPixelBus by Makuna
  • FastLED

Then compile the sketch from GitHub (in the ArClock subdirectory):

https://github.com/mattaubury/ArClock

If you've never used an ESP8266-based board before, you will need to install the CH340G driver, e.g. from here https://sparks.gogo.co.nz/ch340.html.

Plug the board into your computer. Select the port in the IDE, and download the code to the board.

Now connect 5V power via the DC jack.

Step 7: Configuration

Once plugged in, ArClock will briefly show a blue animated WiFi logo, which indicates that it has created a temporary WiFi network.

Connect to this network on your phone - after a few seconds you should see a page which lets you enter your network name and password. Make sure you click done, then click the reboot button to restart the clock.

If all has gone well, you'll see the WiFi logo turn green and after a second or so the clock should display the current time (in UTC). If there's a problem, the clock will give up after 30 seconds and create it's own network again.

Assuming it's succeeded, point your browser to http://arclock.local to connect to the clock. From here you can try out various presets and tweak the appearance of the clock.

In order to get weather data, you'll need to enter your location and get a free key from https://openweathermap.org/.

You can automate changes to the display via webhooks. For example, to display a message you can use:

curl   http://arclock.local/show   -d message="Your Message Here"

Or to change the brightness:

curl  http://arclock.local/update  -d brightness=10

Step 8: Closing Thoughts

Thanks for reading this far! I hope you're tempted to build an ArClock, please let me know how you get on in the comments below - I'm happy to answer any questions!

A few thoughts on the design:

  • The OpenSCAD code can be tweaked with various parameters - it should be possible to modify it to support other boards or vary the curve of the display.
  • I tried a few different wood veneers before settling on maple. I'd strongly suggest going with a pale wood with only light figuring, otherwise it will block much of the light. Even oak gives a strong cast which filters out almost all the blue light.
  • The code is reasonably well commented so it should be easy to tweak the behaviour and add new features. But note that RAM is very short on the ESP8266 and the code already uses most of it.
  • Note there's no authentication whatsoever, so ArClock should only be used on trusted networks!

9 People Made This Project!

Recommendations

  • DIY Summer Camp Contest

    DIY Summer Camp Contest
  • Backyard Contest

    Backyard Contest
  • Fruit and Veggies Speed Challenge

    Fruit and Veggies Speed Challenge

129 Comments

0
amarston
amarston

2 days ago

Hi Matt,
Great instructable thanks. I have hit a problem compiling the code as it tells me that "Pinger.h no such file or directory", I searched Github and tried a random Ping file but that hasn't worked. Nobody else seems to have had this problem so I am confused as to what I'm doing wrong. Any help would be very much appreciated. Thanks.

0
Matt Aubury
Matt Aubury

Reply 1 day ago

Hmmm. I've just tried installing and building completely from scratch on a new machine and not had any problem. My guess is that you're missing the ESP8266-ping library. If you go to Tools > Manage Libraries you should be able to search for it and add it from there.

Let me know how it goes,
Matt

0
amarston
amarston

Reply 1 day ago

Thanks for getting back to me so quickly. The ESP8266-ping library is installed which is why I'm so confused. Checked again and still the same error when compiling.

ArClcok.PNG
0
gevans13
gevans13

7 days ago

***EDIT***
Having updated various libraries ( I don't understand how it worked before...) it now uploads....and works :-) Phew. Still as nice as the first one, Thanks.

So I successfully built THREE of these clocks 9 months ago and they are all working fine. Needing another for my second son I'm trying to compile and download the code to a LoLin NodeMCU V3 as I used on my last clock. But my IDE is now failing at ESP8266WiFi.h No such file or directory. I'm not a regular user of Arduino, but as far as I'm aware I MUST have downloaded and used these files last time just fine. Very odd, suggestions welcome...
Thanks
Gareth

0
Matt Aubury
Matt Aubury

Reply 1 day ago

Glad you got it fixed and happy to hear you're still enjoying your clocks!

0
cferro2002
cferro2002

Tip 3 months ago

Hello Matt. A fantastic project but I have a problem. I used WS2812B led strips instead of the matrix you say but following the aliexpress configuration. The time does not come as it should. I think your programming is for a vertical matrix. Do you have any way to fix it? Thank you.
Carlos

Screenshot_2021-04-26 4 15€ 20% de DESCUENTO Panel de luz LED Pixel WS2812B RGB, 62 LED, WS2812B ECO, 64 LED, 256 LED, 8x8,[...].png20210426_234203.jpg20210426_234033.jpg
0
Matt Aubury
Matt Aubury

Reply 3 months ago

Hi Carlos!
This shouldn't be too hard to fix. The line you'll need to change is https://github.com/mattaubury/ArClock/blob/main/Ar... - you'll want to put in a different topology. Based on this page https://github.com/Makuna/NeoPixelBus/wiki/Matrix-... I think you'll need to have:NeoTopology<RowMajorAlternating270Layout> topo (PanelWidth, PanelHeight);But you might need to try a few before you hit on the right one!
Good luck & let me know if you have any problems.
Matt

0
cferro2002
cferro2002

Reply 2 months ago

Hey Matt!
Thanks for answering so quickly. I already modified the line for "RowMajorAlternating180Layout" and it worked !!
Thank you so much

0
gevans13
gevans13

5 months ago

I like having temp displayed along with time so leaving no room really for seconds.Is there a way to make the Hours:Mins cursor flash every second (toggle every second) just to show its still 'alive and well' :-)

0
Matt Aubury
Matt Aubury

Reply 5 months ago

Hey Gareth - good idea! I've just uploaded an updated version of the code where you can use a semicolon (;) in the format to get a flashing colon in the time.

0
gevans13
gevans13

Reply 4 months ago

Thanks Matt, JUST what I wanted. I've designed a straight/flat screen/support that uses a piece of 3mm acrylic as the backing and a piece of white diffuser plastic removed from a flat-screen TV for the front part. To get it on my printer I had to do it in two halves, joining them in the middle with 3 pieces of 1.6 welding rod. It works :-) Son got his in the post on Monday and likes it too :-)

0
gevans13
gevans13

5 months ago

So pleased with the first unit I made for my wife's birthday I have embarked on building three more, Now I have the Wemos (V3.0) and the LED panels here from AliExpress I set about programming a second unit. I changed the name from arclock to arclockxxx and successfully 'logged' into it via my PC's Wi-Fi (PC internet via RJ45 usually), adding the SSID and password. When I clicked re-boot all seemed OK, the Wemos system rebooted but I now have a fast flashing BLUE led on the Wemos board and nothing displayed on the LEDs. A google suggests I have a 'bricked' unit, but I can still re-programme it with Arduino IDE and windows 'bing-bongs' when I plug it into my USB. Any suggestions? I tried it with a second Wemos and the same thing happened??
Very strange. The first unit for my wife has been no problem …..
Any suggestions/resultions or similar experiences welcome.
Thanks
Gareth.

0
gevans13
gevans13

Reply 5 months ago

Thanks Matt, they were VERY cheap from AliExpress, so cheap that one did not have its USB connector properly soldered onto the PCB - so no QC involved there then ;-). (I suspect something isn't quite up to spec on them too, causing the Blue light of death....) So I reached for some Lolin NodeMCY V3's that I had - apparently the same (code wise, did not have to change anything in the Arduino IDE) but physically larger and with loads of I/O brought out). This programmed as expected and after renaming the Arclock to Arclock2 as you suggested, promptly worked as I'd hoped. I'm now designing/making a straight case for it, in two halves, with end-cheeks to hold the layers together as it won't fit my printer otherwise. Confident now I can build the two extras for my sons and that they will work. Thanks for sharing a lovely project :-)
I have also built this one (as I had all the parts) https://www.instructables.com/Desktop-Equinox-Cloc... and this one too https://www.instructables.com/Wol-Clock-ESP8266-12... so I think I'm sorted for timekeeping ;-)
Gareth

0
gevans13
gevans13

5 months ago

Now I'm building one for myself I'm wondering if one of the spare digital inputs could be used to select "play the chosen message" but interspersed with the time? I'd like the option for an unknown number of message cycles, but interspersed with the time, sort of 50-50. Any suggestions?
Thanks :-)

0
Matt Aubury
Matt Aubury

Reply 5 months ago

Hi Gareth,

The webpage already has the option for message repeat interval, so getting it to display it interspersed with the time should work already. To automatically select the message from digital inputs I think you'd just need to check the state of the pins in the loop() function (in ArClock.ino), and if they have changed since the last loop, call show_message() with the text you want to display.

Hope this helps!
Matt

0
gevans13
gevans13

Reply 5 months ago

Hi Matt, I can't see any option for time based repeat, just how many times to send the message. Has there been an update? (Clock was programmed around 25th January) (Still testing this on my wife's clock ;-))
Thanks.
Gareth

Arclock.PNG
0
gevans13
gevans13

Reply 5 months ago

Aahh, twigged it, the REPEAT box is the repeat delay, not the number of times to send the message......thanks, that will work perfectly for my needs :-)

0
Rob Groenewegen
Rob Groenewegen

5 months ago

Hi Matt,
It took a while, but now I have a flat one, and I also made a double, with 2 LED panels and 2 Wemos, where you can put the time and the date under each other.

In this housing, the DC connector turns 90 degrees in, so you can mount it flat on the wall.See the pictures, if someone wants them, just send me a PM, and I'll send them to you.

I'm still trying to get the C to the temperature.And what I would still like is to measure the indoor temperature (using DS18B20 from Dallas or the like) and make this visible.And then something to do with 3 panels, but that doesn't work yet.
Greetings,
Rob

20210204_123444 (002).jpg20210204_123502 (002).jpg20210204_123544 (002).jpg20210204_123558 (002).jpg
0
Matt Aubury
Matt Aubury

Reply 5 months ago

Nice work! Looks great :)