没有买mega2560的板子,因为最近价格有些贵。12块的8266手上有几块。这个绘图机可能和大家都的不一样,只是一个玩具,验证性的原型机。
材料准备:
完如下图,只用XYZ相关部分,不用安装挤出相关部件,但要安装打印头的铝块。
这种笔很常见,把笔打开,削掉一部分笔芯,然后把弹簧放在顶部,解决绘制过程中纸面不平的问题,由于笔尖有弹性可以自动补偿。这个是参考了大鱼。
绘制笔的安装,笔刚好能放进打印洞,然后用2根扎带穿过笔上端的孔,绕过打印头中间轴固定好笔。
esp8266只控制step/dir两种信号,共计6个,同时输出5V供电机驱动模块。42电机驱动使能脚全部接地。虽然esp8266有更多的GPIO脚,但是它们是复用的,使用了会引起一些问题,比如下载受影响。这6个脚是摸索出来的,可以安全使用。
X电机:
Xstep-> esp8266控制板D6也就是GPIO12
Xdir-> esp8266控制板D5也就是GPIO14
Y电机:
Ystep-> esp8266控制板D1也就是GPIO5
Ydir-> esp8266控制板D2也就是GPIO4
Z电机:
Zstep-> esp8266控制板D0也就是GPIO16
Zdir-> esp8266控制板D7也就是GPIO13
具体连接参考如下图:
还有ramps的供电:
是用8266上的5V供电,也就是usb供的电。
完整的电路连接:
以上硬件完成后,
大致流程是:
矢量图编辑软件,选择的是开源免费的inkscape1.0.2.去官网下载。
如果拿一张图片制作矢量图,有时候还是很麻烦的,如果本身就是线条型图片,相对容易得多。如果能下到svg这样的矢量图最好。
以葫芦娃图片为例生成svg文件。
插入inkscape,会自动弹出导入选择ok
进入path/trace bitmap
选择autotrace效果比较好,OK后关掉
点击红框内的path,进入路径模式,会显示path信息。如下图,说明路径信息已经生成。
点击红框内,进入对象模式,点击图片,然后按del键删除图片,只保留path对象。
然后如下图,只有path.
调整大小,和位置。
输出保存为svg文件。
Inkscape 扩展插件gcodeplot有这个功能。
不过它原先是绘制区域的方式,我改了一下只描边,直接用命令行进行转换gcode。
转换工具代码:
https://github.com/chuanjinpang/esp8266_upy_plotter_controller_fireware/tree/main/svg-gcodeplot
转换命令:
python3 gcodeplot.py -Z 2.5 -Z 0 -t 0.125 your_file_name.svg
转换结果:
生成带注释的your_file_name.svg.gcode
和一个不带注释,更紧凑的rmc_your_file_name.svg.gcode
由于上传速度慢,一般使用rmc_your_file_name.svg.gcode
参数说明:
-Z|--lift-delta-z=z: amount to lift for pen-up (millimeters) Z轴提笔高度,相对于z-work的。如果板子很平,可以设置得比较小。
-z|--work-z=z: z-position for drawing (millimeters) Z轴工作高度,一般设置为0.因为没有限位。
-t|--tolerance=x: ignore (some) deviations of x millimeters or less [default 0.05] 绘制精度,越小越精细,当然gcode文件也会越大。绘制时间也会越久。
可以用些软件查看生成的gcode 绘制结果。这个网页查看不错:https://ncviewer.com/
相关windows软件下载地址:
https://github.com/chuanjinpang/esp8266_upy_plotter_controller_fireware/tree/main/upy_windows_tool
可以使用MicroPython File Uploader,将gcode文件上传到esp8266上。
选择好串口,打开串口,选择要上传的文件,发送。
说明:不要使用uPyCraft上传,它好像会自动去掉\r\n这样的行,然后python逐行读取gcode会出现问题。
上传完毕后,可以在uPyCraft/device文件夹下看到相对的xx.gcoe文件。
这一步本来是不必要的,但是因为没有装限位器,所以要手工把X,Y,Z调整到合适的位置。
原代码如下位置为XY的零点。Z零点就是在纸面工作位置上。
个人喜欢用uPyCraft操作upy。简单快捷。
将绘制程序上传,py文件用uPyCraft上传没有问题。
绘制程序只有3个文件:
stepper.py
|
实现42步进驱动 A4988 或者TMC2225,驱动dir/step/en.
step(self, count)实现方向转动step,负值是反向,正值是挂电正向转step.
由于8266实际可用GPIO脚太少,只有6个可安全任意使用,其它脚会引起一些问题,比如使用GPIO15影响下载,运行后下载就状态不对了。
|
corexy.py
|
实现corexy的位置控制,
set_xy(self,ex,ey)驱动X,Y轴位置
set_z(sz,ez)驱动Z轴位置
注意这里Z轴是独立的,不是corexy的部件,原因是Z本身是独立的,如果是激光绘制,就没有Z轴步进的概念,只有一个控制信号。
可能将来会做一个激光雕刻的原型机。
|
draw_gcode.py |
实现gcode绘制
draw_gcode_file(cxy,sz,gp,"3rect.svg.gcode")绘制指定的gcode.
由一个gcode_parse来解析gcode,支持最多4个参数。
def cxy_run_gcode_file(cxy,sz,gp,file_name)
解析器单独运行,负责解析,然后调用cxy_run_xyz()驱动3轴运行。
def cxy_run_one_gcode(cxy,sz,gp,line): update,x,y,z= gp.parse_one_gcode(line) if update: return cxy_run_xyz(cxy,sz,x,y,z) else : return x,y,z
|
在主绘制程序文件draw_gcode.py中,指定一下要绘制的gcode文件名:
draw_gcode_file(cxy,sz,gp,"rmc_plane_v.svg.gcode")
具体代码如下:然后点击>下载并运行。
绘制有点慢,下面好像画了30分钟?
为啥用upy进行原型机开发,原因是快速,交互性调试。开发效率高,除了运行慢。
stepper.py 里面是步进电机控制的,可以来测试单个电机的操作。
可以在console里面直接输入
sx = Stepper(14, 12, 13, speed=10000,name="x")
sx.step(100)进行交互性调试,这也是python方便强大的地方。
Corexy.py一样,有一个调试程序,也可以直接在console里面交互性调试。