3.2 舵機內部結構
舵機的組成部分主要有齒輪組、電機、電位器、電機控製板、殼體這幾大部分。其中電機控製板主要是用來驅動電機和接受電位器反饋回來的信息;電機提供動力;電位器判斷輸出軸角度是否輸出正確;齒輪組的作用主要是力量的放大。
3.3 舵機控製協議
舵機的伺服係統由可變寬度的脈衝來進行控製,控製線是用來傳送脈衝的。脈衝的參數有最小值,最大值和頻率。一般而言,舵機的基準信號都是周期為20 ms,寬度為1.5ms。這個基準信號定義的位置為中間位置。舵機有最大轉動角度,中間位置的定義就是從這個位置到最大角度與最小角度的量完全一樣。此外不同舵機的最大轉動角度可能不相同,但是其中間位置的脈衝寬度是一定的,就是1.5 ms。
角度是由來自控製線的持續的脈衝所產生,脈衝的長短決定舵機轉動多大角度。例如1.5 ms脈衝會到轉動到中間位置(對於180°舵機來說, 就是90°位置)。當控製係統發出指令,讓舵機移動到某一位置,並讓其保持這個角度,這時外力(不超過最大扭力)的影響不會讓其角度產生變化。除非控製係統不停的發出脈衝穩定舵機的角度,舵機的角度不會一直不變。當舵機接收到一個小於1.5 ms的脈衝,輸出軸會以中間位置為標準,逆時針旋轉一定角度。接收到的脈衝大於1.5 ms情況相反。一般而言,最小脈衝為1 ms,最大脈衝為2 ms。
Arduino IDE己經集成了舵機控製庫,隻需要在程序開頭調用庫Servo.h就可以了,省去了繁瑣的信號控製、時序等問題,給舵機配置好端口和初始位置,然後給出目標角度,舵機就會轉過去了。
3.4 舵機控製程序示例
Arduino有舵機應用庫
,把180°舵機接在第6接口,舵機控製程序如下: #include //舵機的函數庫 Servo myservo; //定義舵機變量 int pos = 80; //舵機初始化80° void setup() { myservo.attach(6); //初始化使用第6個引腳 myservo.write(pos); //先讓舵機回歸80°中心點 } void loop() { myservo.write(pos); //下角度指令給舵機 for(;pos { myservo.write(pos); //下角度指令給舵機,170° delay(10); //等待10 ms } for( ;pos { myservo. write(pos); //下角度指令給舵機,80° delay(10); //等待10 ms } } 實現的功能為:舵機初始位置為80°,舵機旋轉到180°,再旋轉到80°。 3.5 Arduino機器人實際效果 通過多次實驗成功實現了Arduino機器人在RCJ中的進攻、防守等功能,Arduino機器人能按照預先設計的程序在脫離人工控製的情況下自主運作,其前進、後退、停止射門等動作配合成功,並能順利捕捉紅外足球,達到了預期目標。 但在比賽中還出現Arduino機器人的避障流暢度不足,即不能在探測到障礙物存在時實時做出流暢的避障行為。此外,驅動卡的電源非單獨供電,影響機器人運動時的穩定性和快捷性,從而導致有可能無法順利完成比賽。Arduino機器人實物。 4 結 語 Arduino的開源性及功能可擴展性決定了它在機器人教育領域內的高性價比,圖形化編程插件符合中小學階段學生的認知習慣及水平,豐富的Arduino論壇資源為教育過程提供了持久的技術和創意保障。該文提出的基於Arduino的車輪式機器人設計相對於其他係統,成本更低,製作方便,軟件和硬件開源並可擴展,有一定的實用性並在RCJ上取得了一定的成績。但該機器人還存在許多不足,這些都有待進一步改進和提高。 參考文獻 [1]RCJ中國組委會.RoboCup青少年(RCJ)機器人世界杯中國組委會介紹[EB/OL]. [2]Massimo Banzi.愛上Arduino[M].2版.於欣龍,郭浩贇,譯.北京:人民郵電出版社,2012. [3]維基百科.Arduino[EB/OL]. [4]周嘉.基於Arduino平台的機器人製作課程在普通高中開發與實施[J].教育信息技術,2012(8):15-17. [5]程晨.Arduino開發實戰指南[M].北京:機械工業出版社,2012. [6]王娟,胡來林.中小學Arduino機器人特性及其實例開發[J].中國教育信息化,2013(6):69-71. [7]宜昌城老張.新車間Arduino圖形化編程軟件ArduBlock的介紹[EB/OL].