大家知道,FDM打印机,尤其桌面级的,无法做到像cnc那样打印尺寸和设计尺寸分毫不差。
这个问题,在我之前的帖子,https://mc.dfrobot.com.cn/thread-13284-1-1.html
以及更早的黑侠的大作:关于材料PLA收缩率的实验及浅析 https://mc.dfrobot.com.cn/thread-12354-1-1.html
都有阐述。
那么,有没有解决方法尼。
有,就是打印个,然后比对误差后纠正。
简单粗暴,但是管用。
所谓实践是检验问题的唯一标准。
那么问题来了,打印前要设计模型吧。
为了矫正个尺寸,就要设计个模型,麻烦吗?
这里,我写了段Openscad程序。
对于常见的方孔,和圆孔。
大家可以通过修改几个参数,随意生成任意数量,尺寸相近的板。
以下是11月30日更新的内容:
1. 除了可以打印洞,也可以打印凸起。
只要在 Choose_Hole = false
像这样:
2.还可以打印六边形,
只要把:
Polygon_Select= 6
默认是100,100的话出来就是圆。
像这样:
不过注意这里的尺寸是不是边长,也不是对边长,而是对角长。
如下图:
举个栗子:
我要给方方的桌腿设计个支架。
量下来方孔的周长是9,于是我从8.4-10,每隔2mm,打印一个孔。
生成了下面这个校验板,一打印,就知道最适合的设计尺寸啦。
当然,圆孔也是支持的,毕竟很多情况要设计螺丝的孔位吗。
数量也可以自定义,上面是9个,下面是16个。
当然,不一定要是平方数,1到1000都可以的。
花几分钟打印下这个板,然后比对下实物,就可以知道最适合的设计尺寸了。
程序和模型,我还是发表在thingiverse上,大家可以戳连接https://www.thingiverse.com/thing:1843323,下载。
生成模型,有2种方法
1.,可以直接戳上面链接的这个红圈处,利用thingiverse的在线定制器生成。
当然,这个在线定制器优势是不用下载程序,但定制性有限,也比较慢,毕竟服务器在国外。
2.离线方法
- 访问openscad.org,下载非常小巧的openscad程序。
- 打开我编写的这段代码,可以在thingiverse上下载,也可以点下面的附件。
Customized_Calibration_Board.rar
- 按F5预览
- 按F6生成STL模型。
然后就可以打印了。
可定制的几个参数,在代码开头。
这里我解释下:
// Inputs
MaxD =10; // 这里定义最大图形的尺寸,对于方孔就是周长,对于圆孔就是直径,单位mm
ShapeCnt = 16; // 生成图形的数量
S_Step=0.2; // 按多少尺寸递减
z=1; // 板的厚度
Choose_Square=false; // 默认圆孔,如果这里改为true,就是方孔
NeedMarks=true; // 要不要上面标有数字尺寸铭牌
Dis=MaxD/10; // 相邻图形的距离。
源代码(1130更新):
-
-
-
-
- // Inputs
- MaxD=2;
-
- Choose_Hole=false ; // false for extrude
- Choose_Square=false; //Circle in default, if you want square, change it to true
- Polygon_Select= 100;// 100 for circle, 6 for hexagon
-
- //MaxD =Polygon_Select==4 ?D/sqrt(2) : 0; ; // Max Shape Size in mm.For circle is diameter, for square is side length
- ShapeCnt = 9; // How many shapes to generate
- S_Step=0.1; // Difference of each shape
- z=0.4; // Thickness
-
-
- NeedMarks=true; // Additional Marksborad will be added if true
- Dis=MaxD/10; // Distance btw each shape
-
- Rotate_Adjust= Polygon_Select==4 ? 45 : 0; // if choose 4 then use square
-
- z_Solid=1; // For Boss Extrude only
-
- //Generate suitable size
-
- BasicD= MaxD + Dis*2;
- //Font_Size=max(1,round(BasicD/8)); // 7 digits Max
- Font_Size=1;
-
- Font_Scale= MaxD>5 ? max(1,MaxD/6)*1.5 : min(1,MaxD/5)*1.5 ; // Font size in accordence with shape size
-
- echo("Font Scale is",Font_Scale);
- xMax= round(sqrt(ShapeCnt))-1; // x
- yMax= ceil(sqrt(ShapeCnt))-1;
-
-
- echo(xMax,yMax);
- //yMax=2;
- //xMax=3;
-
-
-
- echo("BasicD:",BasicD);
- for(y=[0:yMax])
- {
-
- if (NeedMarks==true)
- {
- //echo(y);
- difference()
- {
- //Generate mark board & seperating line
- translate([-BasicD/2,BasicD*y,0])
- cube([BasicD/2,BasicD,z]);
- translate([-BasicD/2,BasicD*(y+1)-Dis/4,z-z/4])
- cube([BasicD/2,Dis/4,z/4]);
-
- //Generate marks
- translate([-BasicD*11/32,BasicD*(y+0.5),z/2])
- rotate([0,0,90])
- linear_extrude(z/2)
- scale(Font_Scale)
- text(str(" ",MaxD-S_Step*y*(xMax+1)," - "),Font_Size,"Bauhaus 93:style=Bold",valign="center",halign="center");
-
- translate([-BasicD*1/8,BasicD*(y+0.5),z/2])
- rotate([0,0,90])
- linear_extrude(z/2)
- scale(Font_Scale)
- text(str(MaxD- S_Step*(xMax+y*(xMax+1))," "),Font_Size,"Bauhaus 93:style=Bold",valign="center",halign="center");
- }
- }
- for(x=[0:xMax])
- {
-
-
- if (Choose_Hole)
- {
-
- difference() // generate a hole
- {
-
- //echo(S_Step*y*xMax*2);
-
- // Generate shapes in a row.
- translate([BasicD*x,BasicD*y,0])
- cube([BasicD,BasicD,z]);
- translate([BasicD*x,BasicD*(y+1)-1/4*Dis,z-z/4])
- cube([BasicD,Dis/4,z/4]);
-
- // echo(BasicD/2);
- // echo(BasicD/2*i);
- if((x+y*(xMax+1))<ShapeCnt)
- {
- if(Choose_Square ==false)
- {
-
- translate([BasicD/2+BasicD*x,BasicD/2+BasicD*y,0])
- linear_extrude(height= z+z_Solid )
- rotate(a=[0,0,Rotate_Adjust])
- {
- circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
- }
- }
- else
- {
- translate([BasicD/16+BasicD*x,BasicD/16+BasicD*y,0])
- linear_extrude(height= z+z_Solid ){
- square(MaxD-S_Step*(x+y*(xMax+1)),center= false);
- }
- }
- }
- echo(x,y,(MaxD/2-S_Step/2*(x+y*(xMax+1)))*2);
-
- }
- }
- else // generate extrusion
-
- {
- translate([BasicD*x,BasicD*y,0])
- cube([BasicD,BasicD,z]);
- translate([BasicD*x,BasicD*(y+1)-1/4*Dis,z-z/4])
- cube([BasicD,Dis/4,z/4]);
-
- if((x+y*(xMax+1))<ShapeCnt)
- {
- if(Choose_Square ==false)
- {
- translate([BasicD/2+BasicD*x,BasicD/2+BasicD*y,0])
- linear_extrude(height= z+z_Solid )
- rotate(a=[0,0,Rotate_Adjust])
- {
- circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
- }
- }
- else
- {
- translate([BasicD/16+BasicD*x,BasicD/16+BasicD*y,0])
- linear_extrude(height= z+z_Solid ){
- square(MaxD-S_Step*(x+y*(xMax+1)),center= false);
- }
- }
- }
- echo(x,y,(MaxD/2-S_Step/2*(x+y*(xMax+1)))*2);
- }
-
-
- }
-
- }
-
-
-
复制代码
谢谢观赏,如果帮的到你,
thingiverse上点个like吧。
|