With this seeming so popular, i thought I should get to work on the nest version.
I am in the process of moving this design from the inkscape/123d process I was using before to fully parametric Openscad. I haven't inserted the correct braille specs in yet, but this will be easy to adjust. When done it will take just changing a few variables at the top to change between standard/large print as well as being able to specify how many cells wide and how may lines you need. I am also adding optional slip case and drawer. As well as the code I will release a couple of printable STL files based on popular suggestions for the less technical. I also added a variable for your printers tolerance so everything will fit snugly and not waste filament on bad prints.
Here is my code so far....
// frame size
lines=8;
cellsWide=12;
drawer=true;
// measurments
framethickness=3;//border
basethickness=1;//x axis
cellthickness=3;//x axis
cellheight=5;
cellwidth=6;
linespace=2;//space between lines
tolerence=0.3;
dotheight=0.6;
dotdiameter=1;
dotdistancex=2;
// parts
resize(newsize=[(((cellsWide*cellwidth)+(framethickness*basethickness))/(cellsWide*cellwidth))*((cellsWide*cellwidth)+tolerence),(framethickness*2)+(lines*cellheight)+((lines-1)*linespace)*(((lines*cellheight)+(tolerence*lines))/(lines*cellheight)),framethickness+basethickness]) frame();
sleve();
drawer();
translate([0,0,cellthickness+basethickness+10]) fullbar();
translate([0,cellheight+10,cellthickness+basethickness+10]) blankcell();
translate([cellwidth+10,cellheight+10,cellthickness+basethickness+10]) onedot();
translate([(cellwidth*2)+20,cellheight+10,cellthickness+basethickness+10]) twodots();
module frame(){
module barrepeat(num) {
for (i = [0 : num-1])
translate([ 0, i*(cellheight+linespace), 0 ]) children(0);
}
module notches(){
module notchrepeat(num2) {
for (i2 = [0 : num2-1])
translate([ 0, (i2*(cellheight/3)), 0 ]) children(0);
}
notchrepeat(3) rotate([0,90,0]) cylinder(cellwidth*cellsWide,dotdiameter/2,dotdiameter/2);
}
difference() {
cube([(framethickness*2)+(cellsWide*cellwidth),(framethickness*2)+(lines*cellheight)+((lines-1)*linespace),basethickness+cellthickness]);
translate([framethickness,framethickness,basethickness]) {
barrepeat(lines) fullbar();
}
translate([framethickness,framethickness+((cellheight/3)/2),basethickness]) {
barrepeat(lines) notches();
}}}
module sleve(){
}
module drawer(){
}
module fullbar(){
cube([cellsWide*cellwidth,cellheight,cellthickness]);
}
module onedot(){
cube([cellwidth,cellheight/3,cellthickness]);
translate([(cellwidth-dotdistancex)/2,cellheight/3/2,cellthickness]){
cylinder(dotheight,dotdiameter/2,dotdiameter/2);
}}
module twodots(){
cube([cellwidth,cellheight/3,cellthickness]);
translate([(cellwidth-dotdistancex)/2,cellheight/3/2,cellthickness]){
cylinder(dotheight,dotdiameter/2,dotdiameter/2);
translate([dotdistancex,0,0]){
cylinder(dotheight,dotdiameter/2,dotdiameter/2);
}}}
module blankcell(){
cube([cellwidth,cellheight,cellthickness]);
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.