可定制的打印误差校正板(1130更新,增加6角形和凸起功能)

2016-10-221.4万
精华项目
AI 快速预览详细 收起
本文介绍了如何通过打印可定制的误差校正板来解决FDM打印机尺寸偏差问题。提供了Openscad程序,支持生成方孔、圆孔、六边形孔以及凸起功能,用户可以根据需要修改参数,生成适合自己的校正板。通过这种方法,可以轻松比对和纠正尺寸误差,提高打印精度。适用于桌面级3D打印机用户。
大家知道,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
像这样:
可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图5



2.还可以打印六边形,
只要把:
Polygon_Select= 6
默认是100,100的话出来就是圆。

像这样:

可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图6

不过注意这里的尺寸是不是边长,也不是对边长,而是对角长。
如下图:
可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图7

举个栗子:

我要给方方的桌腿设计个支架。
量下来方孔的周长是9,于是我从8.4-10,每隔2mm,打印一个孔。
生成了下面这个校验板,一打印,就知道最适合的设计尺寸啦。

可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图1

当然,圆孔也是支持的,毕竟很多情况要设计螺丝的孔位吗。
数量也可以自定义,上面是9个,下面是16个。

当然,不一定要是平方数,1到1000都可以的。

可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图2
花几分钟打印下这个板,然后比对下实物,就可以知道最适合的设计尺寸了。

程序和模型,我还是发表在thingiverse上,大家可以戳连接https://www.thingiverse.com/thing:1843323,下载。

生成模型,有2种方法
1.,可以直接戳上面链接的这个红圈处,利用thingiverse的在线定制器生成。
可定制的打印误差校正板(1130更新,增加6角形和凸起功能)图3
当然,这个在线定制器优势是不用下载程序,但定制性有限,也比较慢,毕竟服务器在国外。

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更新):
  1. // Inputs
  2. MaxD=2;
  3. Choose_Hole=false ; // false for extrude
  4. Choose_Square=false; //Circle in default, if you want square, change it to true
  5. Polygon_Select= 100;// 100 for circle, 6 for hexagon
  6. //MaxD =Polygon_Select==4 ?D/sqrt(2) : 0; ;   // Max Shape Size in mm.For circle is diameter, for square is side length
  7. ShapeCnt = 9; // How many shapes to generate
  8. S_Step=0.1; // Difference of each shape
  9. z=0.4; // Thickness
  10. NeedMarks=true; // Additional Marksborad will be added if true
  11. Dis=MaxD/10; // Distance btw each shape
  12. Rotate_Adjust= Polygon_Select==4 ? 45 : 0; // if choose 4 then use square
  13. z_Solid=1; // For Boss Extrude only
  14. //Generate suitable size
  15. BasicD= MaxD + Dis*2;
  16. //Font_Size=max(1,round(BasicD/8)); // 7 digits Max
  17. Font_Size=1;
  18. Font_Scale= MaxD>5 ? max(1,MaxD/6)*1.5 : min(1,MaxD/5)*1.5 ; // Font size in accordence with shape size
  19. echo("Font Scale is",Font_Scale);
  20. xMax= round(sqrt(ShapeCnt))-1;  // x
  21. yMax= ceil(sqrt(ShapeCnt))-1;
  22. echo(xMax,yMax);
  23. //yMax=2;
  24. //xMax=3;
  25. echo("BasicD:",BasicD);
  26. for(y=[0:yMax])
  27. {
  28.    
  29.     if (NeedMarks==true)
  30.     {
  31.     //echo(y);
  32.     difference()
  33.     {
  34.     //Generate mark board & seperating line   
  35.     translate([-BasicD/2,BasicD*y,0])
  36.     cube([BasicD/2,BasicD,z]);
  37.     translate([-BasicD/2,BasicD*(y+1)-Dis/4,z-z/4])   
  38.     cube([BasicD/2,Dis/4,z/4]);
  39.    
  40.     //Generate marks
  41.     translate([-BasicD*11/32,BasicD*(y+0.5),z/2])
  42.     rotate([0,0,90])
  43.     linear_extrude(z/2)
  44.     scale(Font_Scale)
  45.     text(str(" ",MaxD-S_Step*y*(xMax+1)," - "),Font_Size,"Bauhaus 93:style=Bold",valign="center",halign="center");  
  46.         
  47.     translate([-BasicD*1/8,BasicD*(y+0.5),z/2])
  48.     rotate([0,0,90])
  49.     linear_extrude(z/2)
  50.     scale(Font_Scale)
  51.     text(str(MaxD- S_Step*(xMax+y*(xMax+1))," "),Font_Size,"Bauhaus 93:style=Bold",valign="center",halign="center");   
  52.     }
  53. }
  54. for(x=[0:xMax])
  55. {
  56.    
  57.     if (Choose_Hole)
  58.     {
  59.         
  60.         difference() // generate a hole
  61.         {
  62.             
  63.         //echo(S_Step*y*xMax*2);  
  64.             
  65.         // Generate shapes in a row.   
  66.         translate([BasicD*x,BasicD*y,0])
  67.         cube([BasicD,BasicD,z]);
  68.         translate([BasicD*x,BasicD*(y+1)-1/4*Dis,z-z/4])
  69.         cube([BasicD,Dis/4,z/4]);
  70.         
  71.          //   echo(BasicD/2);
  72.          //   echo(BasicD/2*i);
  73.             if((x+y*(xMax+1))<ShapeCnt)
  74.             {
  75.            if(Choose_Square ==false)
  76.             {
  77.                
  78.                 translate([BasicD/2+BasicD*x,BasicD/2+BasicD*y,0])
  79.                 linear_extrude(height= z+z_Solid )
  80.                 rotate(a=[0,0,Rotate_Adjust])
  81.                 {
  82.                 circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
  83.                 }
  84.                 }
  85.              else
  86.              {
  87.                  translate([BasicD/16+BasicD*x,BasicD/16+BasicD*y,0])
  88.                  linear_extrude(height= z+z_Solid ){
  89.                  square(MaxD-S_Step*(x+y*(xMax+1)),center= false);
  90.              }
  91.              }
  92.             }  
  93.             echo(x,y,(MaxD/2-S_Step/2*(x+y*(xMax+1)))*2);
  94.            
  95.         }
  96.     }
  97.     else // generate extrusion
  98.                
  99.         {            
  100.         translate([BasicD*x,BasicD*y,0])
  101.         cube([BasicD,BasicD,z]);
  102.         translate([BasicD*x,BasicD*(y+1)-1/4*Dis,z-z/4])
  103.         cube([BasicD,Dis/4,z/4]);
  104.         if((x+y*(xMax+1))<ShapeCnt)
  105.             {
  106.            if(Choose_Square ==false)
  107.             {
  108.                 translate([BasicD/2+BasicD*x,BasicD/2+BasicD*y,0])
  109.                 linear_extrude(height= z+z_Solid )
  110.                 rotate(a=[0,0,Rotate_Adjust])
  111.                 {
  112.                 circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
  113.                 }
  114.                 }
  115.              else
  116.              {
  117.                  translate([BasicD/16+BasicD*x,BasicD/16+BasicD*y,0])
  118.                  linear_extrude(height= z+z_Solid ){
  119.                  square(MaxD-S_Step*(x+y*(xMax+1)),center= false);
  120.              }
  121.              }
  122.             }  
  123.             echo(x,y,(MaxD/2-S_Step/2*(x+y*(xMax+1)))*2);           
  124.         }
  125. }
  126. }
复制代码

谢谢观赏,如果帮的到你,

thingiverse上点个like吧。






创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(8)
svw
svw
作者
更新了,增加了2个新功能,自顶下。
微笑的rockets
微笑的rockets
已将本文章转帖纸Dreammaker英文论坛。
http://www.dreammaker.cc/forum/viewtopic.php?f=4&t=463
微笑的rockets
微笑的rockets回复svw
改好了。呵呵。
Customerizable torlerance calibration board ( Programmed via OpenScad )
http://www.dreammaker.cc/forum/viewtopic.php?f=4&t=463&p=3295#p3295
微笑的rockets
微笑的rockets回复svw
嗯,确实是谷歌翻译的。
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
Kona226
Kona226
点赞! 先试下再来说结果
dsweiliang
dsweiliang
厉害啊我的哥
R2D2
R2D2
有没有其它人改了?
微笑的rockets
微笑的rockets
嗯,不错的程序,改下程序又有孔又有方也不错。
微笑的rockets
微笑的rockets回复svw
等着你的修改。
或者可以和大家简单讲讲语句的具体作用。
svw
svw
作者
回复微笑的rockets
其实再改下,还可以加六角形(适配螺母),以及改孔为凸起。等空了再弄。
hnyzcj
hnyzcj
哎呦,你们都“浪”到国外网站了
svw
svw
作者
沙了个发
- 没有更多了 -