极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 94986|回复: 17

CNC激光雕刻机及位图打印软件的编程实现(更新GRBL使用心得)

[复制链接]
发表于 2016-4-10 23:50:09 | 显示全部楼层 |阅读模式
本帖最后由 canyonliu 于 2016-4-17 17:55 编辑

看看淘宝已买到的宝贝,下单订购第一个arduino学习板到今天正好一个月了。第一个娱乐加学习项目CNC激光雕刻机今天开始也能工作了,心情大好,虽然是很多人都实践过的,但是对于我,有收获就是值得高兴的事情。开这个贴,接下来把自己的思路跟大家分享。过程中从网上学习了不少资料,在此一并对相关人士表示感谢。
先上张图,这个是我的雕刻机打印在竹片上的图。


来个特写,这是一张100*100像素的图片打印成的:



背景:
从事java数据库开发10多年了。最近对单片机开发感了兴趣,一个月前定了一个arduino开发板,这也是我第一个单片机。它给我打开了一扇大门。

一,雕刻机机械实现

看网上有人拆光驱做雕刻机,我也拆了一个。里面的步进电机滑轨,也用arduino控制起来玩了玩,很有趣,但是我还是决定直接网上订购别人做好的电机滑台。细节不说了。两个滑台到手后,就是得想办法把它组装起来,直接淘宝定了几片10mm厚的铝板。搞来电钻和台钻支架,打孔后组装。这个也没什么特别需要说的。就是个动手能力。上图就好了。

工欲善其事必先利其器,工具:


步进电机控制器,很便宜30元


步进电机控制电源,用一个12V2A的供两个控制器,自制一个一拖二的转接头。


继电器,用于控制激光头电源。


成品

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-4-11 00:57:39 | 显示全部楼层
本帖最后由 canyonliu 于 2016-4-11 14:43 编辑

二,软件控制
程序分为两部分,1,arduino 里的程序用来控制步进电机,
2,C++写了一个console程序来控制arduino并上传打印文件。串口通讯用的是cncomm,这个类很好用,向作者致敬!

先介绍C++的程序功能。

用LaserMarker.exe [commport]启动。
这个是程序运行后的界面。

这个程序里目前有12个命令,下面分别来解释:
1,ready
此命令用来测试arduino是否连接成功,如成功,返回#ready#
如图


2,setpixel [num]
位图打印时,一个像素对应arduino发送多少个脉冲给步进电机控制器。默认设定是100.表示图片里一个像素,arduino发送100个脉冲。

3,setinterval [num]
默认为3,单位为3毫秒,表示arduino发送脉冲的间隔
如下代码,current_pulse_interval就是当前的脉冲间隔,setinterval 就是改变这个值。
while(stepnumber>0){
    digitalWrite(pinPul,HIGH);
    delayMicroseconds(current_pulse_interval);
    digitalWrite(pinPul,LOW);
    delayMicroseconds(current_pulse_interval);
    stepnumber--;
  }

4,setfpm [num]
位图打印就是按行将像素输出,像素分两种,黑点,白点。(激光打印灰度很难控制,暂不考虑),白点就是不打印,可以直接跳过,方法是用最快的电机速度讲激光头移到下一个黑点,但是在一行打印时,第一个碰到的的黑点,很可能由于各种原因没烧黑,这样就会连带后面好多黑点无法烧黑材料。尤其我使用的的是250MW的红光。在每行的第一个黑色像素上需要多停留一些时间,这样能保证此点被烧黑。那么fpm就是first point mutiple(第一点倍数)设定这个参数就是为了让在遇到的第一个黑色像素时脉冲间隔增加一个倍数,默认值设为5,此值跟所用的激光头种类和打印材质有很大关系,我用250MW红光在竹片上打印,这个值需要设为5,才能基本保证每行遇到的第一个黑点被烧黑。

5,laseron
接通激光头电源

6,laseroff
关闭激光头电源

7,xmove [num]
x轴步进电机移动多少像素,注意这里的单位是像素,xmove 10,表示移动10像素,每像素的的脉冲数由setpixel命令设定。

8,ymove [num]
y轴步进电机移动多少像素。

9,tobw [file path]
此命令将指定的24位真彩bmp图片转换成256色灰度bmp图片,格式没变,仅仅是讲像素转换成灰色。最初我希望激光打印能打印灰度,所以做了这个命令,用于将打印出来的跟图片对比,后来发现太困难了。根本无法掌握激光的火候。这个命令对打印用处不大。

10,topf [file path]
这个是将指定的24位真彩bmp图片转换成可打印的lpf格式文件。lpf文件是我定义的一种向arduino通过串口传送的文件。格式是:
前两个字节是图片宽,紧跟着的两个字节是图片高,后面每个字节是两个像素的灰度值。比如
0A 00 02 00 FF FF 00 00 00 FF FF 00 00 00
红色是图片宽10像素
蓝色是图片高2像素
绿色是一行像素值。黑色是另一行像素值。顺序是图片的左下角到右上角。
topf d:/test.bmp
会在同目录下生产一个test.lpf文件。就可以打印了。

11,pf [file path]
这是启动打印的命令,
pf d:/test.lfp
启动后不能停止,想终止打印需要关掉arduino,如果只关掉c++ console程序,arduino会打完当前行后停止。
如图是一个30*4像素的图片打印时的console输出。


12,exit
退出console程序。


源码下载:


这个是c++部分的,用dev c++开发的,不知道vc能不能编译。里面有编译好的lasermarker.exe,下载后可以直接用,记得给串口号作为参数:lasermarker.exe 3

LaserMarker.cpp 主程序
CnComm.h 网上下载的cncomm类,没改动
ClientComm.h 继承cncomm类,用于处理串口发送和文件发送
BmpFile.h bmp文件处理类

arduino部分,原打算可以灰度打印的,后来发现控制火候太难,所以放弃了。这部分代码有个给0-F16个灰度值设定不同脉冲间隔时间的地方,统一设定后,没有删除。大家见谅。另外,没有步进电机也能给arduino装上这个程序,用来参考arduino如何跟pc程序通讯也是可以的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-11 08:44:50 | 显示全部楼层
还行,挺大个头的
回复 支持 反对

使用道具 举报

发表于 2016-4-11 09:12:54 | 显示全部楼层
楼主你的手枪钻固定的工具不错啊,有购买的连接吗?我也想买,请PS我,谢谢啦!!
回复 支持 反对

使用道具 举报

发表于 2016-4-11 09:45:56 | 显示全部楼层
楼主辛苦·谢谢楼主分享!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-11 09:53:15 | 显示全部楼层
G3K 发表于 2016-4-11 09:12
楼主你的手枪钻固定的工具不错啊,有购买的连接吗?我也想买,请PS我,谢谢啦!!

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.B0SPXO&id=521419198772&_u=bnmrnj5cbd1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-17 17:31:10 | 显示全部楼层
本帖最后由 canyonliu 于 2016-4-17 17:42 编辑

这周业余时间研究了下grbl,g代码等知识,感觉有所收获,周末把软件配齐,控制自己的雕刻机。完成了一件自家女儿喜欢的作品,。发出来大家看看哈。


材质是一块桐木块10cm见方,图片是6cm。

说说我的制作过程:
1,找图,ps切一下,切出自己想要的内容。(问女儿刻什么,女儿说能不能刻个鹿晗。。。)

2,导入inkscape,位图转路径


3,可以使用inkscape的工具切掉一些不需要的路径(自动转换的有时路径太多,会导致打印时间太长,有些自动转换出来的路径,删除后,打印效果甚至更好,这个要自己把握。

4,导出成nc文件(使用单独安装的inkscape插件,这个网上很多,我就是网上下载的)


5,在gbrl conroller里开始打开nc文件后启动打印过程。



6,打印出来的只有线条,根本看不出人脸,没关系,我用了一个记号笔把黑色部位给涂个色,搞定了^!^


最后来个特写,能看出来激光刻的线条了吧?


下边总结下这周学到的一些软件的使用
1,grbl,我下载了0.8c的hex文件,用arduino builder下载到arduino上。(网上资料多)
2,grbl controler可以连接写好固件的arduino,接好线,可以手工输入gcode控制雕刻机
比如g0x10y-10,就是让x轴移动10毫米y轴反向移动10毫米。等等。
3,inkscape作图,及导出成扩展名是nc的gcode文件,这个是最考验功底了。我也是新手,以后大家共同学习。

其实作图软件还有不少,比如artcam什么的。暂时还没有时间去学习。感觉激光雕刻是2d的雕刻机,学好inkscape对于diyer就够了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2016-4-29 20:58:16 | 显示全部楼层
激光用铝合金架和57的步进电机,太奢侈了,这配置可以加个Z轴变雕刻机了
回复 支持 反对

使用道具 举报

发表于 2016-4-30 21:26:36 | 显示全部楼层
这两个滑台价格不便宜啊,楼主土豪
回复 支持 反对

使用道具 举报

发表于 2016-6-3 12:28:26 | 显示全部楼层
支持支持支持支持
回复 支持 反对

使用道具 举报

发表于 2016-6-8 11:06:45 | 显示全部楼层
本帖最后由 wwwymq 于 2016-6-8 11:08 编辑

真是土豪,这一堆都上千了,直线模组,博世的电钻,钻架。。。
回复 支持 反对

使用道具 举报

发表于 2016-9-19 13:55:34 | 显示全部楼层
楼主您好我在把Inkscape转换成cn文件时总是报错qq号764523826  谢谢了
回复 支持 反对

使用道具 举报

发表于 2016-11-8 13:08:48 | 显示全部楼层
大哥哥,能把您做的这一套作品,要在arduino买的东西列个清单,包括铝板、丝杆等在哪买?有心想学习这些东西,想照葫芦画瓢学着玩,帮个忙指点一下。衷心的谢谢您!qq:1924956873   
回复 支持 反对

使用道具 举报

发表于 2019-3-1 18:56:10 | 显示全部楼层
土豪啊 真土豪
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 07:33 , Processed in 0.047803 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表