劉冰鑫 李一夫 李嘉睿 毛宇蓬 彭開祥
摘要:本文基于Arduino單片機(jī)作為核心處理單元,將PC與寫字繪圖機(jī)相對(duì)接,使用者通過上位機(jī)軟件,輸出指令信息,通過USB將信息傳輸至寫字繪圖機(jī),通過Arduino平臺(tái)進(jìn)行數(shù)據(jù)處理,處理后的信息控制步進(jìn)電機(jī),帶動(dòng)墨水筆完成書寫和繪制。
Abstract: The design is based on the Arduino MCU as the core processing unit. The PC is connected to the writing plotter. The user outputs the command information through the host computer software, and transmits the information to the writing plotter via USB. The data is processed through the Arduino platform. The information controls the stepper motor and drives the ink pen to complete writing and drawing.
關(guān)鍵詞:Arduino控制器;坐標(biāo);手寫繪圖
Key words: Arduino controller;coordinates;handwritten drawing
中圖分類號(hào):TP311? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號(hào):1006-4311(2020)02-0157-04
0? 引言
古時(shí)有活體印刷術(shù),現(xiàn)在有打印機(jī),這些能夠印刷字體。而伴隨著科技的進(jìn)步、社會(huì)的發(fā)展,在日常生活和生產(chǎn)中有越來越多的地方將人工換成了機(jī)器。在這個(gè)追求個(gè)性與效率的當(dāng)下,打印機(jī)并不能適應(yīng)全部的情況。所以說一種新型的、便利的、能夠兼并手寫抄字及繪圖的機(jī)器顯得尤為的重要。
我們注意到了Arduino快捷全面且靈活的特性,最主要是包括硬件和軟件部分。因此在Arduino平臺(tái)上設(shè)計(jì)寫字繪圖機(jī)具有很好的教育意義,而且將復(fù)雜的開發(fā)變得簡單易行,使得受過基本軟硬件設(shè)計(jì)的大學(xué)生也可以在這個(gè)平臺(tái)上進(jìn)行專業(yè)的設(shè)計(jì)。
在Arduino開平臺(tái),配合機(jī)械和軟件設(shè)計(jì),開發(fā)出一款可以用戶根據(jù)通過自己的筆劃書寫特點(diǎn),定制自己的字體,實(shí)現(xiàn)個(gè)性化的手寫和繪圖機(jī)器。
1? 繪圖機(jī)硬件實(shí)現(xiàn)
1.1 Arduino控制器
Arduinounor3不僅能夠自己對(duì)電路的源代碼進(jìn)行開發(fā),還可以下載免費(fèi)的例程來進(jìn)行學(xué)習(xí)和參考。并且還有對(duì)應(yīng)的Arduino控制器的驅(qū)動(dòng)板,不單是節(jié)省了在電路上的時(shí)間,也變得更加安全、可靠。
1.2 步進(jìn)電機(jī)驅(qū)動(dòng)
L293D驅(qū)動(dòng)板的設(shè)計(jì)是為了提供每個(gè)電機(jī)高達(dá)600mA,峰值1.2A的電流。在1安電流長時(shí)間通過的情況下,需要加上散熱模塊,要不然會(huì)將芯片燒掉。L293D驅(qū)動(dòng)板與Arduino開發(fā)板能夠很好的兼容。所以會(huì)有很多已經(jīng)開發(fā)好的庫文件用作參考或者是直接調(diào)用,這大大的減少了編寫程序的工作量。L293D驅(qū)動(dòng)板可以直接控制兩個(gè)步進(jìn)電機(jī)的運(yùn)行。
1.3 步進(jìn)電機(jī)
根據(jù)設(shè)計(jì)分析和硬件要求,選擇步距角為0.9度的兩相四線雙極步進(jìn)電機(jī)。步進(jìn)電機(jī)的靜態(tài)轉(zhuǎn)矩主要由電機(jī)運(yùn)行時(shí)的負(fù)載決定,但負(fù)載又分成慣性負(fù)載和摩擦負(fù)載兩種[3]。通常,靜力矩應(yīng)該是摩擦載荷的兩到三倍。當(dāng)確定靜力矩時(shí),電機(jī)外形和長度便能確定下來[4]。電動(dòng)機(jī)的自鎖轉(zhuǎn)矩與流過電動(dòng)機(jī)的電流有關(guān)。
2? 繪圖機(jī)軟件設(shè)計(jì)
系統(tǒng)控制軟件程序功能具有usb與上位機(jī)實(shí)時(shí)通信[5],它負(fù)責(zé)控制機(jī)器的x軸和y軸、步進(jìn)電機(jī)的移度和加速度,并從Arduino控制器中返回一些必要參數(shù)。一共有兩種繪制方法,一種是位圖繪制,另一種是矢量繪制。繪制位圖的風(fēng)格選擇是利用程序和坐標(biāo)變換實(shí)現(xiàn)方波和草圖。矢量圖的繪制主要采用SVG圖形轉(zhuǎn)換成直線,通過串口將線段坐標(biāo)發(fā)送給處理器,最后控制電機(jī)的繪制。
主程序控制流程如圖1。
2.1 坐標(biāo)系統(tǒng)及坐標(biāo)映射的設(shè)計(jì)
坐標(biāo)系和坐標(biāo)映射作為這個(gè)設(shè)計(jì)的主要部分,關(guān)系到寫字或是繪圖的起點(diǎn)。將原點(diǎn)設(shè)為左上角的步進(jìn)電機(jī)旋轉(zhuǎn)軸,并將橫縱兩個(gè)方向下定為增加方向。坐標(biāo)映射是通過與控制軟件通信獲得的坐標(biāo),它將坐標(biāo)映射到兩弦的長度。上位機(jī)軟件將所需要繪制的圖像或是抄寫文字轉(zhuǎn)換成信息單元點(diǎn)元素,包括坐標(biāo)、大小和灰度值。該功能的原理是分別利用串口通信得到前后兩個(gè)坐標(biāo)。將最大差值除以n,與當(dāng)前最大線長比較,直到其小于最長線段以找到n的值。然后將差值n加上一個(gè)的坐標(biāo),轉(zhuǎn)換成弦長,處理器執(zhí)行一次輸出。最后,返回到串行端口通信。
2.2 位圖像素處理設(shè)計(jì)
像素方面的調(diào)節(jié)是決定圖像清晰度和美觀度的關(guān)鍵,并且對(duì)雕刻速度方面也有很大影響。在圖像處理中,像素是從0到255的,其中0表示該像素為黑色,255表示該像素為白色。在這里可以理解成0個(gè)燈泡亮?xí)r黑色,255個(gè)燈泡亮是白色。該機(jī)器通過用相同厚度的墨水填充某個(gè)像素塊來實(shí)現(xiàn)灰度值。如果選用的圖片相對(duì)較暗,每個(gè)像素塊需要的油墨量就會(huì)變多,相反的,當(dāng)部分色塊過淺甚至幾乎看不見,對(duì)油墨量的要求就會(huì)下降。
2.3 矢量作圖流程設(shè)計(jì)
矢量繪圖的本質(zhì)是坐標(biāo)變換和坐標(biāo)映射。通過舵機(jī)來實(shí)現(xiàn)將圖像輸入控制軟件,解析并轉(zhuǎn)換成直線段來控制舵機(jī)進(jìn)行提筆和落筆。上位機(jī)軟件將獲得的信息轉(zhuǎn)換成坐標(biāo)發(fā)送到主控制器。最終通過主控制器將目標(biāo)長度,電機(jī)運(yùn)動(dòng)利用三角函數(shù)轉(zhuǎn)化出來,并到達(dá)給定長度。
在這里我們用了GRBL源代碼。GRBL的核心是帶有梯形加減速過程的DDA直線插補(bǔ)算法的實(shí)現(xiàn),整個(gè)GRBL源代碼中包含了以下內(nèi)容[6]:
①串口中斷接收上位機(jī)的指令,包括自定義的系統(tǒng)命令和G代碼指令;
②串口指令解析,自定義的系統(tǒng)命令直接執(zhí)行,G代碼指令調(diào)用相關(guān)操作,這里只關(guān)注直線段、圓弧指令的解析;
③圓弧拆分成直線段進(jìn)行插補(bǔ)的方法;
④多條直線段之間轉(zhuǎn)角速度優(yōu)化的前瞻速度控制的方法;
⑤單條線段梯形加減速過程換算成定時(shí)器定時(shí)不同時(shí)間長短來輸出脈沖的方法;
⑥限位條件的判斷及軸自動(dòng)歸位的方法;
⑦其它spindle、coolant接口等。
3? 手寫抄字及繪圖機(jī)功能測試
這個(gè)設(shè)計(jì)主要?jiǎng)?chuàng)新點(diǎn)在于繪圖并且可加入自行設(shè)計(jì)或手寫字體的雕刻功能。
①打開安裝的fountcreator,在文件選項(xiàng)中選擇“打開已安裝字體”(這里選擇楷體)。(圖2、圖3)
②打開網(wǎng)頁http://tool.oschina.net/encode?type=2,查詢unicode碼,查到“北京信息科技大學(xué)”的Unicode碼為:北京信息科技大学
③再打開的文字庫中查找漢字位置,這里使用快捷鍵Ctrl+F。進(jìn)入文字編輯,將寫好的字的圖片導(dǎo)入。
④用手機(jī)拍攝寫好的字體。
⑤調(diào)整閾值,將想要的文字顯示清楚,然后將圖片導(dǎo)入文字編輯窗口,刪掉多余部分。(圖6、圖7)
⑥將手寫的文字放到原文字的位置,然后將原文字刪掉。
⑦用同樣的方法將其他幾個(gè)字改為手寫體。
⑧保存該項(xiàng)工程。
⑨打開菜單的“文體”選項(xiàng)中屬性對(duì)話框,修改字體族的名稱。
⑩將自定義中的所有附加命名段都刪除,添加新的自定義命名字段。
{11}導(dǎo)出字體,安裝。實(shí)際打印效果如圖11所示。
圖片雕刻直接由上位軟件微雕管家直接導(dǎo)入的道路圖,效果如圖12所示。
參考文獻(xiàn):
[1]Arduino中文社區(qū).概述Arduino電機(jī)驅(qū)動(dòng)擴(kuò)展板L293D馬達(dá)板 motor control shield[ER/0L].(2013-10-13).
[2]blankas.步進(jìn)電機(jī)[EB/OL].(2015-07-20) http//baike.baidu.com/link?url=AtUkpIx-vsKkWhiE4ZGppIpjAKRN21peBNMesRQIFI
QDynSFfDg3uln6qTY_XQzD2XCvMq09uNdYvv7D6U5bFK.
[3]于海生.計(jì)算機(jī)控制技術(shù)[M].北京:機(jī)械工業(yè)出版社,2011:55-76.
[4]陳呂州.RRDUINO程序設(shè)計(jì)基礎(chǔ)[M].北京:航空航天大學(xué)出版社,2014:24-171.
[5]CSDN.GR BL源代碼分析[EB/OL].(2018-03-27).https://blog.csdn.net/xufeixueren/article/details/79663068.