2016-10-22 22:19:28 [显示全部楼层]
8576浏览
查看: 8576|回复: 13

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

[复制链接]
大家知道,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吧。






svw  初级技匠
 楼主|

发表于 2016-10-22 22:21:26

沙了个发
回复

使用道具 举报

hnyzcj  版主

发表于 2016-10-23 09:15:08

哎呦,你们都“浪”到国外网站了
回复

使用道具 举报

Rockets  NPC

发表于 2016-10-25 19:24:25

嗯,不错的程序,改下程序又有孔又有方也不错。
回复

使用道具 举报

svw  初级技匠
 楼主|

发表于 2016-10-26 14:37:33

Rockets 发表于 2016-10-25 19:24
嗯,不错的程序,改下程序又有孔又有方也不错。

其实再改下,还可以加六角形(适配螺母),以及改孔为凸起。等空了再弄。
回复

使用道具 举报

Rockets  NPC

发表于 2016-10-26 17:16:10

svw 发表于 2016-10-26 14:37
其实再改下,还可以加六角形(适配螺母),以及改孔为凸起。等空了再弄。 ...

等着你的修改。
或者可以和大家简单讲讲语句的具体作用。
回复

使用道具 举报

Ricky  NPC

发表于 2016-10-31 16:50:43

有没有其它人改了?
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-10-31 17:44:53

厉害啊我的哥
回复

使用道具 举报

Kona226  初级技师

发表于 2016-11-1 11:26:30

点赞! 先试下再来说结果
回复

使用道具 举报

Rockets  NPC

发表于 2016-11-9 08:11:47

已将本文章转帖纸Dreammaker英文论坛。
http://www.dreammaker.cc/forum/viewtopic.php?f=4&t=463
回复

使用道具 举报

svw  初级技匠
 楼主|

发表于 2016-11-9 14:43:14

Rockets 发表于 2016-11-9 08:11
已将本文章转帖纸Dreammaker英文论坛。
http://www.dreammaker.cc/forum/viewtopic.php?f=4&t=463 ...

不会是谷歌翻译的吧。

标题叫:
Customerizable torlerance calibration board ( Programmed via OpenScad )
会好些吧。
回复

使用道具 举报

Rockets  NPC

发表于 2016-11-9 18:57:35

svw 发表于 2016-11-9 14:43
不会是谷歌翻译的吧。

标题叫:

嗯,确实是谷歌翻译的。
回复

使用道具 举报

Rockets  NPC

发表于 2016-11-14 11:03:08

svw 发表于 2016-11-9 14:43
不会是谷歌翻译的吧。

标题叫:

改好了。呵呵。
Customerizable torlerance calibration board ( Programmed via OpenScad )
http://www.dreammaker.cc/forum/v ... 63&p=3295#p3295
回复

使用道具 举报

svw  初级技匠
 楼主|

发表于 2016-11-30 22:15:08

更新了,增加了2个新功能,自顶下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail