This video has two short scripts included in its description that will allow you to 3D print a massive range of sign characters in many fonts and sizes. It's almost worth getting a 3D printer just for this project.
To use the scripts you can download a free piece of CAD software called openscad that lets 3D objects be designed with a scripting language. When the scripts down below are copied and pasted into openscad it will let you create custom characters and then generate your STL files.
You can download openscad here:- https://openscad.org/
Once you've changed the variables to your chosen character and sizes, you can press the button with the box and hourglass to render it, and then the STL button to save it. Have patience - large curved characters will take longer to render. The animated bar graph shows that openscad is building your sign character.
The version 3 scripts are MUCH faster than previous ones because most of the work is done in 2D and then extruded to make the full height character. Most will be rendered in just a few seconds.
I'd recommend playing with the scripts to create small 50mm (2") high characters first to get a feel for it. I used standard PLA and it produced excellent results.
The only limit to the size of character you can make is the size of your printer build plate and your patience, as big characters take a lot of time to print.
In the scripts there are several variables you can adjust:-
Letter = the character, symbol or number you want to make.
Style = the desired font, that must be spelled and capitalised as in the font list.
Size = the height of the character in millimetres.
Depth = the depth of the housing in mm - deeper is better for LED diffusion.
$fn = the resolution of curves. It can usually be left as 100.
Walls = the thickness of the side walls. Half of that will be a groove for the front plate.
Base = the thickness of the base. While experimenting 0.4 is thin and fast.
Face = the thickness of the front face.
The face making script has one more variable called "fit" that nudges the sides in a bit to make fitting the faceplate into its channel easier. A value of 0.5mm will shrink the face 0.25mm on all sides. This compensates for any "squish" as the printer lays down the first layer.
All variables must match between the body and face to ensure a correct fit.
Have a play and let me know what you think of the results.
I specifically avoid using intrusive mid-run video adverts, which means I don't earn as much from my content as other YouTubers.
If you enjoy these videos you can help support the channel with a dollar or two for coffee, cookies and random gadgets for disassembly at:-
https://www.patreon.com/bigclive
Patreon supporters get advert-free early access to videos as they are made, and also regular live streams.
This also keeps the channel independent of YouTube's advertising algorithms allowing it to be a bit more dangerous and naughty.
Other contribution options are available at:-
http://www.bigclive.com/coffee.htm
Here's the first of the scripts. It generates the body of the sign:-
//Sign body maker V3 - bigclivedotcom
letter = "A"; //Sign character to make
style = "Arial"; //See "Help" and "Font List"
size = 50; //Size of character (height)
depth = 10; //Depth of sign character
$fn=100; //Curve facets - higher is smoother
walls = 2; //Side wall thickness
base=.4; //Base thickness (-1 for open back)
face = 1; //Face thickness
//Don't change variables below here
sized=size-(2*walls);
difference(){
linear_extrude(height=depth)
minkowski(){
text(letter,sized,style);
circle(walls);
}
//Lip for front face (half wall thickness)
translate([0,0,depth-face])
linear_extrude(height=2*face)
minkowski(){
text(letter,sized,style);
circle(walls/2);
}
//hollow core of letter
translate([0,0,base])
linear_extrude(height=depth+2)
text(letter,sized,style);
}
Here's the second script. It generates the face for the sign:-
//Sign front-face generator V3 - bigclivedotcom
//All variables must match the sign body sizes
letter = "A"; //Sign character to make
style = "Arial"; //See "Help" and "Font List"
size = 50; //Size of character
$fn=100; //Curve facets - higher is smoother
walls = 2; //Side wall thickness
face = 1; //Face thickness
fit = 0.5; //Slight shrink of face for easier fitting
//Don't change variables below here
sized=size-(2*walls);
linear_extrude(height=face)
minkowski(){
text(letter,sized,style);
circle((walls/2)-fit/2);
}

This is an interesting project. It's to make led illuminated signage by printing off custom housings that you can put leds into and then front plates that can then simply be clipped into the front to give it the desired color and this project started out. When i was thinking there must be signage modules available on something like thingiverse and i went to look to thingiverse and there were some signs, some projects that people made with just a word, but nothing customizable. So i set about making an open scan script and it turned out to be complex but doable.

I ended up really really short because i discovered the minkowski command, which lets you fatten things up and shrink them down, and that's pretty much what i'm doing here so i'll show you what i've done here and then i'll describe the script which is actually down in The description down below and show you how to change the settings to get different effects. So, in the case of this green character, here, let's pop this cover off, i shall use a shall we use the spudger for this. It's probably a good idea. The front faces are a fairly close fit, but they go in fairly easily inside is led tape just running around the outside.

The effect of that is this only works in the light colored boxes. It bounces the light around inside to create that light box, but notice that the front cover of this is actually slightly transparent and it means you can actually see the leds through it, which is an interesting effect, but perhaps not as diffused as something like this. In the case of the x, i shall spudger this out. It's just a crisscross of led tape in the back of that, and it is a light colored case.

It's a wood effects, a pla, and it provides a bit of diffusion and bounce the light about to spread it and make it look quite well even and diffused the red one took the approach of led tape around the outside. Again, i've noticed that the led tape does not stick very well onto this plastic. This might just be the use of crappy led tape. I also kind of regretted i just did an outline of this one doubling up here, but i should really have actually doubled up in here and going around here as well for extra brightness, because, as it is, the amount of led tape is small.

So it doesn't draw much power. Each letter only draws about one watt, so it's pretty low power. By increasing that a small amount i would have actually got a better illumination and evenness, but this is prototype stuff. Last illuminated letter here, one of the first i did - and it is just sections of the led tape on the back coming unstuck as it does i'm going to have to brighten this up.

Haven't i yes, i am going to have to brighten up now, that's better, but it's sections just bridge together with uh short bits of wire, just tucked out the way of light and uh the bridge at the top they're, actually using the pads along the led tape To just jump across from one bit to the other, so this script allows you to produce characters like this. That lets you use. Comic sounds if you want er berkeley, and this is ariel uh, and this, i think, is ariel black. It's a really thick bold font, but you can actually use any font that the open, scad will actually support and all the symbols associated with it right.
Tell you what i'm going to clear all this stuff away and we'll take a look at the script. It kind of works out here actually just to show you that you know nice friction fit uh of these things. These front plates, even in quite complex, shapes right. Okay, i'm going to pause clear this away and we'll take a look at the script.

One moment please: let's take a look at the script. Well, the top of the script where all the variables are, because that's the bit that you'll be changing to get your custom results. I've also i've printed it off like this, so i can show you what the effect is on a physical object, so the first variable is letter equal a in this case. If you run the script with that, it would actually print an a like this.

You can change that letter to any upper or lowercase letter, or even symbols like plus minus asterisks, ampersands and at symbols. Anything you want in the font can be printed note that it has to be in the quote: marks and we'll have the uh semicolon after it. Those things are important to leave in for the program, because that is part of the program. The next variable is style, which in this case is arial, it's the font, and i think this is an ariel and this one is a ar berkeley.

I think uh quite nice, actually quite a stylish font if you go into openscad and you click help at the top of the screen and then font list in the drop down menu. It will show you a list of the fonts that are available note that they have to be typed in as they're listed in that with correct capitalization. So if it's all in capital letters you have to type in capital letters and vice versa, if it's all lowercase or just uh capitalized at the start, just make sure that you type the font. I've noticed that not all fonts necessarily are implemented in the system.

If that, if the font you choose, isn't implemented, you'll end with a with a basic font like this just a standard one size equal 50, that is the height of the character. In fact, this er berkeley thing is about 50 millimeters, which is about two inches tall. In this case, this one's about 120 millimeters tall, i think, uh. The next variable is depth, which is the depth of the chamber that you're going to be putting your leds in or just if you want to leave it empty and have a nice boxy character.

The next option is dollar fm, which is that's not a nice way to present it. It's part of the program, uh leave it at 100.. Typically, that indicates the facets around the curve. It say, for instance, if it's 360 degree circle, it will be about 3.6 degrees per facet, and that just gives a if you make it too low.
It's very sort of flat and sort of ribbed feeling. But if you increase that say up to 360 would be much smoother, but in this instance, 100 is fine and making it too big makes it slow. It takes a lot longer to render the image, because it's calculating more curves. The next variable is walls which is two millimeters in this instance, that is the thickness of the wall for a character.

This size two millimeters is ideal. If you're going up to a character, 300 millimeter or a foot tall, maybe you'd want to go for three millimeters. That also determines the size of the ledge that is used to support the front face because it will be half the depth of the wall. So, in this case it's two millimeter wall.

It will have a one millimeter uh groove, going into it. The next option is base. That's the thickness of the base. You can make it minus one and it will just be transparent right through, but you will have separate pieces here that can still be clicked and glued into the face, but the back will be completely empty.

That's handy! If you want to have some leds in the front of it shining out the back um, i've found it very useful when printing the test figures to adjust the base to 0.4, because that's the equivalent of two layers of plastic with a 0.2 millimeter nozzle. And it just means that it prints very very quickly, because that takes a lot of time that printing the back surface, the final variable is face, and that is the face thickness. I've chosen one millimeter for these ones. The thickness you choose will depend on the size of the character and how translucent you want the plastic, because if it's too thick, it will become perhaps a bit too opaque and block the light.

But it's entirely what you want to do. Let's take a look at the other script and again there's information about these down below in the description along with the scripts. This has all the same variables and they have to match. If you make a letter like this, everything has to match in size, including uh.

The choice of letter, the font, the height the curvature, the wall thickness, because it's going to determine this size, this letter for fitting into the lip and, of course, the face thickness itself. If you make the face thickness, thicker, if you say, for instance, you told the body it was going to be a one millimeter thick, but you in the face bit. You actually said the face script. As you said, it was going to be two millimeter thick.

It would still work, but it would just stick up by a millimeter that in its own right could be quite nice. There is one extra variable called fit. What fit does? Is it just shrinks the character in a little bit so that when you get the face to make sure it is going to come off the print bed with a slight squish around the bottom, it compensates that it just shrinks in so that literally you can take The uh the face off the print bed, i'm just going to pop this off right now, it's so snuggly you can literally literally just take it off the print bed and just place it in, and it will just click into place nicely. It's very good! It worked out really well, but that is it uh the scripts down there play with it to your heart's content.
I'd recommend, starting with small characters like two inch high by 10 millimeter deep, as the script is already set up for and uh just play about with it notice. That uh note should have said that there are no holes in the back for uh putting screws through because uh there are so many characters. It would be impossible to actually just have fixed places. You could put screw holes in the 3d printer, so you'll have to drill those to your own requirements, also the whole for the cable inlet for your lighting, but that kind of varies anyway.

According to what sort of lighting you use and where the best connection point comes, but that's it help yourself to that script, down below uh load it into openscad and play it's the best way to actually find out how it all works and uh. Let me know how you got on, let me know if you enjoyed using it and definitely experiment with all the different fonts. It's quite a fun project.

12 thoughts on “Make diy custom led signage”
  1. Avataaar/Circle Created with python_avatars timne0 says:

    Oooh, hackspace sign. Cheers Clive!

  2. Avataaar/Circle Created with python_avatars Ran's Electronics says:

    For this application I would highly recommend using offset() instead of minkowski() in your scripts. The minkowski() operation is extremely computationally intensive. The following code is produces almost identical results, but the offset() version runs in about a hundred times faster.

    minkowski(){
    text(letter,sized,style);
    circle((walls/2)-fit/2);
    }

    offset(r=(walls/2)-fit/2){
    text(letter,sized,style);
    }

    The offset() function has a number of different modes that can be passed to it. I recommend looking at openSCAD's documentation on the function. Of note is that offset() can take a negative value, which in this case would make the letters skinnier as opposed to making them fatter.

  3. Avataaar/Circle Created with python_avatars Chris Skworez says:

    A question I was often asked is how can you use your own fonts in OpenScad? In Windows 10 you need to do the following: Under C:/Users/<username>/.fonts place your own TTF fonts. If '.fonts' doesn't exist, you have to create this directory yourself and restart OpenScad. You will see them appear in the Font list. Nice work Clive!

  4. Avataaar/Circle Created with python_avatars Chris Lhamon says:

    Make one for 1 mill subs?

  5. Avataaar/Circle Created with python_avatars databang says:

    🍭Thanks for the creative techniques, Clive

  6. Avataaar/Circle Created with python_avatars OvalWingNut says:

    I'm more impressed than I can describe (I know that's what you where going for). I am pleased to announce that I approve this video for public viewing, education and non-commercial purposes.

  7. Avataaar/Circle Created with python_avatars Robert Allen says:

    You are the man big Clive, you've done it again lad! You've given my kitty and me another reason to try and keep up with your blazing a bloody trail through today's sea of cheese.

  8. Avataaar/Circle Created with python_avatars Andrew Ballard says:

    those are lovely! 😀

  9. Avataaar/Circle Created with python_avatars The Real Rob - aka Rob says:

    Very happy to see code is commented. In software engineering we would probably frown at the extent of the comments. theres more comments than code haha. but thats because usually theres a full dev document sdlc accompanying the source. Yours is obvs kind and generous inline help for the novice. 🙂 Nice work with the prints. I shudder to imagine how long they all took!! Legend. Thanks 🙂

  10. Avataaar/Circle Created with python_avatars Om nOm says:

    🇵🇸

  11. Avataaar/Circle Created with python_avatars incredibleflameboy says:

    Do you have any tutorials on LED tape by any chance? I'm looking to make a lightsaber and feel that the blade would work well with it and some light diffusion but I'm not sure how you power it with a battery because electronics aren't my forte.

  12. Avataaar/Circle Created with python_avatars dave brooks says:

    Awesome signeage, Clive. You are a wonderful source of nerdy inspiration. You have also ruined my next few weekends in the best possible way!

Leave a Reply to Chris Lhamon Cancel reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.