Introduction: LED Matrix Cylinder

About: Old school maker doing all kinds of electronic projects. I love to play around with adressable LEDs. Raspberry Pi collector ;-) https://twitter.com/maketvee

This LED matrix uses standard WS2812b LED stripes to build a matrix with a cylindric shape and a nice wooden veneer finish.

Partlist:

  1. 790x384 cardboard 1.5 mm (other sizes are also possible, but CAD data has to be changed)
  2. 100 WS2812b LED from LED-stripes (30 LED/meter)
  3. Raspberry Pi or Arduino
  4. Microwood veneer or any type of flexible diffusion material
  5. Wires

Step 1: Design and Laser Cutting File

Main design parameter is the thickness of the used material. In this build, a 1.5 mm cardboard was used because it is easy to cut and quite cheap. 3D design (e.g. Fusion360) helps to avoid problems in the assembling process. For laser cutting, parts have to be arranged in a way that they fit to the laser cutting area of your machine, in this case 790x384 mm. Inkscape is a simple and powerful tool to handle this job. Attached SVG file contains all parts for the cylindric display with 1.5 mm material.

UPDATE: I have modified the Fusion360 model with a user parameter thickness, so you are able to change the material thickness for the matrix and generate your own laser cutting file. Cut-out slots for the LED stripes will be added soon.

Link to the model: https://a360.co/2OC2kvZ

Step 2: Laser-cutting and Preassemble

After laser cutting, you will get the following parts:

- 12 C-shape horizontal segments

- 18 comb like vertical segments

- 2 vertical connection segments

- 20 led carrier segments

8 C-Shapes, 9 combs and 1 connection are combined to a display half. In this step, parts are only plugged together to check if all fits well. Don't use glue yet.

Step 3: Wiring of LEDs

LED stripes are cut in 5 LED segments and glued to the carrier segments with the backside adhesive tape. First the DI (data in) and DO (data out) pins of the stripes are wired together in a zig-zag manner, connecting DO of the first stripe with DI of the next stripe and so on. This is done for each half of the cylinder including 10 stripes. 5V and GND are connected only at one side from strip to strip. Length of the wires should be matching the strip distance of the array.

Before the LEDs are installed into the matrix, the segments of the matrix have to be glued together for each half of the cylinder.

Finally the 10 stripes are placed in each half of the matrix and fixated with hot glue. DO from one half is connected to DI of the second half. DI of the first half will be the input for the Raspberry Pi or Arduino.

Step 4: First Test

To ensure that everything works, a first test of the LEDs should be made. Using an Arduino and the Neopixel library should be the easiest way to do this.

Step 5: Wooden Veneer Diffusor

After measuring the diameter and hight of the matrix, the wooden veneer could be cut out and rolled around the matrix. For fixation, a transparent glue strip is sufficient.

Step 6: Raspberry Pi, Arduino and Power Supply

For easy coding in Python of nice matrix effects, a Raspberry Pi could be used. In this case, a Raspberry Pi Zero was used, which is connected to the matrix via GPIO pin 18 via a 74HCT245 level shifter to adapt the 3.3V from the Pi to the 5V of the WS2812. Also a large capacitor (2200 uF) and a series resistor (470 Ohm) are used like suggested when using larger Neopixel/WS2812 LED counts.

Power Supply

Maximum power for 100 WS2812b LEDs is 100x60mA = 6A. Of course, by reducing brightness, the power consumption could be reduces drastically. Please ensure, that your 5V power supply is able to drive the current for your desired brightness.

Arduino

This matrix directly works on Arduino devices with the NeoPixel and NeoMatrix library from Adafruit. You have to change the PIN and initialization if you want to use the examples:

Neomatrix:

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20, 5, PIN,NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800);

You also have to include Adafruit GFX library and load a different font with a height of 5 pixel. Please use the attached Arduino sketch as a starting point (uses PIN 4 for the matrix). It is an adapted version of the Neomatrix example sketch.

NeoPixel:

Adafruit_NeoPixel strip = Adafruit_NeoPixel(100, PIN, NEO_GRB + NEO_KHZ800);

Step 7: Simulation

Python source-code is available at Github

There are two modes for coding. If PI=False defined at the beginning of the cylinder.py, code is in the simulation mode. You can test all animations on any platform which is able to run python. Please install first all libraries which are used by the program (like pygame, numpy, etc.). In simulation mode, the cylinder is displayed as a 5x20 pixel matrix.

Step 8: Programming

The second software mode is PI=True (defined in cylinder.py) and started on the Pi. This drives the GPIO pin 18 of the Raspberry Pi. You are free to add additional effects and play around with the parameters.

Text is displayed with a 3x5 font, so not all letters are perfect due to the limited display height.

Enjoy!

Epilog X Contest

Runner Up in the
Epilog X Contest