|
|
|
/*
|
|
|
|
Open freecad, select Workbench OpenSCAD
|
|
|
|
import file, select group and export to
|
|
|
|
VRML 2.0 (wrl file)
|
|
|
|
https://www.freecadweb.org/wiki/Import_OpenSCAD_code
|
|
|
|
*/
|
|
|
|
|
|
|
|
n_switches=4; // number of dip switches
|
|
|
|
pitch=2.54; // pin pitch
|
|
|
|
|
|
|
|
body=[(n_switches+0.5)*pitch, 3*pitch, 1.5*pitch];
|
|
|
|
height=pitch/8; // body above z axis
|
|
|
|
color_body="maroon";
|
|
|
|
|
|
|
|
swhole=[pitch*0.5,pitch,pitch*0.5];
|
|
|
|
button=[pitch*0.4,pitch*0.4,pitch*0.5];
|
|
|
|
color_button="white";
|
|
|
|
|
|
|
|
font = "Liberation Sans";
|
|
|
|
letter_size = pitch/2;
|
|
|
|
letter_height = pitch/16;
|
|
|
|
color_letter="white";
|
|
|
|
|
|
|
|
color_pin="white";
|
|
|
|
|
|
|
|
module letter(l,scale=1)
|
|
|
|
{
|
|
|
|
// Use linear_extrude() to make the letters 3D objects as they
|
|
|
|
// are only 2D shapes when only using text()
|
|
|
|
linear_extrude(height = letter_height*scale)
|
|
|
|
{
|
|
|
|
text(l, size = letter_size*scale, font = font, halign = "center",
|
|
|
|
valign = "center", $fn = 16);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 2 pins for 1 switch
|
|
|
|
module pin_smd()
|
|
|
|
{
|
|
|
|
translate([0,0,pitch/8])
|
|
|
|
cube([pitch/3,pitch*0.75,pitch/4],center=true);
|
|
|
|
}
|
|
|
|
|
|
|
|
module inscription(scale=1)
|
|
|
|
{
|
|
|
|
translate([
|
|
|
|
(0-n_switches/2+0.5)*pitch,
|
|
|
|
body[1]/2-letter_size,
|
|
|
|
body[2]/2-letter_height*scale])
|
|
|
|
letter("ON");
|
|
|
|
for(i = [0:n_switches-1])
|
|
|
|
{
|
|
|
|
translate([
|
|
|
|
(i-n_switches/2+0.5)*pitch,
|
|
|
|
-body[1]/2+letter_size,
|
|
|
|
body[2]/2-letter_height*scale])
|
|
|
|
letter(chr(48+(i+1)%10));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module dipsw_smd()
|
|
|
|
{
|
|
|
|
translate([0,0,body[2]/2+height]) // little above
|
|
|
|
union()
|
|
|
|
{
|
|
|
|
// cut off holes for switches
|
|
|
|
difference()
|
|
|
|
{
|
|
|
|
color(color_body)
|
|
|
|
cube(body,center=true);
|
|
|
|
// holes for switches - imports to freecad but exports wrong to VRML of Kicad
|
|
|
|
if(1)
|
|
|
|
for(i = [0:n_switches-1])
|
|
|
|
{
|
|
|
|
translate([(i-n_switches/2+0.5)*pitch,0,body[2]/2-swhole[2]/2+0.01])
|
|
|
|
color(color_body)
|
|
|
|
cube(swhole,center=true);
|
|
|
|
}
|
|
|
|
// cut off space for letters
|
|
|
|
if(0)
|
|
|
|
translate([0,0,0.1])
|
|
|
|
color(color_body)
|
|
|
|
inscription(scale=1.1);
|
|
|
|
}
|
|
|
|
// place letters
|
|
|
|
translate([0,0,0.1])
|
|
|
|
color(color_letter)
|
|
|
|
inscription();
|
|
|
|
// buttons
|
|
|
|
for(i = [0:n_switches-1])
|
|
|
|
{
|
|
|
|
translate([(i-n_switches/2+0.5)*pitch,swhole[1]/2-button[1]/2-(swhole[0]-button[0])/2,body[2]/2-button[2]/2+0.1])
|
|
|
|
color(color_pin)
|
|
|
|
cube(button,center=true);
|
|
|
|
}
|
|
|
|
// pin 1 mark
|
|
|
|
translate([(-body[0])/2+pitch/3,-body[1]/2+pitch/2,body[2]/2])
|
|
|
|
color(color_letter)
|
|
|
|
cylinder(r=pitch/8,h=0.1,$fn=6);
|
|
|
|
|
|
|
|
// the pins
|
|
|
|
for(i = [0:n_switches-1])
|
|
|
|
{
|
|
|
|
// pins
|
|
|
|
for(j = [-1:2:1])
|
|
|
|
translate([(i-n_switches/2+0.5)*pitch, j*(body[1]/2+pitch*0.6/2),-body[2]/2-height+pitch/8])
|
|
|
|
color(color_pin)
|
|
|
|
cube([pitch/3,pitch*0.6,pitch/4],center=true);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scale(1/2.54) // required scale for KiCAD VRML file dipswitch_smd.wrl
|
|
|
|
// rotate([0,0,90])
|
|
|
|
dipsw_smd();
|