蠕動式爬桿機器人控制系統(tǒng)設計
蠕動式爬桿機器人控制系統(tǒng)設計,蠕動,式爬桿,機器人,控制系統(tǒng),設計
1 1 2 2 3 3 4 4 D D C C B B A A CSTCE16M0V53-R0 16MHZ GND GND VCC3.3 100pF C1 GND T e x t 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1602 LCD P1 1602-LCD D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 A0 A1 A2 A3 A4 A5 D 1 3 A 0 A 1 A 2 A 3 1K R11 RPot VCC GND 1K R12 res VCC GND 1 2 3 4 P3 藍牙 1 2 3 4 P4 DHT11 VCC GND 10K R41 GND VCC RX1 TX1 TX2 RX2 (ADC0)PC0) 23 (ADC1)PC1 24 (ADC2)PC2 25 (ADC3)PC3 26 (ADC4)PC4 27 (ADC5)PC5 28 (AIN0)PD6 12 (AIN1)PD7 13 (ICP)PB0 14 (INT0)PD2 4 (INT1)PD3 5 (MISO)PB4 18 (MOSI)PB3 17 (OC1)PB1 15 (RXD)PD0 2 (SCK)PB5 19 (SS)PB2 16 (T0)PD4 6 (T1)PD5 11 (TXD)PD1 3 AGND 22 AREF 21 AVCC 20 GND 8 RESET 1 VCC 7 XTAL1 9 XTAL2 10 (ADC6)PC6 29 (ADC7)PC7 30 ZU1 ATMEGA328P-PU A6 A7 KG SW6 VCC12 VCC 1 GND 2 GND 3 DC DC-012A GND D1 LED-貼片-直插 10K R13 GND VCC 1 2 3 4 P2 串口 VCC GND 1 2 3 P5 舵機 1 2 3 P6 舵機 1 2 3 P7 舵機 VCC-dj GND Vin 1 OUT 2 GND 3 F B 4 O N / O F F 5 U2 lm2596s 1K R21 6nF C21 500pF C22 500pF C23 D2 10mH L21 1K R22 RPot VCC-dj VCC12 IN 1 2 OUT 3 GND U3 LM7805 VCC12 VCC GND 47pF C31 47pF C32 1 2 3 4 P8 氣壓計 VCC GND 1 2 3 P9 壓力傳感器 1 2 3 P10 壓力傳感器 VCC VCC GND GND D 1 1 D 1 2 Board Stack Report 目錄
目 錄
摘 要 III
Abstract IV
1 緒 論 1
1.1 論文的選題背景 1
1.2 爬桿機器人研究狀況及發(fā)展方向 1
2 蠕動式爬桿機器人的概述 3
2.1 蠕動式爬桿機器人的組成及其功能 3
2.2 蠕動式爬桿機器人的運動分析 5
2.2.1 蠕動式爬桿機器人的運動組成 5
2.2.2 蠕動式爬桿機器人的運動分解及示意圖 5
3 蠕動式爬桿機器人的硬件電路設計 8
3.1 硬件控制系統(tǒng)整體框圖的設計 8
3.2 控制板及各個元器件的選擇 9
3.2.1電機驅動的選擇 10
3.2.2傳感器的選擇 10
3.2.3藍牙遙控的選擇 12
3.2.4 顯示器的選擇 12
3.2.5電源模塊的選擇 14
3.2.6 開關的選擇 15
3.2.7 控制主板的選擇 9
3.3 硬件電路圖的設計 16
4 蠕動式爬桿機器人的軟件設計 18
4.1 軟件控制系統(tǒng)流程圖 18
4.2 控制程序的設計 19
4.2.1開發(fā)環(huán)境 19
4.2.2程序的設計 20
5 蠕動式爬桿機器人的前景 25
6 結 論 26
參考文獻 27
附 錄 28
致 謝 34
IV
摘要
蠕動式爬桿機器人控制系統(tǒng)設計
摘 要
工業(yè)化的發(fā)展,城市化的不斷推進,促成了管道系統(tǒng)的不斷成熟。在現(xiàn)有的移動機器人中它們都具有自己的專一性和通用性的特點。廣泛的應用于海陸空等全方位探測與運輸。針對于管道類圓柱狀的攀爬機器人的研究尚不成熟。
為了滿足現(xiàn)在的社會需求,我們準備設計一款可以在管道等桿子上攀爬的機器人。本文首先對蠕動式爬桿機器人的一種介紹,區(qū)別于現(xiàn)有移動式機器人的比較。通過對其組成的結構和運動狀態(tài)的分析,結合此機器人的優(yōu)缺點,與需要工作的要求和環(huán)境來設計這款機器人?;贏RDUINO開發(fā)板下與多種傳感器的配合以完成所需工作。通過對其控制系統(tǒng)結構框圖的設計與其軟件流程圖的設計綜合設計其硬件電路和源程序。并對蠕動式爬桿機器人的優(yōu)缺點進行分析,未來發(fā)展的方向提供可行的支持。
關鍵詞:蠕動式爬桿機器人;ARDUINO;硬件電路;源程序;未來發(fā)展
Abstract
The Control System Design of Squirmy Climbing Pole Robot
Abstract
The development of industrialization and the continuous development of urbanization have contributed to the continuous maturity of the pipeline system.In the existing mobile robots, they have their own specificity and universality.It is widely used in sea, land, air and other comprehensive exploration and transportation.It is not mature to study the climbing robot of tubular column.
To meet the current social needs, we are ready to design a robot that can climb on a pole.This paper first introduces a kind of introduction to Squirmy Climbing Pole robot, which is different from the comparison of existing mobile robot.Based on the analysis of the structure and motion state of the robot, this robot is designed with the advantages and disadvantages of the robot and the requirements and environment of the work.Based on the ARDUINO development board with various sensors to complete the required work.The hardware circuit and source program are designed by the design of the structure block diagram of the control system and the software flow chart.
The advantages and disadvantages of Squirmy Climbing Pole robot are analyzed, and provide viable support for future development.
Key words: Peristaltic Pipe Robot; ARDUINO; Hardware Circuit ;Source Program;
Future Development
第一章 緒論
1緒 論
1.1 論文的選題背景
隨著工業(yè)化發(fā)展,城市化的不斷推進,冶煉行業(yè)的成熟發(fā)展,管道也成為了這個社會各個行業(yè)不可缺少的組織構架。也推進了針對于管道攀爬的機器人的各類研究。現(xiàn)有的移動機器人一般分為以下幾種,路面越障機器人(如圖1.1),水下機器人(如圖1.2)與空中飛行機器人(如圖1.3),一般用于探測,測繪,搬運,救援等功能。都具有自己的專業(yè)性與通用性。然而針對某一特殊工作環(huán)境下都需要一定的成本[1]。
圖1.3
圖1.1
圖1.2
根據(jù)研究調查,爬桿機器人特別適用于工礦企業(yè),因為此類企業(yè)擁有成熟的管道系統(tǒng),需要機器人進行定期的巡檢。針對于爬桿巡檢機器人國內國外都有一定程度的研究,一般由分為管道內部檢測,與管道表面檢測。一般管道的周圍的環(huán)境檢測數(shù)據(jù)有高度,溫度,濕度的檢測,通過數(shù)據(jù)的分析,排查與預防管道故障。然而一般這類問題的檢測很少有作業(yè)人員,爬桿位置的偏僻,人員行動的安全都是限制因素。然而工廠事故的原因也有不少來源于管道的泄露[2]。因此本文主要研究一種針對于管道等桿狀物攀爬的爬桿機器人。
1.2 爬桿機器人狀況及研究方向
蠕動式爬桿機器人是一項特殊的移動機器人的設計思想,主要適用于細長管道的攀爬功能。根據(jù)攀爬機器人的工作環(huán)境設計的適應性的攀爬機構,以實現(xiàn)在圓柱狀桿面的攀爬。
攀爬機器人是特種機器人領域范圍內的一個關鍵研究方向,與此也成為當前機器人研究方向的重點。在過去的一些年,研究出了各種各樣的仿生機器人。比較典型的仿壁虎爬壁機器人、仿人型機器人等。這些機器人主要從外形結構和功有仿蛇機器人、能上對生物進行模仿,攀爬機器人的設計也是從一些爬樹動物的運動方式上得到啟發(fā)。它把地面上機器人移動技術與吸附技術有機結合起來,能夠在垂直壁面上夾緊運動,而且可以攜帶工具進行作業(yè)。
傳統(tǒng)的攀爬機器人的設計,主要分類行走式和吸附式的運動模式。本文將設計一款可以蠕動前進,并夾緊的設計結構。大多數(shù)的機器人適用于某一具體行業(yè),更具有其單一性,與專一性的特點。在市場上現(xiàn)在的移動式機器人工作環(huán)境的限制已經(jīng)不能滿足現(xiàn)在的日常生活工作的需求。然而本次重點更多在于其控制系統(tǒng)的設計。它適用于路燈桿,斜拉橋拉索等等圓柱狀表面的水平,溫度,濕度,氣體等人難以到達的位置的檢測,減少人工的操作。本機器人通過藍牙傳輸,能夠實時檢測位置環(huán)境的變化。來滿足環(huán)境所需的基本要求。
這里設計了一款控制系統(tǒng)。其驅動系統(tǒng),傳動系統(tǒng),行走機構,檢測系統(tǒng),機身的設計,通過無線數(shù)據(jù)傳輸系統(tǒng),使用遙控終端的操作來達到目的。
參考相關的系統(tǒng)設計,來完成蠕動式爬桿機器人的控制系統(tǒng)設計。本質思想與操作實際為通過數(shù)字信號的輸入,控制伺服電機的旋轉,完成需要的工作狀態(tài),實現(xiàn)整體的運動合成,達到運動的需求。簡單的運動,但需要采集一些數(shù)據(jù),存儲在數(shù)據(jù)庫。
本次設計的機器人,可以簡單快捷方便的進行一下周圍環(huán)境的檢測,為常見故障進行常規(guī)的排查。蠕動式爬桿機器人的設計主要分為機械結構的設計與控制系統(tǒng)的設計。此文是對蠕動式爬桿機器人的控制系統(tǒng)設計進行研究?;贏RDUINO開發(fā)板(如圖1.4)和功能要求下進行蠕動式爬桿機器人的硬件電路設計與軟件源程序的設計。
圖1.4
根據(jù)蠕動式爬桿機器人的運動要求,我們選取常見的豎直桿狀物進行研究。機器人在爬桿上有上升下降,前進后退,停止的動作。都是通過伺服電機之間的配合來進行驅動,完成所需要完成的動作。機器人硬件的控制系統(tǒng)又分為主控制器的模塊,電機驅動模塊,信號反饋模塊,通信模塊,電源模塊等組成。由于選取ARDUINO,所以自帶一些模塊,有些模塊需要額外的添加。
34
第二章 蠕動式爬桿機器人的概述
2 蠕動式爬桿機器人的概述
2.1 蠕動式爬桿機器人的組成及其功能
(1)行走與導向結構
主要由一組機構,來完成機器人前后伸縮動作。通過兩個柱狀的定位桿進行方向的定位,使其在固定的導軌上運動,配合連桿裝置,逐步完善機器人前后行進動作的規(guī)范性,標準性。再配合兩個夾爪的張合實現(xiàn)對爬桿的夾緊動作。通過兩組的動作的疊加,使我們機器人可以滿足初步的動作需求。(圖2.1)(圖2.2)
圖2.2 蠕動式爬桿機器人整體構架b
nb
圖2.1 蠕動式爬桿機器人整體構架a
(2) 爬行驅動裝置
通過機器人整體的受力分析,選擇合適的伺服電機。來驅動主運動,與兩個夾爪的運動。通過對舵機旋轉角度的控制,來實現(xiàn)運動所需求的各種狀態(tài)。
(3) 電源
使用可充電的外接電源供電,經(jīng)過分壓與穩(wěn)壓模塊來滿足整個機器的電源需求。其中需要供電的有舵機,顯示器,傳感器,LED小燈,等其他電子元件。
(4) 傳感器
該機器人需要兩個壓力傳感器來檢測夾爪處的壓力,當達到一定值的時候夾爪電機停止運動,保持夾緊狀態(tài)。用來保護舵機,以免發(fā)熱而導致舵機的損壞。因為舵機在沒有停止命令下會持續(xù)夾緊,此時的電能的轉換將會以熱能形式轉換,而不是所需的機械能。還需要一個溫度濕度的傳感器,用來檢測周圍環(huán)境的狀態(tài)。進行數(shù)據(jù)的采集與分析。為了實現(xiàn)測高的功能我們選取氣壓傳感器,再通過一定的數(shù)學公式來推算出此刻機器人所在的高度[3]。
(5)手機端藍牙遙控
整套設備我們采用安卓端app軟件來進行遠端的藍牙遙控控制[4]。手機藍牙會把運動信號發(fā)送到機器端,來實現(xiàn)遠端控制。并且將所測量到的數(shù)據(jù)反饋給手機,達到手機與機器雙顯示數(shù)據(jù)。所以需要選擇一款合適的藍牙模塊。
(6)顯示窗口
機器人檢測的數(shù)據(jù)雖然由藍牙傳輸?shù)绞謾C,但是在現(xiàn)實工作中也需要在機器人本身上安裝一個顯示裝置用來在特殊的時候直接在機器人身上觀測到數(shù)據(jù),主要用于初期調試階段。方便對數(shù)據(jù)的觀測和記錄。
(7) 單片機
ARDUINO單片機的作用有它可以通過多種不同的傳感器來對周圍進行檢查。微控制器在板子上其可以經(jīng)過ARDUINO的編出來的程序語言來工作,將編譯成出來的的二進制的文件,拷進微控制器里等待著最終的使用[5]。
2.2 蠕動式爬桿機器人的運動分析
2.2.1 蠕動式爬桿機器人的運動組成
蠕動式爬桿機器人是由各個舵機的動作配合來完成所需要的工作動作要求[6][7]。其中分為這樣幾個狀態(tài):停機狀態(tài),開機狀態(tài)開機時張開兩個手抓主電機也處于圖示的位置,放置機器人到爬桿上,雙爪夾緊進入準備狀態(tài)。前進動作,停止動作,后退動作。將機器取下有一個張開動作,然后關機。(如圖2.3)
2.2.2 蠕動式爬桿機器人的運動分解及示意圖
舵機2
夾爪2
夾爪1
舵機1
連桿機構
舵機3
圖2.3機器人的示意圖
(1)初始狀態(tài):兩個夾爪都處于閉合狀態(tài),主舵機處于伸開的狀態(tài)。(手抓閉合如圖2.4)(手抓張開如圖2.5所示)(主舵機伸開如圖2.6所示)(主舵機伸縮如圖2.7所示)
圖2.5手抓張開狀態(tài)
圖2.4手抓夾緊狀態(tài)
圖2.6 機器伸開狀態(tài)
圖2.7 機器收縮狀態(tài)
(2)張開狀態(tài):打開夾爪1和夾爪2,用于接下里抓緊爬桿的工作。(如圖2.8)
圖2.8
夾爪1打開
夾爪2打開
(3) 閉合狀態(tài):此時夾爪1與夾爪2全部閉合(抓緊),來抓緊爬桿。準備進入上升或者下降的動作(如圖2.9所示)
夾爪1閉合
夾爪2閉合
圖2.9
(4)上升動作:首先夾爪2張開,然后主舵機3縮,夾爪2閉合。這是上升動作的半個循環(huán),然后夾爪1張開,主舵機3伸開,夾爪1閉合。此時上升動作的一個循環(huán)結束。
(5) 停止動作:主舵機3停止運動,夾爪1與夾爪2同時夾緊。
(6) 下降動作:首先夾爪1打開,然后主舵機3縮,夾爪1閉合,這是下降的半個循環(huán)。然后夾爪2打開,主舵機3伸開,夾爪2閉合,此時下降的一個循環(huán)結束。
(7) 卸下狀態(tài):夾爪1和夾爪2同時張開。方便取下機器人[8]。
第三章 蠕動式爬桿機器人的硬件電路設計
3 蠕動式爬桿機器人的硬件電路設計
3.1 硬件控制系統(tǒng)整體框圖的設計
前期我們主體設計了蠕動式爬桿機器人的結構設計與電路設計,首先對機器人的結構進行了理論的設計與多次的優(yōu)化,最終確定了較為合適的安全的機械結構。在對機械結構的確定過后我們就開始對此機器人的硬件電路進行了設計與分析。通過對其理論的上的設計,選擇了合適的電子元件,然后對各個元件的功能的執(zhí)行最后完成整體硬件框架的設計。以達到設計初期的目的,實現(xiàn)了整個硬件的基礎支撐。根據(jù)要求的功能在進行真?zhèn)€機器人的源程序的設計與分析[8]。
我們首先要對機器人的整個控制系統(tǒng)進行一個整體的設計。設計目的是為了實現(xiàn)機器人的遠程控制,通過藍牙對機器人的控制與檢測數(shù)據(jù)的反饋。通過控制系統(tǒng)來對舵機進行驅動,然后通過其傳動裝置,最終實現(xiàn)簡單的攀爬動作。由于攀爬時需要對夾爪的夾緊力進行一定的約束。不能使舵機轉的太過,而導致夾爪過于緊,所以檢測到的壓力會以電壓信號反饋回來,用來控制舵機,當達到一定的電壓然后控制舵機停止運動[9][10]。在整個過程中測得的氣壓值,溫度值,濕度值數(shù)據(jù)都要反饋給手機,用來監(jiān)測數(shù)據(jù)。
通過對整體功能的分析,最終設計了如圖所示的控制系統(tǒng)的整體框圖(如圖3.1)。
圖3.1控制系統(tǒng)整體框圖
3.2 控制板及各個元器件的選擇
3.2.1主板的選擇
選擇一款合適的主板,我們選擇其產(chǎn)品下的NANO型號ARDUINO NANO(如圖3.2)與之前的USB版ARDUINO DUEMILANOVE 相比較,ARDUINO NANO在體積上占有很大的優(yōu)勢,ARDUINO既可以用來單獨開發(fā)出需要獨立運行,并且具有互動效果的電子產(chǎn)品;也可以用來開發(fā)出與電腦相連接,可以和其他軟件共同完成工作[11]。
圖3.2 arduino nano
ARDUINO NANO的技術參數(shù):
1. 共14個數(shù)字的輸入端口和輸出端口D2-D13,TX,RX。
2. 有8個模擬的輸入端口A0-A7
3. 1對TTL電平串口收發(fā)端口RX/TX
4.6個PWM端口,D3 D5 D6 D9 D10 D11
5.采用AtmelAtmega328P-PU單片機
6. 支持USB的下載及供電
7.支持外接5V~12V直流電源供電
8.支持9V的電池供電
9. 支持ISP的下載
10.供電方式:USB供電,VIN供電,外部5V電壓輸入
3.2.2電機驅動的選擇
通過對機器人的受力分析,與其抓緊的方式,我們要選取大扭矩的舵機進行驅動。由于兩個夾爪舵機和主驅動舵機都需要很大的扭矩,所以我們選擇JX6221型號的舵機(如圖3.3所示)。電壓8.4V,最大工作扭矩32.3kg.cm。
圖3.3 JX6221舵機
3.2.3傳感器的選擇
(1)力傳感器的選擇
作用:用于測量夾爪間的壓力,而使舵機停止轉動,來達到夾爪的夾緊作用。 選擇:選擇常用的應變片作為壓力傳感器BF1K-3AA應變計高精度電阻式應變片1000歐。(如圖3.4)
圖3.4 壓力傳感器
原理:將應變片通過膠水黏在需要測量的物體上,使他跟著物體的形狀變化而跟著形變,這樣由于其跟著形變里面的金屬條也會跟著變長變短。金屬的電阻也會跟著金屬的伸長量縮短量而進一步變化。通過這個原理應變片才可以工作,在這里屬于對應變片的變化來反應物體的變化。一般應變片的材料是銅鉻合金,電阻的變化率是一個常數(shù),在這里他們之間的應變的關系是一個正比的關系。
(2) 溫濕度傳感器的選擇
作用: 用于測量不同位置的溫度與濕度。
選擇:DHT11溫濕度傳感器(如圖3.5所示)
濕度的測量范圍在20%到95%之間,濕度的測量誤差±5%
溫度的測量范圍在(0度到50度),溫度實際測量的誤差±2%。
工作電壓3.3v到5v。(圖3.6為常見電路圖,表3.1為DHT11引腳說明)
圖3.5 DHT11溫濕度傳感器
圖3.6 DHT11 常用電路
表 3.1 DHT11引腳說明
(3) 氣壓傳感器的選擇
選擇BMP180氣壓傳感器。體積小,耗能比較低,有較高的精確度(如圖3.7所示)
作用:通過測量當處的氣壓來計算機器所在高度。
壓力范圍:300至1100hPa(可以測得海拔范圍在-500米到9000米)
電源電壓:1.8V~3.6
引腳說明:VIN 電源輸入3.3v
GND ?接地
SCL ? 時鐘線
SAD ??數(shù)據(jù)線
圖3.7 BMP180氣壓傳感器
3.2.4藍牙遙控的選擇
選擇TELESKY HC-06 無線藍牙串口透傳模塊板,通過對安卓手機上下載SPP軟件對機器人進行遠端的遙控控制。設置波特率為9600。(如圖3.8所示,圖3.9為HC-06的使用說明)。
圖3.8 TELESKY HC-06
圖3.9 HC-06使用說明
3.2.5顯示器的選擇
選擇合適的顯示器,對所測量的數(shù)據(jù)進行實時的反饋。這里我們選擇LCD1602顯示器,可以一次顯示32個字符(16*02)。由4個數(shù)據(jù)線和3個控制線組成,所連接的方式由ARDUINO庫的要求所來。(如圖3.10)LCD1062的引腳說明如表3.2所示。
圖3.10 LCD1602
表3.2 LCD1602 引腳說明
在本次使用的LCD1602顯示中 需要用到引腳 1.2.3.4.5.6.11.12.13.14.15.16
其電路圖如3.11所示。
圖3.11 LCD電路圖
3.2.6電源模塊的選擇
電源模塊是整個控制系統(tǒng)工作依賴的基礎。各個模塊所需要的電壓也是不一樣的,所以要在電路中設計不同的電源電壓來滿足各個元器件的工作要求。電路中需要的電源有舵機,各個傳感器與控制芯片皆可以通過12V穩(wěn)壓為系統(tǒng)進行供電,通過LM2596S(如圖3.12)電源模塊對12V穩(wěn)壓電源進行可調節(jié)降壓穩(wěn)壓,(電源轉換電路如圖3.14)。此外還需要一個LM7805(如圖3.13)將12穩(wěn)壓電源降壓到3.5V給壓力傳感器與溫濕度傳感器進行供電(電源轉換電路如圖3.15)。
圖3.13
圖3.12
圖3.14 LM2596s電源轉換電路圖
圖3.15 LM7805電源轉換電路圖
圖10.4
3.2.7開關的選擇
選擇6角開關(如圖3.16),使用起來方便快捷,較高的觸發(fā)性。
圖3.16
六角開關的工作原理:斷開前1、3和4、6連接
閉合后1、2和4、5連接(如圖3.17所示,3.18為六角開關電路圖)
圖3.18六角開關電路圖
圖3.17 六角開關原理圖
3.3 硬件電路圖的設計
對硬件電路的電路元件進行選擇分析過后[13],就要對電路的設計進行進一步的規(guī)劃。選擇了合適的元件,又要有合適的電路接線,將所有元件連接起來實現(xiàn)一個整體。通過整體的配合,最終實現(xiàn)功能。
由于我們使用的是ARDUINO NANO的一款板子,其使用的是ATMEGA328P-PU芯片。其中有用到的引腳有ADC(Analog-to-Digital Converter),將連續(xù)的變量的模擬信號轉換成為離散的數(shù)字的信號,(模擬轉數(shù)字),溫度的量化,聲音的收集,等與之相關工作。在此機器人中需要用到的有壓力傳感器,需要將壓力的轉換用作電壓信號,進行體現(xiàn)。也就是說此時的每個電壓就可以代表一個壓力值。電壓是可以通過數(shù)字信號量化的,而壓力是不可以的。
其中VCC代表著電源輸入,GND代表的是地,RST代表的是復位腳,SCK、MISO、MOSI這三個引腳是SPI通訊需要的時鐘和數(shù)據(jù)腳,我們會在安裝顯示器的時候用到這三個引腳。
VCC、GND、RST的接線方法可以需要去看單片機中對應的用戶的手冊,上面有著典型電路,面對不同型號的單片機的接法是不同的,SCK、MISO、MOSI這三個接到需要通信的芯片上對應的腳就可以了,但是要注意一點,單片機上的MISO要接到芯片上的MOSI。
其中TXD,和RXD 分別是發(fā)送數(shù)據(jù)和接受數(shù)據(jù)。
根據(jù)ARDUINO NANO的介紹,選擇正確的接線方式。設計出蠕動式爬桿機器人的硬件電路圖(如圖3.19所示)。
圖3.19 控制系統(tǒng)硬件電路圖
第四章 蠕動式爬桿機器人的軟件設計
4 蠕動式爬桿機器人的軟件設計
4.1 軟件控制系統(tǒng)流程圖
通過了對其控制系統(tǒng)結構框圖的初步設計過后,我們就要開始針對其軟件的設計進行更系統(tǒng)化的設計,根據(jù)機器人的功能實現(xiàn)和控制系統(tǒng)結構框圖綜合要求,繪制了如下的軟件控制系統(tǒng)流程圖[14](如圖4.1)。
開始
采集壓力傳感器信號與舵機位置
圖4.1軟件控制系統(tǒng)流程圖
NO
NO
YES
YES
是否滿足
實現(xiàn)機器前后運動
舵機控制指令
停止指令
舵機運動
是否有指令
等待接受命令
系統(tǒng)初始化
首先開機,將機器人進去待機狀態(tài),此時機器人將處于接收命令的狀態(tài)。當機器人接收到任意一個命令的時候,系統(tǒng)會識別所發(fā)出的指令,其中包含機器上,下,停止,爪子張開,閉合的狀態(tài)。當發(fā)出張開命令的時候,兩個爪子同時張開。當發(fā)出抓緊的命令的時候兩個爪子同時夾緊。當發(fā)出上升的命令的時候,執(zhí)行上升的命令。發(fā)出停止命令的時候,停止一切動作。當發(fā)出下降命令的時候,機器下降。再次過程中,檢測的壓力值用來控制舵機的運動是否停止。整個閉環(huán)系統(tǒng)為了使機器攀爬的更穩(wěn)定,與此同時保護電機。
4.2 控制程序的設計
4.2.1開發(fā)環(huán)境
開發(fā)環(huán)境Arduino IDE
學習Arduino 單片機能大致理解其內部硬件的結構和寄存器的一些設定,僅僅知道它的一些端口功能就可以了;要會簡易的C語言,就可使用Arduino 單片機來編寫一些程序。Arduino 軟件語言需要掌握幾個指令,而且部分的指令有很強的可讀性,大概明白一些C語言也可以輕易的入門,快捷的應用。Arduino 的設計思想就是要開源,軟件,硬件的完全公開,不保留技術的公開。針對周邊輸入輸出設備的Arduino 的編程,很多常用的輸入輸出設備都已經(jīng)帶有一些樣式文件,在此平臺上進行簡易的改正,就可以編寫出來自己需要的復雜程序,完成功能多元化的作品。Arduino 因為它的開源特點,也就意味著從Arduino 相關的一些官網(wǎng),討論組,興趣社下得到一些幫助,在共享的資源的幫助下,整合自己得到的資源,能夠更容易的完成自己的作品。Arduino 及周邊產(chǎn)品加個都比較容易接受,在成本的比較下,學習和制作的成本減少,增加了使用者與開發(fā)者。可以直接通過自己的usb端口來下載程序[15]。
4.2.2程序的設計
首先對串口,電機,藍牙,溫濕度傳感器,顯示器等的定義。
#include //串口
#include //溫濕度
#include //舵機
#include //顯示
#include
#include
然后對其各自的引腳接口進行定義,其目的就是為了使各自原件能夠在各自的位置起到工作的作用。
定義舵機引腳
void dj_setup()
{
myservo1.attach(3);
myservo2.attach(4);
myservo3.attach(5);
}
lcd1602接口定義
LiquidCrystal lcd(13, 12, 11, A3, A2, A1, A0);
藍牙引腳的定義
SoftwareSerial lys(9, 8);
static const long LYSBaud = 9600;
溫度濕度傳感器引腳的定義
dht.setup(10);
氣壓計定義A4 A5引腳等定義詳細見源程序
void setup() {
DHT_setup() ; //dht11溫濕度傳感器初始化
dj_setup() ; //舵機初始化
LCD1602_setup() ; //lcd初始化
}
壓力傳感器電壓的讀取與計算
yl1= analogRead(A6); //讀取A6口的電壓值
yl2= analogRead(A7); //讀取A7口的電壓值
yl1=yl1 * (5 / 1024.0*100); //算出電壓值
yl2=yl2 * (5 / 1024.0*100);
顯示器讀數(shù)的顯示
LCD1602_Show(7, 0, String(F("S:"))+String(dhtH) + String(F("%"))); // 顯示濕度
LCD1602_Show(0, 0, String(F("T:"))+String(dhtT) + String(F("C")) );// 顯示溫度
LCD1602_Show(0, 0, String(F("QY:"))+String(a)+ String(F("m")) ); //顯示高度
藍牙的定義,用于接下來接收命令
void gasLoop() {
lys.listen();
while (lys.available()) {
c = lys.read();
}}
藍牙發(fā)送溫濕度和高度
lys.print( String(F("S:"))+String(dhtH) + String(F("%"))+String(F("T:"))+String(dhtT) + String(F("C")) +String(F("QY:"))+String(a)+ String(F("m")) );
關于舵機的控制首先對各個電機進行單獨的子程序設計
舵機1 舵機2 原理一致
由于設計可以加緊30mm到80mm的桿子,需要舵機運行4周及1440°所以我們是用360°可連續(xù)旋轉舵機。為了滿足循環(huán)周期和運動速度在設計要求,我們對延遲和旋轉角度進行進一步計算得到如下程序
void dj1_jj() //1加緊
{
myservo1.write(pos1);
delay(15);
pos1++;
if(pos1>1440)pos1=1440;
}
void dj1_sk() //1松開
{
myservo1.write(pos1);
delay(15);
pos1--;
if(pos1<0)pos1=0;
}
舵機3是主運動舵機其設計如下,理想的角度下我們設計其在拉縮狀態(tài)下位于0°位,伸開的狀態(tài)下位于90°位。
void dj3_ss() // 伸展
{
myservo3.write(pos3);
delay(15);
pos3++;
if(pos3>90)pos3=90;
}
void dj3_xj() // 拉縮
{
myservo3.write(pos3);
delay(15);
pos3--;
if(pos3<0)pos3=0;
}
以上是子程序的設計,主程序就是各個子程序的共同作用。
藍牙通過接收各個指令a b c d e f
其中a是兩夾爪加緊
if(c=="a")
{while(yl1<2||pos1<1440)
{ dj1_jj() ; } //1加緊
while(yl2<2||pos2<1440)
{ dj2_jj() ; } //2加緊
}
b是兩夾爪張開
else if(c=="b"){
while(pos1>0&&pos2>0)
{ dj1_sk() ; //1,2松開
dj2_sk() ; }}
c是主舵機伸開
else if(c=="c"){
while(pos3>0) // 伸展
{ dj3_ss() ; }}
d是主舵機收縮
else if(c=="d"){
while(pos3<90) // 拉縮
{ dj3_xj() ; }}
e是上升
else if(c=="e")
{ while(yl1<2&&pos1<1440)
{ dj1_jj() ; } //1舵機加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機松開
while(pos3>0)
{dj3_ss() ;} //3舵機上收縮
while(yl2<2&&pos2<1440)
{ dj2_jj() ; } //2舵機加緊
while(pos1>0)
{ dj1_sk() ; } //1舵機松開
while(pos3<90)
{dj3_xj() ;} //3舵機下伸開
}
f是下降
else if(c=="f")
{
while(yl2<2&&pos2<1440)
{ dj2_jj() ; } //2舵機加緊
while(pos1>0)
{ dj1_sk() ; } //1舵機松開
while(pos3>0)
{dj3_xj() ;} //3舵機下降縮
while(yl1<2&&pos1<1440)
{ dj1_jj() ; } //1舵機加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機松開
while(pos3<90)
{dj3_ss() ;} //3舵機抬升伸開
}
第五章 蠕動式爬桿機器人的前景
5 蠕動式爬桿機器人的前景
通過了對爬桿機器人的前期設計與研究,完全滿足不了現(xiàn)有社會的需求,所以在此設計的基礎下可以衍生很多類型的服務型機器人。將其設計為一個搭載平臺可以設計出復雜功能的巡檢機器人,通過安裝攝像設備,可以觀測工作人員難以去觀察的狹窄區(qū)域。也可以通過紅外距離識別進行自我避障的功能。也可以安裝復雜的氣體檢測傳感器,識別管道是否有氣體液體等泄露。通過裝置工作平臺,可以達到輸送物料的目的。安裝有噴涂裝置可以噴漆,涂保護膜等作用。
蠕動式爬桿機器人在結構的角度,為未來爬桿型機器人提供結構參考,避免復雜的機械結構與復雜的控制系統(tǒng)??梢愿奖?,快捷,經(jīng)濟的情況下完成所需要完成的工作任務。
目前設計的機器人的工作環(huán)境還是比較局限的,只適用于30mm-80mm直徑的柱狀桿子管道類的攀爬。對于彎道的管道還沒有進一步的研究,這也是未來研究的一個新的領域,為了滿足工業(yè)化管道的巡檢維護的工作需求,和城鄉(xiāng)建設中,部分工作的需求,還需要不斷的改進和完善。
第六章 學習與收獲
6 學習與收獲
在本次的蠕動式管道機器人的控制系統(tǒng)設計中,接觸到了簡單的機器人的控制原理,通過對arduino的學習,對于此次設計的完成起至關重要的作用。學習了關于整個控制系統(tǒng)的結構框圖的設計,各類傳感器的工作原理。選擇合適的原配件,關于藍牙遙控小車的基本知識原理。在arduino開發(fā)環(huán)境下進行簡單的編程,來實現(xiàn)機器人的運動的理論程序。整個控制機器人夾爪的是一個閉環(huán)的系統(tǒng)。通過對壓力的反饋,來實現(xiàn)機器人抓住桿子的穩(wěn)定性。通過對機器人運動的分解,各個舵機工作的狀態(tài),來分析其運動的特點,可以通過程序完美的將其表達出來。通過書籍,文獻以及論壇學習簡單的程序語言,并對其加工,使之可以在此機器人上可以完美的運行。本次設計綜合了書本知識,課外知識,網(wǎng)絡學習和同學導師的討論,共同完成。培養(yǎng)了自己獨立的自學能力,和與同學之間的合作能力。
參考文獻
參考文獻
[1] ??? 管道檢測機器人的運動控制研究[D]. 華南理工大學 2012
[2] 李著信,蘇毅,呂宏慶,孟浩龍. 管道在線檢測技術及檢測機器人研究[J]. 后勤工程學院學報. 2006(04)
[3]黨安明.傳感器與檢測技術,北京:北京大學出版社,2011.
[4] 蔡傳武,管貽生,周雪峰,江勵,朱海飛,吳文強,張憲民,張宏. 雙手爪式仿生攀爬機器人的搖桿控制[J]. 機器人. 2012(03)
[5]郭天祥.新概念51單片機C語言教程--入門提高開發(fā)拓展全攻略,北京:電子工業(yè)出版社,2008.
[6] 任恒靚. 一種自主機器人動態(tài)路徑規(guī)劃系統(tǒng)設計[D]. 內蒙古科技大學 2017
[7]林瑞光,電機與拖動基礎,杭州:浙江大學出版社,2002.
[8]李正熙.電動機實用控制電路,北京:化學工業(yè)出版社,2006.
[9]吳功平,肖曉暉,郭應龍,胡基才. 架空高壓輸電線自動爬行機器人的研制[J]. 中國機械工
程,2006(03):237-240.
[10]肖志光. 雙手爪攀爬機器人自主抓夾的研究[D].華南理工大學,2013.
[11]趙松年,張奇鵬. 機電一體化機械系統(tǒng)設計[M] . 第一版,北京:機械工業(yè)出版社,1996
[12]王海波.機電一體化設計基礎[M],北京:化學工業(yè)出版社,2012
[13] 劉彩霞,龔德利. 螺旋輪式小型管道機器人及其驅動控制系統(tǒng)研究[J]. 制造業(yè)自動化. 2014(15)
[14] 蔣俠飛. 一種管內蠕動機器人設計與研究[D]. 北方工業(yè)大學 2017
[15]賈朝川,楊婷,符茂勝. 管外爬行機器人及其控制系統(tǒng)設計[J]. 皖西學院學報,2014,30(02):20-23.
附錄
附 錄
控制系統(tǒng)源程序
#include //串口
#include //溫濕度
#include //舵機
#include //顯示
#include
#include
SFE_BMP180 pressure;// 創(chuàng)建一個氣壓計對象
double baseline; // 基準氣壓
LiquidCrystal lcd(13, 12, 11, A3, A2, A1, A0); //lcd1602接口定義
//溫濕度
DHT dht;
int dhtH, dhtT, dhtF;
//舵機
Servo myservo1;
Servo myservo2;
Servo myservo3;
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
char c;
int yl1=0;
int yl2=0;
//-------------------------------------------------------------------------
SoftwareSerial lys(9, 8); // RX, TX //藍牙
static const long LYSBaud = 9600;
//-------------------------------------------------------------------------
#define lgs Serial //串口
static const long LGSBaud = 9600;
void bmp180_setup() //bmp1
{
Serial.begin(9600);
Serial.println("REBOOT");
//獲得基準氣壓
baseline = pressure.startPressure(3);}
void LCD1602_setup()
{
lcd.begin(16, 2);//columns and rows
lcd.print(F("LCD1602_setup_OK!")); //顯示初始化完成
}
void LCD1602_Clear()
{
lcd.clear();
}
void LCD1602_Show(int x, int y, String t)
{
lcd.setCursor(x, y);
lcd.print(t);
}
void gasLoop() {
//-------------------------------藍牙串口
lys.listen();
while (lys.available()) {
c = lys.read();
}}
void DHT_setup() { //溫濕度初始化
Serial.begin(9600);
dht.setup(10);
}
void DHT_loop() {
delay(dht.getMinimumSamplingPeriod()); //讀取溫濕度
dhtH = dht.getHumidity();
dhtT = dht.getTemperature();
}
void dj_setup()
{
myservo1.attach(3); // 定義舵機引腳
myservo2.attach(4);
myservo3.attach(5);
}
void dj1_jj() //1加緊
{
myservo1.write(pos1);
delay(12);
pos1++;
if(pos1>1440)pos1=1440;
}
void dj1_sk() //1松開
{
myservo1.write(pos1);
delay(15);
pos1--;
if(pos1<0)pos1=0;
}
void dj2_jj() //2加緊
{
myservo2.write(pos2);
delay(15);
pos2++;
if(pos2>1440)pos2=1440;
}
void dj2_sk() //2松開
{
myservo2.write(pos2);
delay(15);
pos2--;
if(pos2<0)pos2=0;
}
void dj3_ss() // 伸展
{
myservo3.write(pos3);
delay(15);
pos3++;
if(pos3>90)pos3=90;
}
void dj3_xj() // 拉縮
{
myservo3.write(pos3);
delay(15);
pos3--;
if(pos3<0)pos3=0;
}
void setup() {
DHT_setup() ; //dht11溫濕度傳感器初始化
dj_setup() ; //舵機初始化
LCD1602_setup() ; //lcd初始化
}
void loop() {
double a,p;
DHT_loop(); //讀取溫度濕度數(shù)值
gasLoop() ; //查看串口字符
yl1= analogRead(A6); //讀取A6口的電壓值
yl2= analogRead(A7); //讀取A7口的電壓值
yl1=yl1 * (5 / 1024.0*100); //算出電壓值
yl2=yl2 * (5 / 1024.0*100);
p = pressure.startPressure(3);// 獲得一個氣壓值
a = pressure.altitude(p,baseline);//獲得基于基準氣壓的高度值
LCD1602_Show(7, 0, String(F("S:"))+String(dhtH) + String(F("%"))); // 顯示濕度
LCD1602_Show(0, 0, String(F("T:"))+String(dhtT) + String(F("C")) );// 顯示溫度
LCD1602_Show(0, 0, String(F("QY:"))+String(a)+ String(F("m")) ); //顯示高度
lys.print( String(F("S:"))+String(dhtH) + String(F("%"))+String(F("T:"))+String(dhtT) + String(F("C")) +String(F("QY:"))+String(a)+ String(F("m")) );
//藍牙發(fā)送溫濕度和高度;
if(c=="a")
{while(yl1<2||pos1<1440)
{ dj1_jj() ; } //1加緊
while(yl2<2||pos2<1440)
{ dj2_jj() ; } //2加緊
}
else if(c=="b"){
while(pos1>0&&pos2>0)
{ dj1_sk() ; //1,2松開
dj2_sk() ; }}
else if(c=="c"){
while(pos3>0) // 伸展
{ dj3_ss() ; }}
else if(c=="d"){
while(pos3<90) // 拉縮
{ dj3_xj() ; }}
else if(c=="e")
{ while(yl1<2&&pos1<1440)
{ dj1_jj() ; } //1舵機加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機松開
while(pos3>0)
{dj3_ss() ;} //3舵機上
收藏