EFM8BB1 Kinetic Light Triangles

by aidenvigue in Circuits > LEDs

8165 Views, 140 Favorites, 0 Comments

EFM8BB1 Kinetic Light Triangles

IMG 0208
IMG_0199.jpg
IMG_0204.jpg
IMG_0206.jpg
IMG_0193.jpg
IMG_0191.jpg

I was inspired to make these after I saw the Nanoleaf light triangles in the store, but I was disheartened to see that each tile cost twenty dollars! I set out to make an equivalent product, but to keep the price per tile around three to four dollars. This project isn't complete, as I still need to have the controller PCBs made, but I currently have 50 tiles assembled and working.

I have seen other projects that try to replicate this product, but none that I have seen so far allow for any tile to be connected in ANY direction, allowing for more complex designs and easy rearrangement.

This is my first Instructable, please leave a comment if you have any questions!

Supplies

Each tile requires:

  • 1x EFM8BB10F8G-A-QFN20 microchip (Digikey)
  • 9x WS2812E LEDs (LCSC)
  • 1x AMS1117 5.0v voltage regulator (LCSC)
  • 1x AMS1117 3.3v voltage regulator (LCSC)
  • 1x SOD-123 1N4148 diode (LCSC)
  • 1x 10k 8050 resistor (LCSC)
  • 11x 0.1uf 8050 ceramic capacitor (LCSC)
  • 2x 10uf 16v surface mount electrolytic capacitors (LCSC)
  • 1x custom PCB (JLCPCB)
  • 12x TE Connectivity 2329497-2 PCB Spring Fingers for enclosure
  • 1x Linker PCB

The controller (in progress) requires:

  • 1x ESP32 DevKit-C
  • 1x 12V power supply
  • 1x DC-DC stepdown (to power the ESP32)
  • 1x 10K ohm resistor
  • 1x 1n4148 diode
  • 2x SPST pushbuttons (LCSC)

Tools:

  • Soldering iron
  • Reflow oven
  • 3D Printer (for enclosure)
  • J-link EDU programmer
  • Wire strippers / cutters / assorted wire (to make programming harness)
  • Fine tipped tweezers for assembly
  • Blank PVC card to spread solder paste
  • Leaded or lead free solder paste

Order PCBs

Annotation 2020-08-08 200758.png
IMG_0167.jpg

The tile PCB was designed in EasyEDA and was sent to JLCPCB for fabrication. I ordered 50 PCBs because it was actually cheaper to order 50 than it was to order only 10 of them. The PCB was split into 3 pieces to keep production costs down.

I used the production options of

  • 1.6mm thickness
  • HASL surface finish
  • 1oz copper
  • White soldermask

I have heard that you can link your JLCPCB and LCSC orders so you only pay shipping once, but I was unable to figure it out. I used the cheapest shipping option and both packages came within two weeks of the order date.

The design is linked here

Prepare Work Area

IMG_0178.jpg
IMG_0176.jpg

Place one of the Tile PCBs on a table you don't mind getting dirty and tape two other PCBs next to it to hold it in place like the picture above. Then, tape the stencil down with Kapton tape and make sure the holes are lined up with the exposed pads on the PCB.

Solder Paste

IMG_0180.jpg
IMG_0182.jpg

Add solder paste to the top of the stencil. I used this. Spread the solder paste around the stencil using an old credit card or something similar. Make sure that the tiny holes for the microchip get filled in too.

Before you lift the stencil up, try to get as much excess paste back onto the spreader card to reuse if you are making more than one tile (this stuff is expensive $$$)

Lift the stencil up by carefully picking up one corner and peeling the tape off. Once you lift an area up, try not to set it back down as it could smudge some of the paste.

Your PCB should now look like the picture above.

Assembly

IMG_0184.jpg
IMG_0183.jpg
IMG_0185.jpg
IMG_0186.jpg
IMG_0187.jpg
IMG_0176.jpg
IMG_0175.jpg

Start by placing the microchip on the PCB. Note the tiny dot on one corner of the MCU. This dot lines up with the top left of the chip footprint on the PCB. Next, place the diode above the microchip. The line on the diode should match what is printed on the PCB. After that, add the 10k ohm 8050 resistor above the diode.

Then, place the voltage regulators. The 3.3v regulator is the one closer to the microchip and the 5.0v regulator is closer to the top. Next, place the tantalum capacitors while keeping sure the polarity matches what is printed on the PCB. After that, place all of the ceramic capacitors.


Finally, place the 9 WS2812-Eco leds. Each led has a notch in one of the corners, and the PCB has a triangle printed on one corner of where the LEDs go. Make sure to match these up or you may short out the 5V and GND nets.

Reflow the PCB

IMG_0170.jpg
IMG_0166.jpg
Annotation 2020-08-09 004112.png
IMG_0169.jpg

For this step, you will need a reflow oven. If you don't have one, you can get the T962 on eBay for $231 at the time of this writing.Personally, I went the route of modifying an off the shelf toaster oven by removing the front panel controls and wiring a solid state relay to the heaters. A diagram of how I wired this is above. To control the relay, I used the Reflow Master oven controller sold on Tindie.

I used a 330 second reflow cycle with a 225C peak temp, a 145C soak temp and a ramp from 20C to 130C over 90 seconds for my preheat phase.

I was able to fit 3 boards in my toaster oven from Target that I built specifically for this project.

Connect Sides of Tile

IMG_0194.jpg
IMG_0195.jpg
IMG_0196.jpg
IMG_0197.jpg
IMG_0198.jpg

After reflowing the PCB, separate the sides of the tile by bending and breaking the tabs that hold the different sides in place. Then, sand off any excess PCB left by breaking the tabs so it is easier to fit in the printed enclosure.

Then, find the two sides with the letter "B" and solder all 7 side pads together. The remaining one side can only go in one way and solder that as well.

The tile should look like the above pictures.

Connect Assembled Tile to Programmer

Annotation 2020-08-08 230743.png
IMG_0189.jpg
IMG_0190.jpg

BEFORE CONNECTING THE TILE TO THE JLINK, OPEN JLINK COMMANDER AND TYPE "power on perm" TO ENABLE THE 5V OUTPUT

J-Link Commander is included in the Software and Documentation pack available here

Each tile has a unpopulated header right above the microchip labeled Debug. This header exposes the C2 programming interface which is compatible with the Segger J-Link. I use the EDU version because it is identical to the higher priced versions, but cannot be used for commercial products, which this doesn't fall under. I ordered mine from SparkFun for $72 including shipping.

Pin 1 on the connector is the only one with a square pad on the PCB.

Prepare IDE & Build Firmware Binary

Annotation 2020-08-09 005531.png
Annotation 2020-08-09 005552.png
Annotation 2020-08-09 005626.png
Annotation 2020-08-09 005650.png

Download Simplicity Studio 4 from here and install it. Sign in or sign up for a Silicon Labs account to get access to the EFM8 toolchain. Then, download the project code from here and import it to the IDE. Then, click the hammer icon in the toolbar and build the project.

You should get a Build Finished message. If a message pops up asking you to enter a license key for the Keil compiler, simply click skip (or you can activate it if you want, its free)

Upload Firmware

Annotation 2020-08-09 005705.png
Annotation 2020-08-09 005805.png
Annotation 2020-08-09 005822.png
Annotation 2020-08-09 005915.png
Annotation 2020-08-09 005930.png
Annotation 2020-08-09 010051.png
Annotation 2020-08-09 010022.png

Click the button in the toolbar that looks like a stamp over a chip "Flash Programmer." Then, browse for the built .hex file and select that. Click "Program" and accept the terms of the J-Link EDU License. Then, make sure you don't get an error message and the led's on the board should be lit a dim white to let you know that it was successfully programmed.

(Optional) PCB Test

IMG_0165.jpg
Annotation 2020-08-09 141014.png
Annotation 2020-08-05 222423.png
Annotation 2020-08-04 174940.png

For this step, you will need to enable the Virtual COM port on your J-Link by opening J-Link Configurator and choosing the attached programmer.

Wire the "DAT" line from one of the tile's sides to the circuit attached in the photos above.

Open a serial monitor with 112500 baud 8N1 and use these commands

  • 0x08 0xFF 0xFF 0x00 0xFF 0x0A
    • 0x08 is the "set color" command
    • 0xFF is "all tiles"
    • 0xFF 0x00 0xFF is the color
    • 0x0A is a newline character

The tile should now be purple. If not, double check that the diode is wired correctly and try again.

3D Printing Enclosure

Annotation 2020-08-08 225642.png
Annotation 2020-08-09 011652.png
Annotation 2020-08-09 145513.png

I designed the enclosure to be originally injection molded to save time instead of 3D printing each tile, but when the cost for only 50 enclosures came to be $6000, I decided against that idea. The enclosure was designed in Inventor 2021 and has two parts, a base and the top diffuser. The base has holes in the sides to allow tiles to be connected with the connector PCBs (linked below) or wires. If you go the route of using the connector PCBs, you will need 12 of these per tile to allow the PCBs to connect together.

If you don't have access to a 3D printer, you can show off the engineering behind these tiles by making a kinetic sculpture and linking the tiles together with copper wire. Just make sure that the wires don't short out!


I printed 20 enclosures and I found that these tiles print fine up to 150mm/sec without significant quality degradation, which allows around 60% print time reduction.

I forgot to take pictures of this step, but you just place the completed PCB in the base and snap the top on.

Connecting Tiles

Annotation 2020-08-10 112535.png
IMG_0209.jpg

The tile linker PCB is available here. These slot into the enclosures and use these connectors. Make sure that the two sides line up.

Controller

Annotation 2020-08-10 113657.png
IMG_0202.jpg
IMG_0203.jpg

The controller software is work in progress and will be updated here. Follow the schematic diagram to connect your ESP32 to one of the tiles. Upload the software using PlatformIO and connect to the WiFi hotspot to have the tiles connect to your WiFi.

Done!

IMG_0199.jpg
IMG_0177.jpg

Mount the tiles in any way you choose, I have put circles on the back of the enclosure for sticky tape to be placed.

Enjoy! Leave a comment if you have questions.