You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.6 KiB
99 lines
2.6 KiB
7 years ago
|
/*
|
||
|
Open freecad, select Workbench OpenSCAD
|
||
|
import file, select group, save as freecad file,
|
||
|
close, open freecad file and export to VRML 2.0 (wrl file)
|
||
|
https://www.freecadweb.org/wiki/Import_OpenSCAD_code
|
||
|
*/
|
||
|
|
||
|
n_pins=7; // number of pins
|
||
|
pin_pitch=2.54; // pin pitch
|
||
|
pin_thick=0.7;
|
||
|
|
||
|
// 0.96" COLOR OLED SSD1331
|
||
|
body=[27.2,30.7,2]; // PCB dimensions of the display
|
||
|
height=6; // body above z axis
|
||
|
hole_d=2.5; // hole diameter
|
||
|
hole_edge=2; // hole center to body edge
|
||
|
color_body=[0.03,0.03,0.15];
|
||
|
color_rgbw=[[1,0,0],[0,1,0],[0,0,1],[1,1,1]];
|
||
|
|
||
|
// pin protrusions
|
||
|
pin_above=1; // above the display
|
||
|
pin_below=2; // below the height
|
||
|
color_pin="white";
|
||
|
|
||
|
|
||
|
font = "Liberation Sans";
|
||
|
letter_size = pitch/2;
|
||
|
letter_height = pitch/16;
|
||
|
color_letter="white";
|
||
|
enable_letter=0; // letters don't work after exporting to VRML
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
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 oled()
|
||
|
{
|
||
|
translate([0,(body[1]/2-pin_pitch*0.75),-body[2]/2+height])
|
||
|
difference()
|
||
|
{
|
||
|
color(color_body)
|
||
|
cube(body, center=true);
|
||
|
union()
|
||
|
{
|
||
|
// color stripes display simulation
|
||
|
for(i=[0:len(color_rgbw)-1])
|
||
|
translate([0,-body[1]/8*(i-len(color_rgbw)/2+0.5),body[2]/2])
|
||
|
color(color_rgbw[i])
|
||
|
cube([body[0]*0.9,body[1]/8,0.1],center=true);
|
||
|
// holes
|
||
|
for(i=[-1:2:1])
|
||
|
for(j=[-1:2:1])
|
||
|
translate(
|
||
|
[
|
||
|
i*(body[0]/2-hole_edge),
|
||
|
j*(body[1]/2-hole_edge),
|
||
|
0
|
||
|
])
|
||
|
cylinder(d=hole_d,h=body[2]+0.1,$fn=24,center=true);
|
||
|
}
|
||
|
}
|
||
|
// the pins
|
||
|
for(i = [0:n_pins-1])
|
||
|
{
|
||
|
// pins
|
||
|
translate([(i-n_pins/2+0.5)*pin_pitch,0,-body[2]/2*0+(height+pin_above+pin_below)/2-pin_below])
|
||
|
color(color_pin)
|
||
|
cube([pin_thick,pin_thick,height+pin_above+pin_below],center=true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// scale(1/2.54) // required scale for KiCAD VRML file dipswitch_smd.wrl
|
||
|
oled();
|