APP下载

基于Arduino 的绘图机器人

2016-07-23陈镔张兴远

电脑知识与技术 2016年17期
关键词:矢量图笔尖画板

陈镔++张兴远

摘要:该设计采用Arduino单片机作为处理控制的核心单元,结合使用processing控制软件将位图或者矢量图转化为包含坐标值、尺寸大小、灰度值的信息点单元,通过串口通信发送到Arduino控制器,控制器计算前后的两个坐标之间的线段长度,再将线段分割成若干更细的线条并计算生成新的坐标,通过三角函数将坐标转换为步进电机旋转量,最终达到控制步进电机移动。在绘图方式上有四种选择,绘制变频方形波纹位图、变幅方形波纹位图、随机波纹的位图以及SVG矢量图。该设计方案可靠,成本低廉,同时拥有良好的绘图精度,该机器人能够广泛应用于各种草图的绘制。

关键词:Arduino控制器;信息点单元;processing软件;坐标转换

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)17-0155-05

Abstract: This design uses ATMEGA328 micro controller as the core unit of the treatment and control, the use of processing control software bitmap or vector into coordinates, size and gray value of preview density, the preview density through the serial communication to send to the Arduino controller, the length of the line segment between the two coordinates before and after the controller calculates, segment is divided into a plurality of fine lines, calculation to generate new coordinates, based on trigonometric function will coordinate transformation for the stepper motor rotation, and ultimately achieve the control of stepper motor according to the set of mobile. In the drawing style, there are three options, draw a square wave of the bitmap, random ripple bitmap and SVG vector. This design is reliable, low cost, and with good precision drawing, the robot can be widely applied to various sketch drawing.

Key words: Arduino controller; information point unit; processing software; coordinate transformation

随着计算机及其智能硬件的飞速发展,人们在生活和生产过程中越来越多使用机器人来代替人类的工作,各种各样的机器人也应运而生。绘图技术在人们的生活和工作过程中起着越来越重要的作用。例如工业设计、服装设计、工程设计、游戏素材创作、影视素材创作、教育教学等都需要使用到草图的绘制。矢量绘图技术作为一种新颖的绘图技术被广泛的接受和使用。

但在实际使用过程中,大型打印设备或者绘图仪器价格昂贵,需要专业的技术维护,同时还需要购买相应的配套耗材,普通设计人员和专业工作者无法自行购买。因此研究低成本、结构简单、尺寸大小可调节、并具有良好性能的绘图仪是有十分重要的现实意义和市场价值。

1 绘图机器人硬件实现方案

基于Arduino的绘图机器人,硬件上以L293D驱动板、步进电机和Arduino UNO R3 为核心,通过与上位机processing软件进行通讯,processing软件将图片转化的包含有坐标值、尺寸大小、灰度值的信息点单元,然后把这些信息转化为步进电机移动的指令传递给Arduino控制器。整个硬件方案实现包括步进电机位置的计算与指令分配、步进电机控制原理、图片分析处理、位移控制、UART通信、EEPROM读写设计。系统方框图如图1所示。

图1 系统原理方框图

该绘图机器人具备以下功能和特点:

1)能与processing控制软件实时通信,当输入一张任意图片,能将图片转化为大小、坐标、灰度值的预览密度。

2)能实现绘制变频方形波纹、变幅方形波纹以及随机波纹这三种风格的图画。

3)实现举起笔以及放下笔功能,能进行矢量作图。

1.1 Arduino控制器

Arduino UNO是Arduino USB接口系列的最新版本。UNO的处理器核心是ATmega328,USB接口芯片为ATmega16U2。同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮[1]。Arduino Uno R3功能强大,易于使用,开放电路设计的原始码、免费下载使用开发界面;拥有Flash Memory 32 KB 储存空间符合设计的需求;能与电机控制板相互兼容,使得电路更加简单可靠;同时价格相对比较低廉。

1.2 L293D步进电机驱动

L293D步进电机驱动可正反向控制两个步进电机、单/双步控制、交错或细分和旋转角度控制方式;驱动板给每路提供0.6A(峰值1.2A)电流,而且有过热断电保护,适用电压范围4.5V到36V,自带复位按键[2];同时增加两芯外接电源端口,隔离逻辑电平与驱动电压,使系统更加可靠;L293D能很好地兼容uno r3开发板,有丰富的库文件可直接调用,大大减少了开发工作量。

1.3 步进电机

根据设计分析、硬件需求,选择的步距角为0.9度双相四线双极性的步进电机。步进电机静力矩的确定主要是通过工作时电机的负载,但负载又分成惯性负载和摩擦负载两种[3]。正常情况,静力矩应是摩擦负载的两倍到三倍左右,当确定静力矩时,电机外形和长度便能确定下来[4]。电机的自锁力矩与流过的电流相关,当电流数值不一样,启动时也有一定的差别。绘图机器人的驱动板使用的L293D,该驱动板给每路桥提供最小0.6A电流,通过矩频特性曲线图确定了双相四线双极性的步进电机。双相四线双极性步进电机步进角度小、精度高、力矩大。经过实际测试,该步进电机可控性好,能在短时间内实现运行、停止、方向变换等。在适当频率运行的时候,随机运动方式都不会丢步。

2 绘图机器人软件设计

系统控制软件程序功能具有USB与上位机实时通信[5],主要是对机器X,Y轴进行控制、步进电机的移动速度和加速度控制以及从Arduino控制器返回一些调试参数。在EEPROM上主要是对机器一些固定参数的进行保存或者提取利用,比如机器的大小、画纸的大小、转一圈的步数、同步轮的周长等等,使用了EEPROM可使得机器在使用方面上更加简便,像是一些不需要怎么变化的参数可上传到EEPROM,下次使用可以从EEPROM下载调用。在绘图方式上有两种,一种是位图绘制,另一种是矢量图绘制。在绘制位图风格上的选择主要是利用程序以及坐标的变换等方式实现方波、草图这两种画风。矢量图的绘制主要是利用SVG图片转化为直线段(曲线为短线段),通过串口发送线段的坐标给Arduino处理,最终控制电机绘制。主程序控制流程如图2所示:

2.1 EEPROM的读写设计

EEPROM指电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片[6]。在系统中,EEPROM的控制也是相当重要,机器把一些特定的环境参数和每次启动要加载的参数从指定的地址储存在EEPROM中。当机器启动运行,Arduino从设定的地址常量进行存储器内容的获取,把获得的内容与1进行比较。若大于1则使用当前的数据。若是小于1则说明EEROM里存放的数据是不想要或者为0,则使用默认参数。

程序使用的是Arduino官方的EEPROM库,但是官方库有一个缺陷,每次只能读取或者写入一个地址位。所以对其进行改进,添加了两个子函数一个是在指定的位置从EEPROM读取内容,另一个是从指定的位置写入内容。EEPROM的使用分析流程如图3。

2.2 坐标系统及坐标映射的设计

绘图机器人的坐标系统以及坐标的映射是整个设计的核心部分。坐标系统以左上角步进电机转轴为原点(0,0),向右为X轴增加方向,向下为Y轴增加方向。坐标的映射是通过与控制软件通信获取到的坐标,将坐标映射为两根弦的长度。上位机负责把图片转化为信息单元点元素,其中包含坐标、大小、灰度值。Arduino主控板将坐标换算为弦长并输出。

该功能的实现涉及多种功能以及算法比如串口通信、内存的调用和三角坐标转化等等。实现这功能关键流程是通过串口通信获得前一个的坐标(C1X,C1Y)以及下一个的坐标(C2X,C2Y),分别求出X的差值以及Y的差值。将最大的差值除上N(初始值为1)与当前的最长线段进行比较,直到小于最长线段,求出N的值。然后将差值N等分,加上一个的坐标,转化为弦长,Arduino依次执行动作输出。最后再返回串口通信。坐标机器位移的坐标转化流程图如图4所示:

2.3 位图像素处理设计

在绘图机器人系统中,像素相关控制决定了绘图的美观以及绘制的速度,所以像素的相关控制可以说是至关重要的。像素控制里包括点单元的密度以及绘图风格等等。在程序设计中‘0代表黑色像素,‘255代表白色像素。机器实现这个灰度值是通过对某像素块内进行填充相同粗细的笔的墨水。当需要绘制的草图为深色或者更深颜色时,在这个像素块内填充的墨水就越多,反之浅色直至无色则使用越来越少的墨水。

该绘图机器人主要有两种位图的绘图风格,一是方波绘图像素风格,二是随机绘图像素风格。这个绘图风格主要是受上面所叙的像素密度以及大小的影响。比如绘制方波风格,在绘制中以像素的密度以及尺寸来决定这个像素的大小和墨水的多少。例如颜色以无色或者白色到灰色再到黑色,那么使用方波风格绘画出方波就从‘0频率(即一条直线)到某像素块能容纳的最大墨水,深像素则体现是在线条的多与少。像素相关控制设计流程图如图5所示。

2.4 矢量作图流程设计

矢量作图的本质就是坐标的变换以及坐标的映射与坐标系统及坐标映射的设计流程是一致,但是矢量作图需要提笔与放笔的控制。提笔与放笔是通过舵机来实现的。在控制软件上输入SVG图片,解析并转换为直线段(曲线细分为短线段)。上位机软件发送坐标给Arduino主控器,通过三角函数转换为左右弦的目标长度,步进电机等分运动,最终到达指令所给的弦长。舵机控制流程如图6所示:

3 绘图机器人功能测试

3.1 步进电机位置测试

步进电机放置的位置和画板的大小决定了画笔的能处的最远的运动位置,这是影响到画纸的最大面积的因素,也是机器能正常控制的最大范围。本文选用600mm * 450mm的画板进行测试,步进电机分别放置在画板上的两端如图7所示。理论上来说,机器能控制的最大面积应该为虚线内的面积,但是在测试的过程中发现画板的每边都应该大于最大画纸区域的140mm左右,这样才不会使得同步带啮合错位或者偏移。经过计算若使用600mm * 450mm的画板最大画纸区域长宽为335mm *170mm左右。但是实际上长无法到335mm,最多250mm,当画笔距离电机比较远,同步带与同步轮之间的契合变差,非常容易受到外界的干扰,易发生啮合错位或者偏移等现象。

步进电机的位置以及最大画纸区域大致确定后,需要对笔在运动过程中的稳定性进行测试。当对笔的多个位置进行受力分析,如图8所示。测试中发现当左右两边的皮带与水平方向的夹角(a与b)小于90度也就是大致处在画板中间区域画的稳定最好,受力比较均匀。而在边缘的地方画笔受到水平方向额外的力,导致可能向画板中间区域方向偏移。故在绘图的过程中,应该尽量使得画笔处在画板中间的区域,才不会出现画笔移动或者摇晃。但是这样最大画纸的区域就受到了限制,所以想要增加画纸区域要么改变画板的大小,要么增加两个步进电机之间的距离。

3.2 像素密度的测试

像素块由多少波纹组成取决于笔尖的粗细宽度。假设像素块的大小是30平方毫米,笔尖直径选用的是1毫米的,那么这个像素块最多只能填充30条线。再往像素块内添加任意条数的线,都无法改变其颜色,因为已经达到了最大的深度。假设使用笔尖直径为0.6mm,那么颜色最大的深度就不止30条线,而是需要50条线。当在控制软件中设置笔尖的大小,机器会根据设置的值,尽可能以最大密度进去作画。机器像素的测试如图9所示:

3.3 笔尖直径的测试

基于Arduino绘图机器人可以使用普通中性水笔作为画笔,笔的直径对绘制出的效果有一定的影响,所以在绘制草图过程中需要获得笔尖的直径。一种方法是通过水笔出厂的铭牌信息来进行确定,另一种方法是通过控制软件来测试笔尖宽度。在图纸上用最大的密度画出一连串像素,但是相邻的像素会设置一定的增量,所以当笔尖的厚度达到想要的密度时,这就是合适的笔尖直径。在控制软件中,有三个相关设置参数用来控制测试的大小:

Pen test start tip—这是初始部分的笔尖大小,应该尽量小些。

Pen test end tip—这是机器会尝试的最大笔尖宽度。

Pen test Inc tip—这是机器从开始部分到结束部分之间笔尖宽度的增量。

如果开始部分笔尖大小被设置成0.6,结尾部分是2.0,增量是0.1,那么机器会画出第一个像素就好像它有一个0.6mm笔尖大小的笔,之后画得更宽,每次增长0.1mm,一直增加到2mm。根据绘制出来的草图确定所需的笔直径。

3.4 绘图机器人参数设置

当绘图机器人的画板选定就已经确定了机器人的一些硬件参数,比如长、宽、绘图原点等等。在控制软件修改这些参数,使得控制软件所呈现出的大小与、实际上的大小一致。通过控制软件与机器进行通信将设定好的参数上传到机器的EEPROM内。将参数上传到机器是非常重要的,否则将会出现定位错误。而且上传后在断电的情况下参数也可以保存,以免每次使用都对参数进行设定。但若是修改参数则需要重新上传数据。

将机器人与图片转换设定相同路径,让机器人知道画笔当前位置。这样通过修改控制软件以及将软件参数上传到机器,使得两者同步。在每次画图前都需要对当前位置进行校准,其中包括机器人画笔的位置。需要人为地将画笔装置调整到在画板上测得的画图原点。编写零点代码时,零点的设置是可变的,随着机器的大小而进行改变。

3.5 不同绘图方式的比较

基于Arduino绘图机器人的绘图方式有四种,绘制变频方形波纹位图、变幅方形波纹位图、随机波纹的位图以及SVG矢量图。在选择不同方式的绘图,其美观程度、墨水消耗以及时间上也是有区别的。在图片格式大小上,图片越大越耗时就越多。若绘制相同A3纸大小的图,不同绘图方式的具体比较信息见表1。

4 结束语

基于Arduino的绘图机器人以Arduino控制器为核心,通过串口与上位机软件processing相结合,实现了位图、矢量图的绘制。坐标系统、坐标的映射以及像素的相关控制是整个绘图机器人设计的核心。该绘图机器人绘图尺寸能够根据需求进行调节,硬件设备安装简便,拥有四种不同绘图方式:变频方形波纹的位图、变幅方形波纹的位图、随机波纹的位图以及矢量图。在四种方式中绘图使用的图片格式,位图对格式的要求不高,普通图片格式即可,但矢量图对图片格式要求较高,格式上可能需要一定的转化。在相似度上,矢量图与原图相识度几乎一致,而位图需要在一定的距离观看,才能达到相似的效果。位图的绘制虽说与原图无法相比较,但是作为服装设计或者视觉设计上的草图绘制已经能够达到要求。同时该绘图机器人在绘制矢量图中,特别是在教学实践中绘制各类矢量格式原理图速度快、绘制精度高,能够替代人工绘图,有着很好的应用前景。也能将该款机器人应用与各类商业广告平台,实时绘制广告标语和商标图案。

参考文献:

[1] 开源知识库. ArduinoUno[EB/OL]. (2011-11-23). http://kb.open.eefocus.com/index.php/Arduino_Uno.

[2] Arduino中文社区. 概述Arduino 电机驱动扩展板L293D马达板 motor control shield[EB/OL]. (2013-10-13).

[3] blankas. 步进电机[EB/OL]. (2015-07-20). http://baike.baidu.com/link?url=AtUkp1x-vsKkWhiE4ZGppIpjAkRN21peBNMesRQiFlQDynSFfDg3uln6qTY_XQzD2XCvMq09uNdYvv7D6U5bFK.

[4] 于海生. 计算机控制技术[M]. 北京: 机械工业出版社, 2011: 55-76.

[5] 陈吕洲. ARDUINO程序设计基础[M]. 北京: 航空航天大学出版社, 2014: 24-171.

[6] John BOXALL. 动手玩转Arduino[M]. 翁恺,译. 北京: 人民邮电出版社, 2014: 264-298.

猜你喜欢

矢量图笔尖画板
Analysis of the line current differential protection considering inverter-interfaced generation station and countermeasures
寻找笔尖上的少年
让真情在笔尖流露
深情笔尖下的西部惊叹曲
笔尖上的“京味儿”
邻域平均法对矢量图平滑处理
一道高考题的解析及应用推广