自从苹果的原装键盘罢工之后,就入了机械键盘的大坑,无奈除了少数几个牌子有for Mac版本的之外,大多数键盘都是for PC,甚至套装键帽也没有苹果版的,command键、option键没有怎么能忍受,于是想试试自己能不能烧制几个,想起来半年前看到 Instructable 上有人用旧光驱做出了微型激光雕刻机,于是准备制作自己的激光雕刻机。
仔细看了几篇文章,最后选择了SilverJimny的The MicroSlice的方案作为这次的主要参考,因为这个方案完成度很高,尤其是SilverJimny给出了完整的机架CAD图纸,而且做得很漂亮。不过制作说明写得还有一些含糊,制作的过程中基本也是一边尝试一边摸索,也走了些弯路,我会尝试在这篇帖子中讲清楚。
最终完成品功能:
大于50mm X 50mm 的工作区域;
能够切割纸张、雕刻塑料、木头;
所用到软硬件都是开源的;(arduino + Grbl 0.9)
花最少的钱办最多的事;
可扩展,比如用树莓派,或者增加第三轴用于调焦;
!!第一处注意点:
arduino不论新旧(我用的
Duemilanove,你也可以用Uno)不过烧录Grbl控制程序(0.8版本以上)对容量有要求,我们要使用328P的芯片;
Grbl官方build的版本可能无法直接用(原因后面会说明),需要改源代码重新编译或者使用我编译好的版本;
Step1:准备材料 (这里列出原清单,逐一说明,链接全部改为某宝)
1 x Arduino板 (uno/ Duemilanove都行 328P芯片)
1 x X 轴马达;
1 x Y 轴马达;
1 x 两路继电器 (我买的继电器低电平吸合,高电平释放,这和Grbl里面的设定刚好是反的,因此后面要改源代码);
2 x Easydriver板 (这货比较贵,买国产的就行,其实也不一定非用easyDriver,比如我后来发现sparkfun的 auto driver板子更牛逼,多达128微步,不过换其他板子需要改机架安装孔位,8微步是必须的,如果考虑更便宜的国产板要把这个要素考虑在内);
2 x 5v 稳压模块
2 x 散热片 (散热片没有现成尺寸的,需要自行切割,后面会说明)
1 x 45x45x10 风扇 (12v) (45X45的风扇已经比较难少见了,我建议是买50X50的,改一下机架)
4 x 微动开关 (带钢片)
9 x 铷磁铁棒 (这个用处不大,可以忽略)
4 x 橡胶脚垫 (可以忽略,或者用别的垫片自行切割)
5 x M3机箱手拧螺丝
1 x 激光二极管
(我用的是三菱ML101F27,研究了很久,这是我能找到的最便宜的,功率也够大的激光二极管)
1 x 激光模组 45mm
1 x 激光驱动板
1 x 激光镜头 (一般模组自带的是塑料镜头,不够好)
1 x 4mm 铝管(内径3mm, 长度100mm就足够用了)
2 x 3mm x 150mm 钢棒
1 x 3mm x 100mm 钢棒 (这个一定要很直很光,我建议买回来自己用手锯切割,因为代割不准)
17 x M3 花牙压板螺母(SilverJimny用的那种国内没的卖,找的替代品,感叹一下国产紧固件落后人几十年)
6 x M2 沉头螺丝 (6mm) (沉头螺丝用来装光驱步进电机)
6 x M2 螺母
20 x M3 螺母
6 x M2 平头螺丝 (6mm) (用来装钢棒两端的固定木片)
8 x M2 平头螺丝 (8mm) (平头螺丝装微动开关)
4 x M3 尼龙螺丝 (6mm) (用来固定easydriver等板子)
4 x M3 50mm 铜柱
7 x M3 内六角螺丝 (8mm)
8 x M3 3mm 尼龙隔离柱
2 x 机架激光切割加工
另外我补充一下SilverJimny没列出来但是必要的零件,工具:
快干白乳胶;
220V转12V变压器(输出电流最好能在1A以上,因为arduino的5V电压是拖不动步进电机的,需要通过DC Jack额外供电)
4 x M3 16mm螺丝(用于安装风扇)
铝箔(淘宝可以买到带背胶的,一定要光面,越光洁对激光的反射越强);
杜邦线、杜邦头(公母都要);
杜邦头塑料壳(1P、2P、3P、4P都需要一些,当然你也可以只用1P,只是到时候接线更乱些);
单排、双排插针都需要一些(焊在easydriver上,有些店家有送,不过仍然需要一些额外的双排插针);
1.0mm的4P插座(用来接步进电机,不用的话焊线会很考验手工);
尼龙扎带几根;
3M导热胶(用来粘散热片);
一个5mw的激光头(这个用来测试的时候用,因为大功率的激光很危险,必须确定一切妥当之后再安装,你也可以用led代替,不过需要串接个降压电阻);
激光防护眼镜(便宜的那种只能说聊胜于无,300左右的我没买,最后家里找了副Speedo泳镜(银闪闪带反射镀膜那种)+ 绿色墨镜(吸收红光)= 双重防护 ,基本OK了,调焦的时候需要直视激光,完了只要不看就可以了,实在不想买,也可以用相机或摄像头来间接观察激光,
切记不可以用眼睛直接观察激光,伤害非常大,会造成白内障!!!)
工具:
水口钳、剥线钳、压线钳(压杜邦头)、钢锯、电烙铁、电钻、微型虎台钳(最大开口要5cm以上,要夹在桌子上的那种,不要吸盘式的)
模型用强力夹(20只是必须的,如果有几个F夹更好);
这里写得比较啰嗦,后面有不明白的地方可以回过头来再看看,你会觉得有用的;
Step2:少年,来拼模型吧
加工好的机架木片,3mm航空椴木,其实到手就可以拼装了,但是...等等…这白白的木色怎么能够衬托出某屌的高大上,喷个漆再说。
喷漆选了亚光黑,对手艺要求低效果也好,右边这种喷罐需要两听,喷一遍—晾干,双面来回三遍;记得喷的时候背面用胶带贴好,免得零件翻面时候掉出来,完美控也可以先拼好再上色;
从最简单的地方下手吧,先把上面的部分找出来拼好,用胶水固定,注意除了主体4片,还有两小片粘在下方背面,如下图所示。
接下来拼装龙门架,因为有些步骤漏掉没拍,所以借用一下SilverJimny的图
这里有两点需要注意:
第一:安装光驱步进电机的那两颗沉头螺丝,安装好以后一定不能凸出来,否则滑块容易被卡住,解决的办法:买个沉头钻,把沉头孔打深一点,不够再把螺丝磨平一点;
第二:看到龙门下部的那两个圆孔了么?铝管就是装在这里的,果断插入,铝管一定要能够顺滑的在钢棒上滑动,如果内孔不够光滑,可以上一点油,套在钢棒上打磨几下,打到光滑为止;
Step3:上部工作台
这部分没有太多需要说明的,注意一下中间两片梁的方向就可以了;
到这已经可以把上半部分拼起来看一下效果了,注意不要忘记安装档片;
Step4:切割台
切割台最简单也最烦,两片用胶水黏住就好了,要覆盖上一层铝箔用来反射激光,防止激光把机架烧断,这里蜂窝状的结构有点麻烦,只能用小刀一点点刻出来,建议先贴好铝箔,再黏合两片板,这样刻的时候方便点。嫌麻烦的可以不割,优点是保护性其实更好,缺点是不够拉风;
上了土豪金是不是立刻高大上了很多;
Step5:稳压模块和散热片
注意模块插针要自行焊接的,焊好以后把背面多出来的引脚用水口钳剪掉,并且用锉刀打平以便粘散热片;
单耳散热片没有现成的买,基于花最少的钱办最多的事原则,买了两片45mmX45mm的金色散热片,用手锯锯成合适的大小,电钻打一个M3大小的眼,用3M导热胶带粘在了模块背面;(粘之前务必和板子对一下孔位)
Step6:风扇
风扇比较简单 螺丝上好,电源线缠一下用困扎带固定,
接线端火线做一个杜邦公头,零线一个杜邦母
Step7:底座
底座做好是分离的两个部件,如图所示,然后通过下图的铜柱拧合在一起
首先把小圆环全部理出来, 按孔大小分好类,一共是4种,其中4个刚好可以嵌入压板螺母孔径最小的圆环拿出4个放到旁边(备用品),其余的分成4组
剩下的压板螺母全部嵌到板子里,这些螺母是用来固定电路板模块的
看一下数量的分配
小圆环胶合的时候可以用我们的钢棒套一下来辅助定位,这样粘的准一点
把风扇支架插上去试一下,如果刚好能卡进去那就对了
再对一下,最后完成的是这样分开的两块板,注意上面那块板上有4个圆环,刚好铜柱可以通过去,这4个环之起到美化作用,没有结构意义
Step8:接线(这部分大多数贴都没讲清楚,加上一些非常规的接法,导致我走了不少弯路,我会尽量讲细一点)
以上接线图只看一下效果,没有什么实质性的意义,拍再多也讲不清楚,我下面会画一个原理图,不过首先让我们明确一下几个要点:
1. 我们买到的步进电机额定电压是4~6V,但是!!我们给easyDriver驱动板供电是接12V,你没看错,有人说这样接不会烧电机么?是的,如果电机不走的情况下直接12V会很烫并且容易烧毁,但是easyDriver有个enable针脚,可以控制只在运行的情况下供电,算是超频使用了,如果你非要接5V供电,结果就是装好后无法拖动机架,很容易卡住、失速;(不过切记测试板子的时候不要接12V,除非你已经接好enable针脚)
2. 风扇额定电压是12V,但是我们是接到5V的稳压模块上的,也就是降频使用,很奇怪吧,不过不要怀疑,就是这么接的,因为风扇全速会把纸吹跑,我们只要一点点风降温就够了;
3. 两个稳压模块的输入端都是接12V,降压到5V使用,这样做的原因是为了获得更大的输出电流,激光头和风扇马达在这个项目里也算是大功率设备;
4. 总结一下, 除了继电器的输入电压是5V,其他所有负载接的都是12V(风扇,激光接的是12V降压后的5V),12V电压如何获得?arduino外接变压器,Vin针脚输出是12V;
如果对接线还有不清楚的地方, 可以看一下 Grbl的wiki
最后说明一下easyDriver的8微步,easyDrive通过MS1,MS2的高低电平来细分步进电机的微步,8微步也就是将原来的一步细分为8步,获得更精确的控制,比如我们用的电机一转20步,现在变成一转160步。幸运的是,easyDriver板子默认就是8微步,我们不需要再进行额外的设置,如果有兴趣的可以看一下 easyDriver官网的说明,低的细分会获得更高的扭矩(电机力气更大,不过这个项目中我们已经通过接12V超频使用来获得更大扭矩了)。
Step9:设置软件
这台机器,我们使用Grbl v0.8来做控制(烧进Arduino)。
还需要一个配套的客户端软件,通过串口向Grbl发送G-code代码。
最后我们还需要用一套工具来画图,并且把图转为G-code代码。
整个的流程是这样:
矢量图——> 转为G-code——> 通过串口发送到Arduino——>Grbl解析代码并且控制机器切割
接下来我们一步步讲解:
1. 将Grbl烧录进Arduino:
我这里用的0.8c版本,截至写稿时最新的是0.9Beta,也OK(0.9主要优化了弧线的绘制),只不过参数稍有不同
要烧录Arduino,需要用到Arduino IDE, 各位应该都装了,没有的请去 官网下载
烧录之前,确保激光头已经断开(我的建议是大家一直使用5mw的低功率激光头,等最后全部搞好没有问题了再换成大功率的)
Grbl wiki 详细说明了 如何烧录预编译好的头文件
树莓派的使用者可以参考Zapmaker的 在树莓派上安装Grbl
之前提到过,官方预编译的头文件在我们这个项目不好用,需要改源码,附件中我提供了改好的头文件
2. 客户端工具有两个,我们实际使用 Universal GcodeSender,不过 GrblController有一个不错的参数面板,另外spindle on可以简单的控制激光开关,我们测试和设置的时候用这个(可惜这个软体有bug,Gcode的速度代码认不出,总之我们只用它来调试)
GrblController连上aduino后,点Advanced——>Grbl Setting 我们可以看到Grbl的初始化参数如下:
$0=755.906 (x, step/mm)
$1=755.906 (y, step/mm)
$2=755.906 (z, step/mm)
$3=30 (step pulse, usec)
$4=500.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=25 (step idle delay, msec)
$8=50.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=0 (hard limits, bool)
$17=0 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=250.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=1.000 (homing pull-off, mm)
我们最关注的两个参数是 $0 和 $1 这两个参数决定X和Y轴的每mm步长,如果设置不正确,那我们烧出来的图片就和设定尺寸不一致
这两个参数如何计算?
步数 = 每转步数 X 微步数 / 蜗杆螺距
比如我们的电机是20步每转,微步数是8,螺距是3mm,那么:
20 X 8 / 3 = 53.33333333 就是我们得到的结果;
其他的设置主要是空行程时候的速度,各项功能的开关及掩码等等不一一赘述,有兴趣深入的同学可以去 Grbl wiki 进一步了解,总之将参数设置如下:
$0=53.333 (x, step/mm)
$1=53.333 (y, step/mm)
$2=53.330 (z, step/mm)
$3=10 (step pulse, usec)
$4=2000.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=25 (step idle delay, msec)
$8=10.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=1 (hard limits, bool)
$17=1 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=200.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=2.000 (homing pull-off, mm)
3.要画图并生成G-code,最好的工具是 inkspace+laserengraver插件(件附件),画图你可以用任何矢量软件,只要能存为SVG就好了,然后在inkspace里面输出,附件里我给了一个转好的样例文件供下载;
4.修改Grbl源代码
因为Grbl默认是3轴,而我们的机器只有2轴,因此z轴的代码可能会引发一些问题(比如归零的时候卡住了之类)因此我们需要改一下1.下载 Grbl 源文件
2.解压
3.用你喜欢的文本编辑器打开config.h文件
4. 找到以下代码:
#define HOMING_SEARCH_CYCLE_0 (1< #define HOMING_SEARCH_CYCLE_1 ((1<
改为:
// #define HOMING_SEARCH_CYCLE_0 (1<
#define HOMING_SEARCH_CYCLE_0 ((1<
5. 找到一下代码:
#define HOMING_LOCATE_CYCLE ((1<
改为:
#define HOMING_LOCATE_CYCLE ((1<
6. 保存
第二处需要修改的部分取决于你用的继电器,我买到的继电器是低电平触发,这和Grbl配置相反,
有的人想,只要接线改接到常闭就好了呗?答案是不行,如果这样接的话,我们设想一下,arduino通电前,因为整个系统没有电,激光不亮,通电瞬间,因为磁吸是有延时的,激光先亮,然后继电器吸合了,常闭端变成开路,激光灭。
也就是说插上usb口的瞬间,激光会亮一下,这一下足以把你的纸烧个洞,完美控当然不能忍;
废话不多说还是改代码:
1. 文本编辑器打开 spindle_control.c文件
2. 把所有出现
1< 和
~(1<的地方相互交换一下;
3.保存
将改好的 源代码重新编译
Step10. 最后补充一下激光头的安装
要测一下激光二极管正负极,这个用2节5号电池实际接一下就可以了,如果你和我使用的是同一型号,那么正负极如图所示
二极管可能不太好压进管内,正确的压法是这样,所以你看到虎台钳的必要性了
接线和焊接,注意你买的模组长度要能够容纳下驱动板
如果所有步骤都正确,到这里,所有的工作就都完成了,享受烧纸、刻木头的乐趣吧!!
转自:http://www.dfrobot.com.cn/community/thread-1512-1-1.html
Gcode Sample.zip ,laserengraver插件.zip,modded_grbl_hex.zip详见下载附件