svw 发表于 2016-10-22 22:19:28

可定制的打印误差校正板(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
像这样:




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上下载,也可以点下面的附件。


- 按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=)
{
   
    if (NeedMarks==true)
    {
    //echo(y);
    difference()
    {
    //Generate mark board & seperating line   
    translate([-BasicD/2,BasicD*y,0])
    cube();
    translate([-BasicD/2,BasicD*(y+1)-Dis/4,z-z/4])   
    cube();
   
    //Generate marks
    translate([-BasicD*11/32,BasicD*(y+0.5),z/2])
    rotate()
    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()
    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=)
{

   
    if (Choose_Hole)
    {
      
      difference() // generate a hole
      {
            
      //echo(S_Step*y*xMax*2);
            
      // Generate shapes in a row.   
      translate()
      cube();
      translate()
      cube();
      
         //   echo(BasicD/2);
         //   echo(BasicD/2*i);
            if((x+y*(xMax+1))<ShapeCnt)
            {
         if(Choose_Square ==false)
            {
               
                translate()
                linear_extrude(height= z+z_Solid )
                rotate(a=)
                {
                circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
                }
                }
             else
             {
               translate()
               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()
      cube();
      translate()
      cube();

      if((x+y*(xMax+1))<ShapeCnt)
            {
         if(Choose_Square ==false)
            {
                translate()
                linear_extrude(height= z+z_Solid )
                rotate(a=)
                {
                circle(MaxD/2-S_Step/2*(x+y*(xMax+1)),$fn=Polygon_Select);
                }
                }
             else
             {
               translate()
               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吧。






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

沙了个发

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

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

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

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

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

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

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

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

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

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

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

有没有其它人改了?

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

厉害啊我的哥

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

点赞! 先试下再来说结果

Rockets 发表于 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 发表于 2016-11-9 18:57:35

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

标题叫:


嗯,确实是谷歌翻译的。

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

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

标题叫:


改好了。呵呵。
Customerizable torlerance calibration board ( Programmed via OpenScad )
http://www.dreammaker.cc/forum/viewtopic.php?f=4&t=463&p=3295#p3295

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

更新了,增加了2个新功能,自顶下。
页: [1]
查看完整版本: 可定制的打印误差校正板(1130更新,增加6角形和凸起功能)