LED Matrix Cylinder

31,361

281

62

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 ;-)

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

6 People Made This Project!

Recommendations

  • Hand Tools Only Challenge

    Hand Tools Only Challenge
  • Modify It Speed Challenge

    Modify It Speed Challenge
  • Remix Contest

    Remix Contest

62 Discussions

0
angel2020
angel2020

Question 5 months ago

Hi Im new to the Pi scene Im using Raspberry pi 3 i can can strandtest.py working .I have put the cylinder and font file in that Directory when i run cylinder I get
Traceback (most recent call last):
File "/home/pi/Desktop/Python/cylinder.py", line 66, in
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
NameError: name 'Adafruit_NeoPixel' is not defined

I have been looking for a solution but cannot find a solution

Can somebody help me

Thnx

0
angel2020
angel2020

Reply 4 months ago

Hi
Have followed the tutorial also installed numby but still have the same issue . is there anyway way you could send me a link to your Pi image so i could download it to see were im going wrong

Regards

0
maketvee
maketvee

Reply 4 months ago

Sorry, I do not have an image to share. It is a development system with lots of other projects and I do not have the time to setup a clean image. Please also check this page: https://learn.adafruit.com/neopixels-on-raspberry-pi/python-usage First try to get the examples to a running state. If the pixels are running, the code from this project also should run.
Best regards

0
AengusR
AengusR

7 months ago

Quick question ... why use a capacitor for the WS2812 strip? I've seen people use resistors alright.

0
30eliashd
30eliashd

Question 10 months ago

Hi im using a Rapberry Pi zero via ssh and i dont find a easy way to install the test Programms like strandtest.py. I had them once but i needet to reinstall my System and now it's obviusly gone. Does anyone now a Command for the Terminal to download the examples?

btw im new to raspberry and linux so pls be gentel ;D

0
30eliashd
30eliashd

Reply 10 months ago

Im getting no error messages but there also is no rpi_ws281x folder where the test-programs should be located. If i try sudo pip install rpi_ws281x he installs the libarys and stuff but no test folder.

0
mosawer00007
mosawer00007

Question 1 year ago

Hi, can you help me with the upload on an arduino, the library’s can’t be incl

0
maketvee
maketvee

Answer 1 year ago

Which Arduino board do you use?

1
germanf3
germanf3

Question 1 year ago

hi maketvee,i just completed all wiring after some customization into your original design (i used mi 3d printer for the framE, created an internal pocket for a 10 amp 5v power supply, and wired 100 individual circular w2812b leds instead of using led strips., thanks a lot, the result is awesome.

do you know if there is any way of using MQTT to live post messages on the display?

IMG_3478.jpg
0
mosawer00007
mosawer00007

Answer 1 year ago

I have problems with uploading the code on the arduino. How could you manage that?

0
germanf3
germanf3

Answer 1 year ago

in case anyone is interested i merged this project with a project i found in hackaday.io (https://hackaday.io/project/19773-esp8266-based-neopixel-dashboard). i modified some of the original code (support to zigzag led pattern, display size, among other small changes) and now i can connect from my cellphone into blynk to send messages over the internet to be displayed, lunch different FX patterns, change display color, set an alarm or use the display as a clock. if interested my fork is at "https://github.com/gefidalgo/ESP8266_NeoPixel_Dashboard", maybe it can be further improved.

0
maketvee
maketvee

Reply 1 year ago

Super cool, I will try it out as soon as possible!

0
Muhamuma
Muhamuma

Question 1 year ago

What is the use of arduino analog output graphics?

PS.My English is not fluent, so I may not express it accurately

0
maketvee
maketvee

Answer 1 year ago

Sorry, I don't get your point, what do you mean with arduino analog output graphic?

0
mbariola
mbariola

1 year ago

Hi! I am having problems with finding the exact LED strip you used, I guess that precise spacing between LEDs is necessary. Could you please post a link for the LED strip? Thanks

0
20inerarityA
20inerarityA

Reply 1 year ago

post full link?