Introduction: LED Matrix Cylinder
This LED matrix uses standard WS2812b LED stripes to build a matrix with a cylindric shape and a nice wooden veneer finish.
Partlist:
- 790x384 cardboard 1.5 mm (other sizes are also possible, but CAD data has to be changed)
- 100 WS2812b LED from LED-stripes (30 LED/meter)
- Raspberry Pi or Arduino
- Microwood veneer or any type of flexible diffusion material
- 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
Attachments
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);
Attachments
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!