Easy custom illuminated crystal on wooden base



I bought one of these bases on AliExpress a while ago to experiment with using it to illuminate 3D printed covers. It looks really good, and is a very easy way to make custom illuminated ornaments.

No woodturning or electronic skills are required to make this project, although it will require a 3D printer if you wish to make custom covers. It can also be used with other clear or translucent objects.

It’s powered by a USB power supply, so would be safe for many applications, including as night lights, or as a convenient and stylish off-grid ornament.

The openscad script is down below, and is already sized for this base with its 33mm hole. (You may need to file off any flanging that occurs on the first layer. (I like to lay that first layer down hard for better adhesion.)

I printed this in clear PLA, which works well. You could also use coloured PLA if desired for a different effect with reduced light output.

If you enjoyed this project, please consider subscribing to the channel for more DIY builds.

#shorts

Here’s the openscad script. When adjusting the variables at the top, make sure you don’t accidentally delete the “=” or the “;” on either side of the variable, as they are part of the script.

Openscad is free software that lets you use scripts like this to create custom 3D printing STL files. Copy and paste the text below into openscad to create your own custom crystal.

//Lamp cap quartz crystal.
//You can adjust the five variables below
base=33; //Diameter of base for lamp
rim=4; //Length of rim at base
size=55; //Diameter of crystal
scaling=1.5; //Scale of crystal length (default 1.5)
facets=6; //number of faces (default 6)
//Don’t change variables below here
halfsize=size/2;
upper=halfsize-(base/2)+rim;
$fn=facets;
difference(){
union(){
//outer body
translate([0,0,0])
cylinder(h=4+rim,d1=base,d2=base,$fn=100);
translate([0,0,-(base/2)+rim])
cylinder(h=halfsize,d1=0,d2=size);
translate([0,0,upper])
cylinder(h=size*scaling,d1=size,d2=size/2);
translate([0,0,upper+size*scaling])
cylinder(h=size/4,d1=size/2,d2=0);
}
//Inner core.
translate([0,0,-1])
cylinder(h=6+rim,d1=base-2,d2=base-2,$fn=100);
translate([0,0,-(base/2)+rim+1])
cylinder(h=halfsize-1,d1=0,d2=size-2);
translate([0,0,upper])
cylinder(h=size*scaling,d1=size-2,d2=(size/2)-2);
translate([0,0,upper+size*scaling])
cylinder(h=(size/4)-1,d1=(size/2)-2,d2=0);
translate([-halfsize,-halfsize,-halfsize])
cube([size,size,halfsize]);
}

Source