王昆 李昊天 時一順 張碩 宋艷芳
摘要:本文基于嵌入式系統(tǒng)技術(shù)設(shè)計開發(fā)了一款智能寫字機(jī)器人??梢杂糜谔娲祟愅瓿蓵鴮懭蝿?wù),以及應(yīng)用于基礎(chǔ)教育領(lǐng)域。
關(guān)鍵詞:Arduino、輔助教育、寫字機(jī)器人
1.總體技術(shù)框架
整體系統(tǒng)由電腦端、手機(jī)移動端、Arduino UNO控制器、電機(jī)驅(qū)動設(shè)備、舵機(jī)和電機(jī)6部分組成。電腦端和手機(jī)移動端是上位機(jī)控制器、下位機(jī)控制器由Arduino UNO系統(tǒng)構(gòu)成、電機(jī)和舵機(jī)是下位機(jī)的執(zhí)行器。上位機(jī)電腦端將想讓機(jī)器人寫的內(nèi)容經(jīng)過奎享軟件轉(zhuǎn)換成文件后綴為.nc或.gcode的文件。然后電腦端通過串口將文件發(fā)給下位機(jī)使智能書寫機(jī)器人執(zhí)行文件中的坐標(biāo)信息。由下位機(jī)控制器控制電機(jī)和舵機(jī)的程序控制機(jī)器人完成寫字的動作。
電機(jī)和同步帶組合是機(jī)器人的執(zhí)行器。當(dāng)電機(jī)收到控制器發(fā)來的脈沖時,就能讓寫字臂前進(jìn)或后退。步進(jìn)電機(jī)通過施加足夠功率和頻率的電脈沖依次控制繞組進(jìn)行操作??刂泼}沖信號和電平方向是由脈沖分配器來負(fù)責(zé)接收,各相狀態(tài)控制繞組會依次給電機(jī)信號,電機(jī)根據(jù)信號做出反應(yīng)。電機(jī)轉(zhuǎn)動的速度和舵機(jī)升降都是由控制脈沖控制。
2.寫字機(jī)器人算法
2.1像素掃描算法
上位機(jī)PC端將想要寫的圖片內(nèi)容經(jīng)過可以轉(zhuǎn)換的圖片處理軟件轉(zhuǎn)換成坐標(biāo)文件。之后的操作就轉(zhuǎn)到上位機(jī)寫字軟件或者上位機(jī)手機(jī)APP使用最后生成的文件發(fā)送給下位機(jī)控制器,控制器經(jīng)過內(nèi)部程序的轉(zhuǎn)換后輸出脈沖控制電機(jī)和舵機(jī)。
2.2直線插補(bǔ)算法
字體的基礎(chǔ)是由直線構(gòu)成,寫字機(jī)械臂末端無法像真正人類的手臂一樣地沿著一條直線運(yùn)動,所以當(dāng)折線足夠多的時候就能夠?qū)⑵浣频恼J(rèn)為是直線。插補(bǔ)就是在起點(diǎn)到終點(diǎn)兩點(diǎn)路徑間算出多個坐標(biāo)點(diǎn),這些坐標(biāo)點(diǎn)的精度會對控制速度直接產(chǎn)生影響。這一種方法會把當(dāng)前的坐標(biāo)點(diǎn)的形狀跟指定的圖形軌跡進(jìn)行對比,然后對兩者的輪廓進(jìn)行偏差判斷,才會對下一步進(jìn)行選擇。
2.3圓弧形插補(bǔ)算法
文字中撇和捺的曲線也是寫字的一個難點(diǎn),這邊使用了圓弧插補(bǔ)算法來解決這個問題。寫一個圓弧,把寫字點(diǎn)到圓心的距離相對于圓的半徑的差值計算出來。假設(shè)圓弧的位置是在X軸和Y軸正半軸的區(qū)域,那么E點(diǎn)作為圓弧的起點(diǎn),A點(diǎn)作為終點(diǎn)。利用偏差判別式,即獲得近似圓弧。
3.寫字機(jī)器人硬件
3.1寫字機(jī)器人結(jié)構(gòu)
整體的框架用的是一種經(jīng)典結(jié)構(gòu) CoreXY 結(jié)構(gòu)。采用光軸作為寫字機(jī)器人的運(yùn)動軸與框架。用solidworks繪制3D模型作為外殼與連接框架。
CoreXY 它的原理是通過兩個電機(jī)同時控制 XY 的移動,A 順時針 B 逆時針,向+Y 軸運(yùn)動;A 逆時針 B 順時針,向- Y 軸運(yùn)動;A 順時針 B 順時針,向+X 軸運(yùn)動;A 逆時針 B 逆時針,向- X 軸運(yùn)動。
Arduino UNO 系統(tǒng)作為下位機(jī)的核心控制器,借助串口或者藍(lán)牙接收轉(zhuǎn)換成坐標(biāo)形式的 G 代碼文件,再通過內(nèi)部寫字算法程序轉(zhuǎn)換,輸出控制脈沖和方向電平控制步進(jìn)電機(jī)運(yùn)作和舵機(jī)的抬筆和落筆。
Arduino UNO 開發(fā)板基于 ATmega328P 控制器, 晶體振蕩器頻率達(dá)到 16MHz,內(nèi)部含有 14 個數(shù)字 I/O 引腳(其中含 6 路 PWM 輸出)、6 個模擬輸入引腳、一個 USB 接口、一個 DC 接口、一個 ICSP 接口和一個復(fù)位按鈕。
3.2A4988 電機(jī)驅(qū)動模塊
該設(shè)計的電機(jī)驅(qū)動模塊通過與 Arduino UNO進(jìn)行連接,接受Arduino UNO 發(fā)出來的控制脈沖和方向電平來驅(qū)動電機(jī)和舵機(jī)的轉(zhuǎn)動以實(shí)現(xiàn)字的書寫。
電機(jī)驅(qū)動模塊需要單獨(dú)提供電源來進(jìn)行供電,與 Arduino UNO 所需要的電源區(qū)分開, 這樣做的目的是為了保障 Arduino UNO 能夠穩(wěn)定工作,電機(jī)和舵機(jī)也能夠有足夠的動力輸出。
A4988內(nèi)部存在一個編譯器。這個編譯器的功能就是充當(dāng)單片機(jī)與驅(qū)動之間的橋梁,進(jìn)行信號傳輸。同時編譯器還可以生成DA信號。
3.3步進(jìn)電機(jī)
將電脈沖信號傳輸給步進(jìn)電機(jī),步進(jìn)電機(jī)通過其內(nèi)部的繞子,將其轉(zhuǎn)化角位移或者線位移,步進(jìn)電機(jī)有不同的型號,比如三線、四線、五線式。根據(jù)對本次設(shè)計所需要帶動負(fù)載的重量結(jié)合不同步進(jìn)電機(jī)的參數(shù),選擇了型號為 42HB34A 的步進(jìn)電機(jī)。
3.4舵機(jī)模塊
舵機(jī)的作用是抬筆和落筆,不然字跡連在一起就無法達(dá)到寫字的效果。舵機(jī)是一種特殊的電機(jī)。當(dāng)存在角度命令時,會根據(jù)命令轉(zhuǎn)到命令給的角度。當(dāng)下的大多數(shù)機(jī)器人關(guān)節(jié)都由舵機(jī)構(gòu)成。例如,一些大型機(jī)器人可用于手臂、膝蓋等。這種類型的電動機(jī)可以通過簡單的操作旋轉(zhuǎn),并且機(jī)器人的控制相對容易。
通過PWM脈寬調(diào)制信號就可以控制電機(jī)打角。不同的PWM,對應(yīng)不同的角度。同時可以看出,通過控制具體給舵機(jī)通電了多長時間,然后根據(jù)反饋回來的信號結(jié)合上角度傳感器,來對舵機(jī)進(jìn)行精確角度轉(zhuǎn)動的控制。
3.5藍(lán)牙模塊
系統(tǒng)采用的藍(lán)牙模塊為 HC-06,HC-06 藍(lán)牙模塊是專門為智能無線數(shù)據(jù)傳輸而打造, 采用英國 CSR 公司芯片,遵循 V2.0 藍(lán)牙規(guī)范,通信范圍為 10 米,共四個引腳,VCC、GND、TXD 和 RXD,可以方便地連接到 Arduino UNO 的串口,被廣泛地用在了具備藍(lán)牙通訊功能的設(shè)備上。
4.結(jié)論
本文通過對寫字機(jī)器人的機(jī)械結(jié)構(gòu)、算法設(shè)計、硬件結(jié)構(gòu)。寫字機(jī)器人能完整且穩(wěn)定地寫出想寫的內(nèi)容,在電腦上通過串口將文件發(fā)給下位機(jī)或者手機(jī)APP,再通過藍(lán)牙將文件發(fā)給下位機(jī),下位機(jī)的 Arduino UNO通過內(nèi)部的程序?qū)l(fā)送過來的文件完成翻譯并發(fā)送到A4988 電機(jī)驅(qū)動模塊來驅(qū)動電機(jī)和舵機(jī)完成內(nèi)容的書寫。具有良好的應(yīng)用價值與市場前景。
參考文獻(xiàn):
1.黃傳翔 基于 Arduino 單片機(jī)的智能機(jī)器人小車的研究[D] 江蘇安全技術(shù)職業(yè)學(xué)院.2021
2.林建勇 基于Arduino的智能爬臂機(jī)器人系統(tǒng)設(shè)計探析[A] 山東理工大學(xué).2021.
注:2021年山東協(xié)和學(xué)院實(shí)驗(yàn)室開放項(xiàng)目,項(xiàng)目名稱:智能書寫機(jī)器人,項(xiàng)目編號:2021SYKF04。
山東協(xié)和學(xué)院