国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Arduino 的繪圖機(jī)器人

2016-07-23 20:17陳鑌張興遠(yuǎn)
電腦知識與技術(shù) 2016年17期
關(guān)鍵詞:矢量圖筆尖畫板

陳鑌++張興遠(yuǎn)

摘要:該設(shè)計采用Arduino單片機(jī)作為處理控制的核心單元,結(jié)合使用processing控制軟件將位圖或者矢量圖轉(zhuǎn)化為包含坐標(biāo)值、尺寸大小、灰度值的信息點單元,通過串口通信發(fā)送到Arduino控制器,控制器計算前后的兩個坐標(biāo)之間的線段長度,再將線段分割成若干更細(xì)的線條并計算生成新的坐標(biāo),通過三角函數(shù)將坐標(biāo)轉(zhuǎn)換為步進(jìn)電機(jī)旋轉(zhuǎn)量,最終達(dá)到控制步進(jìn)電機(jī)移動。在繪圖方式上有四種選擇,繪制變頻方形波紋位圖、變幅方形波紋位圖、隨機(jī)波紋的位圖以及SVG矢量圖。該設(shè)計方案可靠,成本低廉,同時擁有良好的繪圖精度,該機(jī)器人能夠廣泛應(yīng)用于各種草圖的繪制。

關(guān)鍵詞:Arduino控制器;信息點單元;processing軟件;坐標(biāo)轉(zhuǎn)換

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼: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

隨著計算機(jī)及其智能硬件的飛速發(fā)展,人們在生活和生產(chǎn)過程中越來越多使用機(jī)器人來代替人類的工作,各種各樣的機(jī)器人也應(yīng)運而生。繪圖技術(shù)在人們的生活和工作過程中起著越來越重要的作用。例如工業(yè)設(shè)計、服裝設(shè)計、工程設(shè)計、游戲素材創(chuàng)作、影視素材創(chuàng)作、教育教學(xué)等都需要使用到草圖的繪制。矢量繪圖技術(shù)作為一種新穎的繪圖技術(shù)被廣泛的接受和使用。

但在實際使用過程中,大型打印設(shè)備或者繪圖儀器價格昂貴,需要專業(yè)的技術(shù)維護(hù),同時還需要購買相應(yīng)的配套耗材,普通設(shè)計人員和專業(yè)工作者無法自行購買。因此研究低成本、結(jié)構(gòu)簡單、尺寸大小可調(diào)節(jié)、并具有良好性能的繪圖儀是有十分重要的現(xiàn)實意義和市場價值。

1 繪圖機(jī)器人硬件實現(xiàn)方案

基于Arduino的繪圖機(jī)器人,硬件上以L293D驅(qū)動板、步進(jìn)電機(jī)和Arduino UNO R3 為核心,通過與上位機(jī)processing軟件進(jìn)行通訊,processing軟件將圖片轉(zhuǎn)化的包含有坐標(biāo)值、尺寸大小、灰度值的信息點單元,然后把這些信息轉(zhuǎn)化為步進(jìn)電機(jī)移動的指令傳遞給Arduino控制器。整個硬件方案實現(xiàn)包括步進(jìn)電機(jī)位置的計算與指令分配、步進(jìn)電機(jī)控制原理、圖片分析處理、位移控制、UART通信、EEPROM讀寫設(shè)計。系統(tǒng)方框圖如圖1所示。

圖1 系統(tǒng)原理方框圖

該繪圖機(jī)器人具備以下功能和特點:

1)能與processing控制軟件實時通信,當(dāng)輸入一張任意圖片,能將圖片轉(zhuǎn)化為大小、坐標(biāo)、灰度值的預(yù)覽密度。

2)能實現(xiàn)繪制變頻方形波紋、變幅方形波紋以及隨機(jī)波紋這三種風(fēng)格的圖畫。

3)實現(xiàn)舉起筆以及放下筆功能,能進(jìn)行矢量作圖。

1.1 Arduino控制器

Arduino UNO是Arduino USB接口系列的最新版本。UNO的處理器核心是ATmega328,USB接口芯片為ATmega16U2。同時具有14路數(shù)字輸入/輸出口(其中6路可作為PWM輸出),6路模擬輸入,一個16MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP header和一個復(fù)位按鈕[1]。Arduino Uno R3功能強(qiáng)大,易于使用,開放電路設(shè)計的原始碼、免費下載使用開發(fā)界面;擁有Flash Memory 32 KB 儲存空間符合設(shè)計的需求;能與電機(jī)控制板相互兼容,使得電路更加簡單可靠;同時價格相對比較低廉。

1.2 L293D步進(jìn)電機(jī)驅(qū)動

L293D步進(jìn)電機(jī)驅(qū)動可正反向控制兩個步進(jìn)電機(jī)、單/雙步控制、交錯或細(xì)分和旋轉(zhuǎn)角度控制方式;驅(qū)動板給每路提供0.6A(峰值1.2A)電流,而且有過熱斷電保護(hù),適用電壓范圍4.5V到36V,自帶復(fù)位按鍵[2];同時增加兩芯外接電源端口,隔離邏輯電平與驅(qū)動電壓,使系統(tǒng)更加可靠;L293D能很好地兼容uno r3開發(fā)板,有豐富的庫文件可直接調(diào)用,大大減少了開發(fā)工作量。

1.3 步進(jìn)電機(jī)

根據(jù)設(shè)計分析、硬件需求,選擇的步距角為0.9度雙相四線雙極性的步進(jìn)電機(jī)。步進(jìn)電機(jī)靜力矩的確定主要是通過工作時電機(jī)的負(fù)載,但負(fù)載又分成慣性負(fù)載和摩擦負(fù)載兩種[3]。正常情況,靜力矩應(yīng)是摩擦負(fù)載的兩倍到三倍左右,當(dāng)確定靜力矩時,電機(jī)外形和長度便能確定下來[4]。電機(jī)的自鎖力矩與流過的電流相關(guān),當(dāng)電流數(shù)值不一樣,啟動時也有一定的差別。繪圖機(jī)器人的驅(qū)動板使用的L293D,該驅(qū)動板給每路橋提供最小0.6A電流,通過矩頻特性曲線圖確定了雙相四線雙極性的步進(jìn)電機(jī)。雙相四線雙極性步進(jìn)電機(jī)步進(jìn)角度小、精度高、力矩大。經(jīng)過實際測試,該步進(jìn)電機(jī)可控性好,能在短時間內(nèi)實現(xiàn)運行、停止、方向變換等。在適當(dāng)頻率運行的時候,隨機(jī)運動方式都不會丟步。

2 繪圖機(jī)器人軟件設(shè)計

系統(tǒng)控制軟件程序功能具有USB與上位機(jī)實時通信[5],主要是對機(jī)器X,Y軸進(jìn)行控制、步進(jìn)電機(jī)的移動速度和加速度控制以及從Arduino控制器返回一些調(diào)試參數(shù)。在EEPROM上主要是對機(jī)器一些固定參數(shù)的進(jìn)行保存或者提取利用,比如機(jī)器的大小、畫紙的大小、轉(zhuǎn)一圈的步數(shù)、同步輪的周長等等,使用了EEPROM可使得機(jī)器在使用方面上更加簡便,像是一些不需要怎么變化的參數(shù)可上傳到EEPROM,下次使用可以從EEPROM下載調(diào)用。在繪圖方式上有兩種,一種是位圖繪制,另一種是矢量圖繪制。在繪制位圖風(fēng)格上的選擇主要是利用程序以及坐標(biāo)的變換等方式實現(xiàn)方波、草圖這兩種畫風(fēng)。矢量圖的繪制主要是利用SVG圖片轉(zhuǎn)化為直線段(曲線為短線段),通過串口發(fā)送線段的坐標(biāo)給Arduino處理,最終控制電機(jī)繪制。主程序控制流程如圖2所示:

2.1 EEPROM的讀寫設(shè)計

EEPROM指電可擦可編程只讀存儲器,是一種掉電后數(shù)據(jù)不丟失的存儲芯片[6]。在系統(tǒng)中,EEPROM的控制也是相當(dāng)重要,機(jī)器把一些特定的環(huán)境參數(shù)和每次啟動要加載的參數(shù)從指定的地址儲存在EEPROM中。當(dāng)機(jī)器啟動運行,Arduino從設(shè)定的地址常量進(jìn)行存儲器內(nèi)容的獲取,把獲得的內(nèi)容與1進(jìn)行比較。若大于1則使用當(dāng)前的數(shù)據(jù)。若是小于1則說明EEROM里存放的數(shù)據(jù)是不想要或者為0,則使用默認(rèn)參數(shù)。

程序使用的是Arduino官方的EEPROM庫,但是官方庫有一個缺陷,每次只能讀取或者寫入一個地址位。所以對其進(jìn)行改進(jìn),添加了兩個子函數(shù)一個是在指定的位置從EEPROM讀取內(nèi)容,另一個是從指定的位置寫入內(nèi)容。EEPROM的使用分析流程如圖3。

2.2 坐標(biāo)系統(tǒng)及坐標(biāo)映射的設(shè)計

繪圖機(jī)器人的坐標(biāo)系統(tǒng)以及坐標(biāo)的映射是整個設(shè)計的核心部分。坐標(biāo)系統(tǒng)以左上角步進(jìn)電機(jī)轉(zhuǎn)軸為原點(0,0),向右為X軸增加方向,向下為Y軸增加方向。坐標(biāo)的映射是通過與控制軟件通信獲取到的坐標(biāo),將坐標(biāo)映射為兩根弦的長度。上位機(jī)負(fù)責(zé)把圖片轉(zhuǎn)化為信息單元點元素,其中包含坐標(biāo)、大小、灰度值。Arduino主控板將坐標(biāo)換算為弦長并輸出。

該功能的實現(xiàn)涉及多種功能以及算法比如串口通信、內(nèi)存的調(diào)用和三角坐標(biāo)轉(zhuǎn)化等等。實現(xiàn)這功能關(guān)鍵流程是通過串口通信獲得前一個的坐標(biāo)(C1X,C1Y)以及下一個的坐標(biāo)(C2X,C2Y),分別求出X的差值以及Y的差值。將最大的差值除上N(初始值為1)與當(dāng)前的最長線段進(jìn)行比較,直到小于最長線段,求出N的值。然后將差值N等分,加上一個的坐標(biāo),轉(zhuǎn)化為弦長,Arduino依次執(zhí)行動作輸出。最后再返回串口通信。坐標(biāo)機(jī)器位移的坐標(biāo)轉(zhuǎn)化流程圖如圖4所示:

2.3 位圖像素處理設(shè)計

在繪圖機(jī)器人系統(tǒng)中,像素相關(guān)控制決定了繪圖的美觀以及繪制的速度,所以像素的相關(guān)控制可以說是至關(guān)重要的。像素控制里包括點單元的密度以及繪圖風(fēng)格等等。在程序設(shè)計中‘0代表黑色像素,‘255代表白色像素。機(jī)器實現(xiàn)這個灰度值是通過對某像素塊內(nèi)進(jìn)行填充相同粗細(xì)的筆的墨水。當(dāng)需要繪制的草圖為深色或者更深顏色時,在這個像素塊內(nèi)填充的墨水就越多,反之淺色直至無色則使用越來越少的墨水。

該繪圖機(jī)器人主要有兩種位圖的繪圖風(fēng)格,一是方波繪圖像素風(fēng)格,二是隨機(jī)繪圖像素風(fēng)格。這個繪圖風(fēng)格主要是受上面所敘的像素密度以及大小的影響。比如繪制方波風(fēng)格,在繪制中以像素的密度以及尺寸來決定這個像素的大小和墨水的多少。例如顏色以無色或者白色到灰色再到黑色,那么使用方波風(fēng)格繪畫出方波就從‘0頻率(即一條直線)到某像素塊能容納的最大墨水,深像素則體現(xiàn)是在線條的多與少。像素相關(guān)控制設(shè)計流程圖如圖5所示。

2.4 矢量作圖流程設(shè)計

矢量作圖的本質(zhì)就是坐標(biāo)的變換以及坐標(biāo)的映射與坐標(biāo)系統(tǒng)及坐標(biāo)映射的設(shè)計流程是一致,但是矢量作圖需要提筆與放筆的控制。提筆與放筆是通過舵機(jī)來實現(xiàn)的。在控制軟件上輸入SVG圖片,解析并轉(zhuǎn)換為直線段(曲線細(xì)分為短線段)。上位機(jī)軟件發(fā)送坐標(biāo)給Arduino主控器,通過三角函數(shù)轉(zhuǎn)換為左右弦的目標(biāo)長度,步進(jìn)電機(jī)等分運動,最終到達(dá)指令所給的弦長。舵機(jī)控制流程如圖6所示:

3 繪圖機(jī)器人功能測試

3.1 步進(jìn)電機(jī)位置測試

步進(jìn)電機(jī)放置的位置和畫板的大小決定了畫筆的能處的最遠(yuǎn)的運動位置,這是影響到畫紙的最大面積的因素,也是機(jī)器能正常控制的最大范圍。本文選用600mm * 450mm的畫板進(jìn)行測試,步進(jìn)電機(jī)分別放置在畫板上的兩端如圖7所示。理論上來說,機(jī)器能控制的最大面積應(yīng)該為虛線內(nèi)的面積,但是在測試的過程中發(fā)現(xiàn)畫板的每邊都應(yīng)該大于最大畫紙區(qū)域的140mm左右,這樣才不會使得同步帶嚙合錯位或者偏移。經(jīng)過計算若使用600mm * 450mm的畫板最大畫紙區(qū)域長寬為335mm *170mm左右。但是實際上長無法到335mm,最多250mm,當(dāng)畫筆距離電機(jī)比較遠(yuǎn),同步帶與同步輪之間的契合變差,非常容易受到外界的干擾,易發(fā)生嚙合錯位或者偏移等現(xiàn)象。

步進(jìn)電機(jī)的位置以及最大畫紙區(qū)域大致確定后,需要對筆在運動過程中的穩(wěn)定性進(jìn)行測試。當(dāng)對筆的多個位置進(jìn)行受力分析,如圖8所示。測試中發(fā)現(xiàn)當(dāng)左右兩邊的皮帶與水平方向的夾角(a與b)小于90度也就是大致處在畫板中間區(qū)域畫的穩(wěn)定最好,受力比較均勻。而在邊緣的地方畫筆受到水平方向額外的力,導(dǎo)致可能向畫板中間區(qū)域方向偏移。故在繪圖的過程中,應(yīng)該盡量使得畫筆處在畫板中間的區(qū)域,才不會出現(xiàn)畫筆移動或者搖晃。但是這樣最大畫紙的區(qū)域就受到了限制,所以想要增加畫紙區(qū)域要么改變畫板的大小,要么增加兩個步進(jìn)電機(jī)之間的距離。

3.2 像素密度的測試

像素塊由多少波紋組成取決于筆尖的粗細(xì)寬度。假設(shè)像素塊的大小是30平方毫米,筆尖直徑選用的是1毫米的,那么這個像素塊最多只能填充30條線。再往像素塊內(nèi)添加任意條數(shù)的線,都無法改變其顏色,因為已經(jīng)達(dá)到了最大的深度。假設(shè)使用筆尖直徑為0.6mm,那么顏色最大的深度就不止30條線,而是需要50條線。當(dāng)在控制軟件中設(shè)置筆尖的大小,機(jī)器會根據(jù)設(shè)置的值,盡可能以最大密度進(jìn)去作畫。機(jī)器像素的測試如圖9所示:

3.3 筆尖直徑的測試

基于Arduino繪圖機(jī)器人可以使用普通中性水筆作為畫筆,筆的直徑對繪制出的效果有一定的影響,所以在繪制草圖過程中需要獲得筆尖的直徑。一種方法是通過水筆出廠的銘牌信息來進(jìn)行確定,另一種方法是通過控制軟件來測試筆尖寬度。在圖紙上用最大的密度畫出一連串像素,但是相鄰的像素會設(shè)置一定的增量,所以當(dāng)筆尖的厚度達(dá)到想要的密度時,這就是合適的筆尖直徑。在控制軟件中,有三個相關(guān)設(shè)置參數(shù)用來控制測試的大?。?/p>

Pen test start tip—這是初始部分的筆尖大小,應(yīng)該盡量小些。

Pen test end tip—這是機(jī)器會嘗試的最大筆尖寬度。

Pen test Inc tip—這是機(jī)器從開始部分到結(jié)束部分之間筆尖寬度的增量。

如果開始部分筆尖大小被設(shè)置成0.6,結(jié)尾部分是2.0,增量是0.1,那么機(jī)器會畫出第一個像素就好像它有一個0.6mm筆尖大小的筆,之后畫得更寬,每次增長0.1mm,一直增加到2mm。根據(jù)繪制出來的草圖確定所需的筆直徑。

3.4 繪圖機(jī)器人參數(shù)設(shè)置

當(dāng)繪圖機(jī)器人的畫板選定就已經(jīng)確定了機(jī)器人的一些硬件參數(shù),比如長、寬、繪圖原點等等。在控制軟件修改這些參數(shù),使得控制軟件所呈現(xiàn)出的大小與、實際上的大小一致。通過控制軟件與機(jī)器進(jìn)行通信將設(shè)定好的參數(shù)上傳到機(jī)器的EEPROM內(nèi)。將參數(shù)上傳到機(jī)器是非常重要的,否則將會出現(xiàn)定位錯誤。而且上傳后在斷電的情況下參數(shù)也可以保存,以免每次使用都對參數(shù)進(jìn)行設(shè)定。但若是修改參數(shù)則需要重新上傳數(shù)據(jù)。

將機(jī)器人與圖片轉(zhuǎn)換設(shè)定相同路徑,讓機(jī)器人知道畫筆當(dāng)前位置。這樣通過修改控制軟件以及將軟件參數(shù)上傳到機(jī)器,使得兩者同步。在每次畫圖前都需要對當(dāng)前位置進(jìn)行校準(zhǔn),其中包括機(jī)器人畫筆的位置。需要人為地將畫筆裝置調(diào)整到在畫板上測得的畫圖原點。編寫零點代碼時,零點的設(shè)置是可變的,隨著機(jī)器的大小而進(jìn)行改變。

3.5 不同繪圖方式的比較

基于Arduino繪圖機(jī)器人的繪圖方式有四種,繪制變頻方形波紋位圖、變幅方形波紋位圖、隨機(jī)波紋的位圖以及SVG矢量圖。在選擇不同方式的繪圖,其美觀程度、墨水消耗以及時間上也是有區(qū)別的。在圖片格式大小上,圖片越大越耗時就越多。若繪制相同A3紙大小的圖,不同繪圖方式的具體比較信息見表1。

4 結(jié)束語

基于Arduino的繪圖機(jī)器人以Arduino控制器為核心,通過串口與上位機(jī)軟件processing相結(jié)合,實現(xiàn)了位圖、矢量圖的繪制。坐標(biāo)系統(tǒng)、坐標(biāo)的映射以及像素的相關(guān)控制是整個繪圖機(jī)器人設(shè)計的核心。該繪圖機(jī)器人繪圖尺寸能夠根據(jù)需求進(jìn)行調(diào)節(jié),硬件設(shè)備安裝簡便,擁有四種不同繪圖方式:變頻方形波紋的位圖、變幅方形波紋的位圖、隨機(jī)波紋的位圖以及矢量圖。在四種方式中繪圖使用的圖片格式,位圖對格式的要求不高,普通圖片格式即可,但矢量圖對圖片格式要求較高,格式上可能需要一定的轉(zhuǎn)化。在相似度上,矢量圖與原圖相識度幾乎一致,而位圖需要在一定的距離觀看,才能達(dá)到相似的效果。位圖的繪制雖說與原圖無法相比較,但是作為服裝設(shè)計或者視覺設(shè)計上的草圖繪制已經(jīng)能夠達(dá)到要求。同時該繪圖機(jī)器人在繪制矢量圖中,特別是在教學(xué)實踐中繪制各類矢量格式原理圖速度快、繪制精度高,能夠替代人工繪圖,有著很好的應(yīng)用前景。也能將該款機(jī)器人應(yīng)用與各類商業(yè)廣告平臺,實時繪制廣告標(biāo)語和商標(biāo)圖案。

參考文獻(xiàn):

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

[2] Arduino中文社區(qū). 概述Arduino 電機(jī)驅(qū)動擴(kuò)展板L293D馬達(dá)板 motor control shield[EB/OL]. (2013-10-13).

[3] blankas. 步進(jìn)電機(jī)[EB/OL]. (2015-07-20). http://baike.baidu.com/link?url=AtUkp1x-vsKkWhiE4ZGppIpjAkRN21peBNMesRQiFlQDynSFfDg3uln6qTY_XQzD2XCvMq09uNdYvv7D6U5bFK.

[4] 于海生. 計算機(jī)控制技術(shù)[M]. 北京: 機(jī)械工業(yè)出版社, 2011: 55-76.

[5] 陳呂洲. ARDUINO程序設(shè)計基礎(chǔ)[M]. 北京: 航空航天大學(xué)出版社, 2014: 24-171.

[6] John BOXALL. 動手玩轉(zhuǎn)Arduino[M]. 翁愷,譯. 北京: 人民郵電出版社, 2014: 264-298.

猜你喜歡
矢量圖筆尖畫板
Analysis of the line current differential protection considering inverter-interfaced generation station and countermeasures
尋找筆尖上的少年
讓真情在筆尖流露
深情筆尖下的西部驚嘆曲
筆尖上的“京味兒”
鄰域平均法對矢量圖平滑處理
一道高考題的解析及應(yīng)用推廣
郧西县| 张家界市| 青浦区| 阿克陶县| 耿马| 石渠县| 大方县| 南川市| 新龙县| 井陉县| 新兴县| 临朐县| 砚山县| 吉安市| 金堂县| 大安市| 安义县| 建水县| 札达县| 绩溪县| 鱼台县| 阳西县| 固始县| 海林市| 廉江市| 隆回县| 莲花县| 江孜县| 丹棱县| 桂林市| 勃利县| 两当县| 八宿县| 遂昌县| 二手房| 简阳市| 古交市| 吉安县| 百色市| 博白县| 渭源县|