Introduction: GlassCube - 4x4x4 LED Cube on Glass PCBs
My first ever instructable on this website was a 4x4x4 LED Cube using glass PCBs. Normally, I do not like to do the same project twice but recently I came across this video of french maker Heliox which inspired me to make a bigger version of my original cube. In her video Heliox comes up with a much simpler process to manufacture glass PCBs that does not involve etching but instead she uses a plotter to cut the traces from a self-adhesive copper foil which is then transferred to a glass substrate. Since plotters are not that expensive and could also come in handy for other projects I just got one to try the process for myself.
Apart from being a bigger version of my original cube this version also uses a custom PCB based on a SAMD21 microcontroller and a housing made from lasercut acrylic. The cube can be programmed with the Arduino IDE and is also compatible with CircuitPython.
The GlassCube kit is now also available on Tindie.
In case you purchased the kit you only have to do solder the LEDs (step 5), assemble the housing (step 8) and interconnect the layers (step 9).
- 64 pcs - WS2812B 5050 SMD LEDs (e.g. aliexpress)
- 4 pcs - 100 x 100 x 2 mm glass plate (I found this really cheap German supplier which only charges 0.20 EUR/pc)
- 2 pcs - A4 sheets of self-adhesive copper foil (e.g. amazon)
- 1 roll - plotter transfer paper (e.g. amazon)
- 1 set - lasercut acrylic (see below)
- 1 custom PCB (see below)
- 4 pcs M2x8 screws + nuts
The total costs of all materials including the lasercut service and PCB manufacturing is about 100 EUR.
Step 1: CAD Design
The housing and PCB dimensions of GlassCube were designed in Fusion360, I have attached the design below.
The edge columns and top plate are made from 3 mm thick transparent acrylic. The layers with the LEDs are made from 2 mm thick float glass. The bottom plate is a custom made PCB.
Step 2: LED PCB Design
I used Eagle to design the layout of the glass PCBs. Since cutting the traces with a plotter is not as accurate as etching them with the toner transfer method the minimal trace width is limited. I tried different trace widths and found that 32 mil was the minimum size I could use as thinner traces often peel of during plotting.
In order to be able to cut the traces from the copper foil the board layout had to be converted to dxf. I took me a while to figure out how to do this correctly so let me go through the steps in detail
- open board layout in Eagle
- hide all layers except top layer
- click File->Print then select Print to File (pdf)
- open pdf in Inkscape
- use the path slection tool to mark a single trace then click Edit->Select Same->Stroke Style this should mark all traces (but not the pads)
- click Path->Stroke to Path this converts the path outlines to new paths
- mark all paths (including pads) by selecting the path selection tool and then pressing ctrl+a
- click Path->Union this should combine all paths and remove any cut-lines inside "filled" areas
- click File->Save As and select *.dxf as file format
The dxf file can be found here on my GitHub.
Step 3: Cutting the Copper Foil
The dxf file was cut from A4 sheets of self-adhesive copper foil with a Silhouette Portrait 2 plotter. The copper sheets were first attached to the included self-adhesive cutting mat. The software settings that I used for cutting can be seen in the attached picture.
After cutting the excess foil has to be carefully removed. In order not to damage the cut foil I left the whole A4 sheet on the cutting mat for the following steps.
Step 4: Transferring the Copper Foil
The cut foil was transferred onto the glass plate using transfer paper which is just another self-adhesive foil. The transfer paper is attached onto the copper foil and then slowly peeled off so that the copper foil keeps sticking to the transfer sheet. Then it gets attached to the glass substrate and the transfer paper is slowly peeled off so that this time the copper foil sticks onto the glass plate.
The board layout has two markers in the upper left and right corners which help to correctly align the foil on the glass plate. After attaching the markers can again be removed from the glass plate.
Step 5: Soldering the LEDs
The SMD LEDs were soldered onto the glass plate by hand. I also tried to attach them by using a heat plate (actually my stove) but as the picture shows this turned out to be not a good idea. If you have a proper reflow oven it might be worth a try but depending on the type of glass that is used there is a serious risk that it will break during heating.
Concerning the orientation of the LEDs there are two different layouts. For the first and third layer of the cube the orientation will be different than for the second and fourth layer. In this way it is easier to interconnect the layers later.
Step 6: Microcontroller PCB
Instead of relying on a commercial development board like the Arduino Nano, I designed a custom PCB in Eagle for controlling the LEDs. The adavantage is that I could shape the board so that it fits nicely into the cube. The board is based on a ATSAMD21E18 microcontroller which is the same one that is used in Adafruit's Trinklet M0. I selected this MCU because it has native USB and does not require an FTDI chip for programming. Also Adafruit provides bootloaders that are compatible with the Arduino IDE as well as CircuitPython.
One note about the board is that it works with 3.3V logic while WS2812B should be used with 5V, however, many people have shown that operation with 3.3V is also possible.
With some skills the SMD components on this PCB can be soldered by hand although a heat plate or reflow oven will of course work better.
Step 7: Flashing the Bootloader
I used the UF2 bootloader provided by Adafruit for their Trinket M0 boards. The MCU was flashed with the help of a J-Link tool. Detailed instructions on how to flash the bootloader can be found on the Adafruit website. The great thing about Adafruits UF2-SAMD bootloader is that after first installation, the MCU appears as a flash drive and you can just drag a UF2 file onto the removable drive to flash it again. This makes it very easy to e.g. switch between the Arduino IDE and CircuitPython.
Step 8: Lasercut Housing
The housing of the cube was cut from 3 mm thick transparent acrylic. I used an online laser cutting service (snijlab.nl). The corresponding dxf files can also be found on my GitHub account. The housing consists of 4 posts and a top plate. The posts are attached to the main PCB on the bottom using 4 pcs of M2x8 screws and nuts.
Step 9: Connecting the Layers
After the housing was assembled I connected the layers by soldering wires onto the pads on the glass PCBs. This turned out to be quite a delicate procedure and there is a risk of burning the acrylic or ripping of the copper pads. Note that the GND and VCC pins switch positions on every layer so the wires have to be crossed. To avoid that the wires ripp off the copper pads I fixed them with a small drop of hotglue after soldering. The first layer was connected to the bottom PCB with a Dupont connector but the wires can also be soldered directly to the PCB.
Step 10: Uploading the Code
I used CircuitPython (version 4.x) to program the cube. Once you have installed the CircuitPython bootloader you can just run code by saving it directly to the MCU flash drive. There is no compiling necessary also you can e.g. reopen the code and edit it.
So far I have just created some basic animations but it should be relatively easy for anyone to extend the code. The code can be found on my GitHub, to run it needs the Adafruit Neopixel and fancyLED libraries found here.
Step 11: Finished Cube
I am quite happy with the look of the cube, the glass PCBs and acrylic housing work nicely together. It was also fun to create my own MCU board for the first time and I am almost surprised that it worked out on the first try. Since I have some spare PCBs and acrylic parts I would like to make this cube available as a DIY kit on Tindie. So if you are interested keep looking out for it or just write me a private message.
Also if you like this instructable please vote for me in the Make It Glow Contest.
Runner Up in the
Make it Glow Contest