劉冰鑫 李一夫 李嘉睿 毛宇蓬 彭開祥



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