How to make a diffusor for your LED Matrix

Hi, in this Instruct able I want to show you how to create your own diffusor for a LED Matrix. To do this we will use a 3D printer and Opens CAD. In this tutorial I will use a LOL-Shield by Jimmie ( ) also I will explain, how to design a diffusor for different matrix sizes and shapes.

As I recently was at the 31C3 in Hamburg I got a LOL-Shield from Jimmie. This shield is holding 126 LED´s which are CharlieplexedLEDs. After coding some animations and a game on it I thought that the LED´s where too bright. Because I wanted to keep the greyscale ( dimming ) of the matrix I decided to design and build a diffusor.

Step 1: Requirements

A LED Matrix
Black Filament
White Filament ( or in the color your LED Matrix is )
A 3D Printer ( Single Extruder )
A working bench
Additional: A mallet or a rubber mallet
Opens CAD
How to make a diffusor for your LED Matrix

Step 2: Measure the matrix

Our first step is to measure the matrix.
What we need:
Total length ( with planned border )
Total width ( with planned border )
Total height ( optional LED height + 3 – 4 mm )
Led size ( normally 3 or 5 mm sometimes 8 or 1 mm )
Spacing between Lad’s
Optional you can measure the PCB to add holders / screws / a housing
I didn’t do it, I only added spacers ( you will see later )
So the measurements of my board where:
Length: 70mm ( boarder 1 mm each )
Width: 42 ( boarder 1 mm each )
Height: 6.5 mm
Led size: 3 mm
Spacing: x = 1.6 y = 2 (I got not a square matrix)

Step 3: Generate Frame

Now we have to generate the frame in Opens CAD. I wrote a simple code for that, you can fill in your measurements in the top and then press F5 to preview your frame. If you are good with it you can press F6 to render it and then File >> Export >> As STL to create a printable file.


length = 70;

width = 42;

height = 6.5;
number x = 9;

number y = 14;

boarders = 1;

led size = 3;

spacing x = 1.6;

spacing y = 2;




cube([width, length, height]);



for(I = [0:numberx -1]){

for(j = [0:numbery -1]){

translate([(I*(led size+ spacing x))+boarders,(j*(led size+ spacing y))+boarders,-1]) cube([led size*1.025,led_size*1.025,10]);

Leave a Comment

Your email address will not be published. Required fields are marked *