大家知道,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吧。 
 
 
 
 
 
 
 |