蠕動(dòng)式爬桿機(jī)器人控制系統(tǒng)設(shè)計(jì)
蠕動(dòng)式爬桿機(jī)器人控制系統(tǒng)設(shè)計(jì),蠕動(dòng),式爬桿,機(jī)器人,控制系統(tǒng),設(shè)計(jì)
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 藍(lán)牙 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 舵機(jī) 1 2 3 P6 舵機(jī) 1 2 3 P7 舵機(jī) 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 氣壓計(jì) 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 爬桿機(jī)器人研究狀況及發(fā)展方向 1
2 蠕動(dòng)式爬桿機(jī)器人的概述 3
2.1 蠕動(dòng)式爬桿機(jī)器人的組成及其功能 3
2.2 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)分析 5
2.2.1 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)組成 5
2.2.2 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)分解及示意圖 5
3 蠕動(dòng)式爬桿機(jī)器人的硬件電路設(shè)計(jì) 8
3.1 硬件控制系統(tǒng)整體框圖的設(shè)計(jì) 8
3.2 控制板及各個(gè)元器件的選擇 9
3.2.1電機(jī)驅(qū)動(dòng)的選擇 10
3.2.2傳感器的選擇 10
3.2.3藍(lán)牙遙控的選擇 12
3.2.4 顯示器的選擇 12
3.2.5電源模塊的選擇 14
3.2.6 開關(guān)的選擇 15
3.2.7 控制主板的選擇 9
3.3 硬件電路圖的設(shè)計(jì) 16
4 蠕動(dòng)式爬桿機(jī)器人的軟件設(shè)計(jì) 18
4.1 軟件控制系統(tǒng)流程圖 18
4.2 控制程序的設(shè)計(jì) 19
4.2.1開發(fā)環(huán)境 19
4.2.2程序的設(shè)計(jì) 20
5 蠕動(dòng)式爬桿機(jī)器人的前景 25
6 結(jié) 論 26
參考文獻(xiàn) 27
附 錄 28
致 謝 34
IV
摘要
蠕動(dòng)式爬桿機(jī)器人控制系統(tǒng)設(shè)計(jì)
摘 要
工業(yè)化的發(fā)展,城市化的不斷推進(jìn),促成了管道系統(tǒng)的不斷成熟。在現(xiàn)有的移動(dòng)機(jī)器人中它們都具有自己的專一性和通用性的特點(diǎn)。廣泛的應(yīng)用于海陸空等全方位探測(cè)與運(yùn)輸。針對(duì)于管道類圓柱狀的攀爬機(jī)器人的研究尚不成熟。
為了滿足現(xiàn)在的社會(huì)需求,我們準(zhǔn)備設(shè)計(jì)一款可以在管道等桿子上攀爬的機(jī)器人。本文首先對(duì)蠕動(dòng)式爬桿機(jī)器人的一種介紹,區(qū)別于現(xiàn)有移動(dòng)式機(jī)器人的比較。通過對(duì)其組成的結(jié)構(gòu)和運(yùn)動(dòng)狀態(tài)的分析,結(jié)合此機(jī)器人的優(yōu)缺點(diǎn),與需要工作的要求和環(huán)境來設(shè)計(jì)這款機(jī)器人。基于ARDUINO開發(fā)板下與多種傳感器的配合以完成所需工作。通過對(duì)其控制系統(tǒng)結(jié)構(gòu)框圖的設(shè)計(jì)與其軟件流程圖的設(shè)計(jì)綜合設(shè)計(jì)其硬件電路和源程序。并對(duì)蠕動(dòng)式爬桿機(jī)器人的優(yōu)缺點(diǎn)進(jìn)行分析,未來發(fā)展的方向提供可行的支持。
關(guān)鍵詞:蠕動(dòng)式爬桿機(jī)器人;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ā)展,城市化的不斷推進(jìn),冶煉行業(yè)的成熟發(fā)展,管道也成為了這個(gè)社會(huì)各個(gè)行業(yè)不可缺少的組織構(gòu)架。也推進(jìn)了針對(duì)于管道攀爬的機(jī)器人的各類研究?,F(xiàn)有的移動(dòng)機(jī)器人一般分為以下幾種,路面越障機(jī)器人(如圖1.1),水下機(jī)器人(如圖1.2)與空中飛行機(jī)器人(如圖1.3),一般用于探測(cè),測(cè)繪,搬運(yùn),救援等功能。都具有自己的專業(yè)性與通用性。然而針對(duì)某一特殊工作環(huán)境下都需要一定的成本[1]。
圖1.3
圖1.1
圖1.2
根據(jù)研究調(diào)查,爬桿機(jī)器人特別適用于工礦企業(yè),因?yàn)榇祟惼髽I(yè)擁有成熟的管道系統(tǒng),需要機(jī)器人進(jìn)行定期的巡檢。針對(duì)于爬桿巡檢機(jī)器人國(guó)內(nèi)國(guó)外都有一定程度的研究,一般由分為管道內(nèi)部檢測(cè),與管道表面檢測(cè)。一般管道的周圍的環(huán)境檢測(cè)數(shù)據(jù)有高度,溫度,濕度的檢測(cè),通過數(shù)據(jù)的分析,排查與預(yù)防管道故障。然而一般這類問題的檢測(cè)很少有作業(yè)人員,爬桿位置的偏僻,人員行動(dòng)的安全都是限制因素。然而工廠事故的原因也有不少來源于管道的泄露[2]。因此本文主要研究一種針對(duì)于管道等桿狀物攀爬的爬桿機(jī)器人。
1.2 爬桿機(jī)器人狀況及研究方向
蠕動(dòng)式爬桿機(jī)器人是一項(xiàng)特殊的移動(dòng)機(jī)器人的設(shè)計(jì)思想,主要適用于細(xì)長(zhǎng)管道的攀爬功能。根據(jù)攀爬機(jī)器人的工作環(huán)境設(shè)計(jì)的適應(yīng)性的攀爬機(jī)構(gòu),以實(shí)現(xiàn)在圓柱狀桿面的攀爬。
攀爬機(jī)器人是特種機(jī)器人領(lǐng)域范圍內(nèi)的一個(gè)關(guān)鍵研究方向,與此也成為當(dāng)前機(jī)器人研究方向的重點(diǎn)。在過去的一些年,研究出了各種各樣的仿生機(jī)器人。比較典型的仿壁虎爬壁機(jī)器人、仿人型機(jī)器人等。這些機(jī)器人主要從外形結(jié)構(gòu)和功有仿蛇機(jī)器人、能上對(duì)生物進(jìn)行模仿,攀爬機(jī)器人的設(shè)計(jì)也是從一些爬樹動(dòng)物的運(yùn)動(dòng)方式上得到啟發(fā)。它把地面上機(jī)器人移動(dòng)技術(shù)與吸附技術(shù)有機(jī)結(jié)合起來,能夠在垂直壁面上夾緊運(yùn)動(dòng),而且可以攜帶工具進(jìn)行作業(yè)。
傳統(tǒng)的攀爬機(jī)器人的設(shè)計(jì),主要分類行走式和吸附式的運(yùn)動(dòng)模式。本文將設(shè)計(jì)一款可以蠕動(dòng)前進(jìn),并夾緊的設(shè)計(jì)結(jié)構(gòu)。大多數(shù)的機(jī)器人適用于某一具體行業(yè),更具有其單一性,與專一性的特點(diǎn)。在市場(chǎng)上現(xiàn)在的移動(dòng)式機(jī)器人工作環(huán)境的限制已經(jīng)不能滿足現(xiàn)在的日常生活工作的需求。然而本次重點(diǎn)更多在于其控制系統(tǒng)的設(shè)計(jì)。它適用于路燈桿,斜拉橋拉索等等圓柱狀表面的水平,溫度,濕度,氣體等人難以到達(dá)的位置的檢測(cè),減少人工的操作。本機(jī)器人通過藍(lán)牙傳輸,能夠?qū)崟r(shí)檢測(cè)位置環(huán)境的變化。來滿足環(huán)境所需的基本要求。
這里設(shè)計(jì)了一款控制系統(tǒng)。其驅(qū)動(dòng)系統(tǒng),傳動(dòng)系統(tǒng),行走機(jī)構(gòu),檢測(cè)系統(tǒng),機(jī)身的設(shè)計(jì),通過無線數(shù)據(jù)傳輸系統(tǒng),使用遙控終端的操作來達(dá)到目的。
參考相關(guān)的系統(tǒng)設(shè)計(jì),來完成蠕動(dòng)式爬桿機(jī)器人的控制系統(tǒng)設(shè)計(jì)。本質(zhì)思想與操作實(shí)際為通過數(shù)字信號(hào)的輸入,控制伺服電機(jī)的旋轉(zhuǎn),完成需要的工作狀態(tài),實(shí)現(xiàn)整體的運(yùn)動(dòng)合成,達(dá)到運(yùn)動(dòng)的需求。簡(jiǎn)單的運(yùn)動(dòng),但需要采集一些數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)庫。
本次設(shè)計(jì)的機(jī)器人,可以簡(jiǎn)單快捷方便的進(jìn)行一下周圍環(huán)境的檢測(cè),為常見故障進(jìn)行常規(guī)的排查。蠕動(dòng)式爬桿機(jī)器人的設(shè)計(jì)主要分為機(jī)械結(jié)構(gòu)的設(shè)計(jì)與控制系統(tǒng)的設(shè)計(jì)。此文是對(duì)蠕動(dòng)式爬桿機(jī)器人的控制系統(tǒng)設(shè)計(jì)進(jìn)行研究。基于ARDUINO開發(fā)板(如圖1.4)和功能要求下進(jìn)行蠕動(dòng)式爬桿機(jī)器人的硬件電路設(shè)計(jì)與軟件源程序的設(shè)計(jì)。
圖1.4
根據(jù)蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)要求,我們選取常見的豎直桿狀物進(jìn)行研究。機(jī)器人在爬桿上有上升下降,前進(jìn)后退,停止的動(dòng)作。都是通過伺服電機(jī)之間的配合來進(jìn)行驅(qū)動(dòng),完成所需要完成的動(dòng)作。機(jī)器人硬件的控制系統(tǒng)又分為主控制器的模塊,電機(jī)驅(qū)動(dòng)模塊,信號(hào)反饋模塊,通信模塊,電源模塊等組成。由于選取ARDUINO,所以自帶一些模塊,有些模塊需要額外的添加。
34
第二章 蠕動(dòng)式爬桿機(jī)器人的概述
2 蠕動(dòng)式爬桿機(jī)器人的概述
2.1 蠕動(dòng)式爬桿機(jī)器人的組成及其功能
(1)行走與導(dǎo)向結(jié)構(gòu)
主要由一組機(jī)構(gòu),來完成機(jī)器人前后伸縮動(dòng)作。通過兩個(gè)柱狀的定位桿進(jìn)行方向的定位,使其在固定的導(dǎo)軌上運(yùn)動(dòng),配合連桿裝置,逐步完善機(jī)器人前后行進(jìn)動(dòng)作的規(guī)范性,標(biāo)準(zhǔn)性。再配合兩個(gè)夾爪的張合實(shí)現(xiàn)對(duì)爬桿的夾緊動(dòng)作。通過兩組的動(dòng)作的疊加,使我們機(jī)器人可以滿足初步的動(dòng)作需求。(圖2.1)(圖2.2)
圖2.2 蠕動(dòng)式爬桿機(jī)器人整體構(gòu)架b
nb
圖2.1 蠕動(dòng)式爬桿機(jī)器人整體構(gòu)架a
(2) 爬行驅(qū)動(dòng)裝置
通過機(jī)器人整體的受力分析,選擇合適的伺服電機(jī)。來驅(qū)動(dòng)主運(yùn)動(dòng),與兩個(gè)夾爪的運(yùn)動(dòng)。通過對(duì)舵機(jī)旋轉(zhuǎn)角度的控制,來實(shí)現(xiàn)運(yùn)動(dòng)所需求的各種狀態(tài)。
(3) 電源
使用可充電的外接電源供電,經(jīng)過分壓與穩(wěn)壓模塊來滿足整個(gè)機(jī)器的電源需求。其中需要供電的有舵機(jī),顯示器,傳感器,LED小燈,等其他電子元件。
(4) 傳感器
該機(jī)器人需要兩個(gè)壓力傳感器來檢測(cè)夾爪處的壓力,當(dāng)達(dá)到一定值的時(shí)候夾爪電機(jī)停止運(yùn)動(dòng),保持夾緊狀態(tài)。用來保護(hù)舵機(jī),以免發(fā)熱而導(dǎo)致舵機(jī)的損壞。因?yàn)槎鏅C(jī)在沒有停止命令下會(huì)持續(xù)夾緊,此時(shí)的電能的轉(zhuǎn)換將會(huì)以熱能形式轉(zhuǎn)換,而不是所需的機(jī)械能。還需要一個(gè)溫度濕度的傳感器,用來檢測(cè)周圍環(huán)境的狀態(tài)。進(jìn)行數(shù)據(jù)的采集與分析。為了實(shí)現(xiàn)測(cè)高的功能我們選取氣壓傳感器,再通過一定的數(shù)學(xué)公式來推算出此刻機(jī)器人所在的高度[3]。
(5)手機(jī)端藍(lán)牙遙控
整套設(shè)備我們采用安卓端app軟件來進(jìn)行遠(yuǎn)端的藍(lán)牙遙控控制[4]。手機(jī)藍(lán)牙會(huì)把運(yùn)動(dòng)信號(hào)發(fā)送到機(jī)器端,來實(shí)現(xiàn)遠(yuǎn)端控制。并且將所測(cè)量到的數(shù)據(jù)反饋給手機(jī),達(dá)到手機(jī)與機(jī)器雙顯示數(shù)據(jù)。所以需要選擇一款合適的藍(lán)牙模塊。
(6)顯示窗口
機(jī)器人檢測(cè)的數(shù)據(jù)雖然由藍(lán)牙傳輸?shù)绞謾C(jī),但是在現(xiàn)實(shí)工作中也需要在機(jī)器人本身上安裝一個(gè)顯示裝置用來在特殊的時(shí)候直接在機(jī)器人身上觀測(cè)到數(shù)據(jù),主要用于初期調(diào)試階段。方便對(duì)數(shù)據(jù)的觀測(cè)和記錄。
(7) 單片機(jī)
ARDUINO單片機(jī)的作用有它可以通過多種不同的傳感器來對(duì)周圍進(jìn)行檢查。微控制器在板子上其可以經(jīng)過ARDUINO的編出來的程序語言來工作,將編譯成出來的的二進(jìn)制的文件,拷進(jìn)微控制器里等待著最終的使用[5]。
2.2 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)分析
2.2.1 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)組成
蠕動(dòng)式爬桿機(jī)器人是由各個(gè)舵機(jī)的動(dòng)作配合來完成所需要的工作動(dòng)作要求[6][7]。其中分為這樣幾個(gè)狀態(tài):停機(jī)狀態(tài),開機(jī)狀態(tài)開機(jī)時(shí)張開兩個(gè)手抓主電機(jī)也處于圖示的位置,放置機(jī)器人到爬桿上,雙爪夾緊進(jìn)入準(zhǔn)備狀態(tài)。前進(jìn)動(dòng)作,停止動(dòng)作,后退動(dòng)作。將機(jī)器取下有一個(gè)張開動(dòng)作,然后關(guān)機(jī)。(如圖2.3)
2.2.2 蠕動(dòng)式爬桿機(jī)器人的運(yùn)動(dòng)分解及示意圖
舵機(jī)2
夾爪2
夾爪1
舵機(jī)1
連桿機(jī)構(gòu)
舵機(jī)3
圖2.3機(jī)器人的示意圖
(1)初始狀態(tài):兩個(gè)夾爪都處于閉合狀態(tài),主舵機(jī)處于伸開的狀態(tài)。(手抓閉合如圖2.4)(手抓張開如圖2.5所示)(主舵機(jī)伸開如圖2.6所示)(主舵機(jī)伸縮如圖2.7所示)
圖2.5手抓張開狀態(tài)
圖2.4手抓夾緊狀態(tài)
圖2.6 機(jī)器伸開狀態(tài)
圖2.7 機(jī)器收縮狀態(tài)
(2)張開狀態(tài):打開夾爪1和夾爪2,用于接下里抓緊爬桿的工作。(如圖2.8)
圖2.8
夾爪1打開
夾爪2打開
(3) 閉合狀態(tài):此時(shí)夾爪1與夾爪2全部閉合(抓緊),來抓緊爬桿。準(zhǔn)備進(jìn)入上升或者下降的動(dòng)作(如圖2.9所示)
夾爪1閉合
夾爪2閉合
圖2.9
(4)上升動(dòng)作:首先夾爪2張開,然后主舵機(jī)3縮,夾爪2閉合。這是上升動(dòng)作的半個(gè)循環(huán),然后夾爪1張開,主舵機(jī)3伸開,夾爪1閉合。此時(shí)上升動(dòng)作的一個(gè)循環(huán)結(jié)束。
(5) 停止動(dòng)作:主舵機(jī)3停止運(yùn)動(dòng),夾爪1與夾爪2同時(shí)夾緊。
(6) 下降動(dòng)作:首先夾爪1打開,然后主舵機(jī)3縮,夾爪1閉合,這是下降的半個(gè)循環(huán)。然后夾爪2打開,主舵機(jī)3伸開,夾爪2閉合,此時(shí)下降的一個(gè)循環(huán)結(jié)束。
(7) 卸下狀態(tài):夾爪1和夾爪2同時(shí)張開。方便取下機(jī)器人[8]。
第三章 蠕動(dòng)式爬桿機(jī)器人的硬件電路設(shè)計(jì)
3 蠕動(dòng)式爬桿機(jī)器人的硬件電路設(shè)計(jì)
3.1 硬件控制系統(tǒng)整體框圖的設(shè)計(jì)
前期我們主體設(shè)計(jì)了蠕動(dòng)式爬桿機(jī)器人的結(jié)構(gòu)設(shè)計(jì)與電路設(shè)計(jì),首先對(duì)機(jī)器人的結(jié)構(gòu)進(jìn)行了理論的設(shè)計(jì)與多次的優(yōu)化,最終確定了較為合適的安全的機(jī)械結(jié)構(gòu)。在對(duì)機(jī)械結(jié)構(gòu)的確定過后我們就開始對(duì)此機(jī)器人的硬件電路進(jìn)行了設(shè)計(jì)與分析。通過對(duì)其理論的上的設(shè)計(jì),選擇了合適的電子元件,然后對(duì)各個(gè)元件的功能的執(zhí)行最后完成整體硬件框架的設(shè)計(jì)。以達(dá)到設(shè)計(jì)初期的目的,實(shí)現(xiàn)了整個(gè)硬件的基礎(chǔ)支撐。根據(jù)要求的功能在進(jìn)行真?zhèn)€機(jī)器人的源程序的設(shè)計(jì)與分析[8]。
我們首先要對(duì)機(jī)器人的整個(gè)控制系統(tǒng)進(jìn)行一個(gè)整體的設(shè)計(jì)。設(shè)計(jì)目的是為了實(shí)現(xiàn)機(jī)器人的遠(yuǎn)程控制,通過藍(lán)牙對(duì)機(jī)器人的控制與檢測(cè)數(shù)據(jù)的反饋。通過控制系統(tǒng)來對(duì)舵機(jī)進(jìn)行驅(qū)動(dòng),然后通過其傳動(dòng)裝置,最終實(shí)現(xiàn)簡(jiǎn)單的攀爬動(dòng)作。由于攀爬時(shí)需要對(duì)夾爪的夾緊力進(jìn)行一定的約束。不能使舵機(jī)轉(zhuǎn)的太過,而導(dǎo)致夾爪過于緊,所以檢測(cè)到的壓力會(huì)以電壓信號(hào)反饋回來,用來控制舵機(jī),當(dāng)達(dá)到一定的電壓然后控制舵機(jī)停止運(yùn)動(dòng)[9][10]。在整個(gè)過程中測(cè)得的氣壓值,溫度值,濕度值數(shù)據(jù)都要反饋給手機(jī),用來監(jiān)測(cè)數(shù)據(jù)。
通過對(duì)整體功能的分析,最終設(shè)計(jì)了如圖所示的控制系統(tǒng)的整體框圖(如圖3.1)。
圖3.1控制系統(tǒng)整體框圖
3.2 控制板及各個(gè)元器件的選擇
3.2.1主板的選擇
選擇一款合適的主板,我們選擇其產(chǎn)品下的NANO型號(hào)ARDUINO NANO(如圖3.2)與之前的USB版ARDUINO DUEMILANOVE 相比較,ARDUINO NANO在體積上占有很大的優(yōu)勢(shì),ARDUINO既可以用來單獨(dú)開發(fā)出需要獨(dú)立運(yùn)行,并且具有互動(dòng)效果的電子產(chǎn)品;也可以用來開發(fā)出與電腦相連接,可以和其他軟件共同完成工作[11]。
圖3.2 arduino nano
ARDUINO NANO的技術(shù)參數(shù):
1. 共14個(gè)數(shù)字的輸入端口和輸出端口D2-D13,TX,RX。
2. 有8個(gè)模擬的輸入端口A0-A7
3. 1對(duì)TTL電平串口收發(fā)端口RX/TX
4.6個(gè)PWM端口,D3 D5 D6 D9 D10 D11
5.采用AtmelAtmega328P-PU單片機(jī)
6. 支持USB的下載及供電
7.支持外接5V~12V直流電源供電
8.支持9V的電池供電
9. 支持ISP的下載
10.供電方式:USB供電,VIN供電,外部5V電壓輸入
3.2.2電機(jī)驅(qū)動(dòng)的選擇
通過對(duì)機(jī)器人的受力分析,與其抓緊的方式,我們要選取大扭矩的舵機(jī)進(jìn)行驅(qū)動(dòng)。由于兩個(gè)夾爪舵機(jī)和主驅(qū)動(dòng)舵機(jī)都需要很大的扭矩,所以我們選擇JX6221型號(hào)的舵機(jī)(如圖3.3所示)。電壓8.4V,最大工作扭矩32.3kg.cm。
圖3.3 JX6221舵機(jī)
3.2.3傳感器的選擇
(1)力傳感器的選擇
作用:用于測(cè)量夾爪間的壓力,而使舵機(jī)停止轉(zhuǎn)動(dòng),來達(dá)到夾爪的夾緊作用。 選擇:選擇常用的應(yīng)變片作為壓力傳感器BF1K-3AA應(yīng)變計(jì)高精度電阻式應(yīng)變片1000歐。(如圖3.4)
圖3.4 壓力傳感器
原理:將應(yīng)變片通過膠水黏在需要測(cè)量的物體上,使他跟著物體的形狀變化而跟著形變,這樣由于其跟著形變里面的金屬條也會(huì)跟著變長(zhǎng)變短。金屬的電阻也會(huì)跟著金屬的伸長(zhǎng)量縮短量而進(jìn)一步變化。通過這個(gè)原理應(yīng)變片才可以工作,在這里屬于對(duì)應(yīng)變片的變化來反應(yīng)物體的變化。一般應(yīng)變片的材料是銅鉻合金,電阻的變化率是一個(gè)常數(shù),在這里他們之間的應(yīng)變的關(guān)系是一個(gè)正比的關(guān)系。
(2) 溫濕度傳感器的選擇
作用: 用于測(cè)量不同位置的溫度與濕度。
選擇:DHT11溫濕度傳感器(如圖3.5所示)
濕度的測(cè)量范圍在20%到95%之間,濕度的測(cè)量誤差±5%
溫度的測(cè)量范圍在(0度到50度),溫度實(shí)際測(cè)量的誤差±2%。
工作電壓3.3v到5v。(圖3.6為常見電路圖,表3.1為DHT11引腳說明)
圖3.5 DHT11溫濕度傳感器
圖3.6 DHT11 常用電路
表 3.1 DHT11引腳說明
(3) 氣壓傳感器的選擇
選擇BMP180氣壓傳感器。體積小,耗能比較低,有較高的精確度(如圖3.7所示)
作用:通過測(cè)量當(dāng)處的氣壓來計(jì)算機(jī)器所在高度。
壓力范圍:300至1100hPa(可以測(cè)得海拔范圍在-500米到9000米)
電源電壓:1.8V~3.6
引腳說明:VIN 電源輸入3.3v
GND ?接地
SCL ? 時(shí)鐘線
SAD ??數(shù)據(jù)線
圖3.7 BMP180氣壓傳感器
3.2.4藍(lán)牙遙控的選擇
選擇TELESKY HC-06 無線藍(lán)牙串口透?jìng)髂K板,通過對(duì)安卓手機(jī)上下載SPP軟件對(duì)機(jī)器人進(jìn)行遠(yuǎn)端的遙控控制。設(shè)置波特率為9600。(如圖3.8所示,圖3.9為HC-06的使用說明)。
圖3.8 TELESKY HC-06
圖3.9 HC-06使用說明
3.2.5顯示器的選擇
選擇合適的顯示器,對(duì)所測(cè)量的數(shù)據(jù)進(jìn)行實(shí)時(shí)的反饋。這里我們選擇LCD1602顯示器,可以一次顯示32個(gè)字符(16*02)。由4個(gè)數(shù)據(jù)線和3個(gè)控制線組成,所連接的方式由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電源模塊的選擇
電源模塊是整個(gè)控制系統(tǒng)工作依賴的基礎(chǔ)。各個(gè)模塊所需要的電壓也是不一樣的,所以要在電路中設(shè)計(jì)不同的電源電壓來滿足各個(gè)元器件的工作要求。電路中需要的電源有舵機(jī),各個(gè)傳感器與控制芯片皆可以通過12V穩(wěn)壓為系統(tǒng)進(jìn)行供電,通過LM2596S(如圖3.12)電源模塊對(duì)12V穩(wěn)壓電源進(jìn)行可調(diào)節(jié)降壓穩(wěn)壓,(電源轉(zhuǎn)換電路如圖3.14)。此外還需要一個(gè)LM7805(如圖3.13)將12穩(wěn)壓電源降壓到3.5V給壓力傳感器與溫濕度傳感器進(jìn)行供電(電源轉(zhuǎn)換電路如圖3.15)。
圖3.13
圖3.12
圖3.14 LM2596s電源轉(zhuǎn)換電路圖
圖3.15 LM7805電源轉(zhuǎn)換電路圖
圖10.4
3.2.7開關(guān)的選擇
選擇6角開關(guān)(如圖3.16),使用起來方便快捷,較高的觸發(fā)性。
圖3.16
六角開關(guān)的工作原理:斷開前1、3和4、6連接
閉合后1、2和4、5連接(如圖3.17所示,3.18為六角開關(guān)電路圖)
圖3.18六角開關(guān)電路圖
圖3.17 六角開關(guān)原理圖
3.3 硬件電路圖的設(shè)計(jì)
對(duì)硬件電路的電路元件進(jìn)行選擇分析過后[13],就要對(duì)電路的設(shè)計(jì)進(jìn)行進(jìn)一步的規(guī)劃。選擇了合適的元件,又要有合適的電路接線,將所有元件連接起來實(shí)現(xiàn)一個(gè)整體。通過整體的配合,最終實(shí)現(xiàn)功能。
由于我們使用的是ARDUINO NANO的一款板子,其使用的是ATMEGA328P-PU芯片。其中有用到的引腳有ADC(Analog-to-Digital Converter),將連續(xù)的變量的模擬信號(hào)轉(zhuǎn)換成為離散的數(shù)字的信號(hào),(模擬轉(zhuǎn)數(shù)字),溫度的量化,聲音的收集,等與之相關(guān)工作。在此機(jī)器人中需要用到的有壓力傳感器,需要將壓力的轉(zhuǎn)換用作電壓信號(hào),進(jìn)行體現(xiàn)。也就是說此時(shí)的每個(gè)電壓就可以代表一個(gè)壓力值。電壓是可以通過數(shù)字信號(hào)量化的,而壓力是不可以的。
其中VCC代表著電源輸入,GND代表的是地,RST代表的是復(fù)位腳,SCK、MISO、MOSI這三個(gè)引腳是SPI通訊需要的時(shí)鐘和數(shù)據(jù)腳,我們會(huì)在安裝顯示器的時(shí)候用到這三個(gè)引腳。
VCC、GND、RST的接線方法可以需要去看單片機(jī)中對(duì)應(yīng)的用戶的手冊(cè),上面有著典型電路,面對(duì)不同型號(hào)的單片機(jī)的接法是不同的,SCK、MISO、MOSI這三個(gè)接到需要通信的芯片上對(duì)應(yīng)的腳就可以了,但是要注意一點(diǎn),單片機(jī)上的MISO要接到芯片上的MOSI。
其中TXD,和RXD 分別是發(fā)送數(shù)據(jù)和接受數(shù)據(jù)。
根據(jù)ARDUINO NANO的介紹,選擇正確的接線方式。設(shè)計(jì)出蠕動(dòng)式爬桿機(jī)器人的硬件電路圖(如圖3.19所示)。
圖3.19 控制系統(tǒng)硬件電路圖
第四章 蠕動(dòng)式爬桿機(jī)器人的軟件設(shè)計(jì)
4 蠕動(dòng)式爬桿機(jī)器人的軟件設(shè)計(jì)
4.1 軟件控制系統(tǒng)流程圖
通過了對(duì)其控制系統(tǒng)結(jié)構(gòu)框圖的初步設(shè)計(jì)過后,我們就要開始針對(duì)其軟件的設(shè)計(jì)進(jìn)行更系統(tǒng)化的設(shè)計(jì),根據(jù)機(jī)器人的功能實(shí)現(xiàn)和控制系統(tǒng)結(jié)構(gòu)框圖綜合要求,繪制了如下的軟件控制系統(tǒng)流程圖[14](如圖4.1)。
開始
采集壓力傳感器信號(hào)與舵機(jī)位置
圖4.1軟件控制系統(tǒng)流程圖
NO
NO
YES
YES
是否滿足
實(shí)現(xiàn)機(jī)器前后運(yùn)動(dòng)
舵機(jī)控制指令
停止指令
舵機(jī)運(yùn)動(dòng)
是否有指令
等待接受命令
系統(tǒng)初始化
首先開機(jī),將機(jī)器人進(jìn)去待機(jī)狀態(tài),此時(shí)機(jī)器人將處于接收命令的狀態(tài)。當(dāng)機(jī)器人接收到任意一個(gè)命令的時(shí)候,系統(tǒng)會(huì)識(shí)別所發(fā)出的指令,其中包含機(jī)器上,下,停止,爪子張開,閉合的狀態(tài)。當(dāng)發(fā)出張開命令的時(shí)候,兩個(gè)爪子同時(shí)張開。當(dāng)發(fā)出抓緊的命令的時(shí)候兩個(gè)爪子同時(shí)夾緊。當(dāng)發(fā)出上升的命令的時(shí)候,執(zhí)行上升的命令。發(fā)出停止命令的時(shí)候,停止一切動(dòng)作。當(dāng)發(fā)出下降命令的時(shí)候,機(jī)器下降。再次過程中,檢測(cè)的壓力值用來控制舵機(jī)的運(yùn)動(dòng)是否停止。整個(gè)閉環(huán)系統(tǒng)為了使機(jī)器攀爬的更穩(wěn)定,與此同時(shí)保護(hù)電機(jī)。
4.2 控制程序的設(shè)計(jì)
4.2.1開發(fā)環(huán)境
開發(fā)環(huán)境Arduino IDE
學(xué)習(xí)Arduino 單片機(jī)能大致理解其內(nèi)部硬件的結(jié)構(gòu)和寄存器的一些設(shè)定,僅僅知道它的一些端口功能就可以了;要會(huì)簡(jiǎn)易的C語言,就可使用Arduino 單片機(jī)來編寫一些程序。Arduino 軟件語言需要掌握幾個(gè)指令,而且部分的指令有很強(qiáng)的可讀性,大概明白一些C語言也可以輕易的入門,快捷的應(yīng)用。Arduino 的設(shè)計(jì)思想就是要開源,軟件,硬件的完全公開,不保留技術(shù)的公開。針對(duì)周邊輸入輸出設(shè)備的Arduino 的編程,很多常用的輸入輸出設(shè)備都已經(jīng)帶有一些樣式文件,在此平臺(tái)上進(jìn)行簡(jiǎn)易的改正,就可以編寫出來自己需要的復(fù)雜程序,完成功能多元化的作品。Arduino 因?yàn)樗拈_源特點(diǎn),也就意味著從Arduino 相關(guān)的一些官網(wǎng),討論組,興趣社下得到一些幫助,在共享的資源的幫助下,整合自己得到的資源,能夠更容易的完成自己的作品。Arduino 及周邊產(chǎn)品加個(gè)都比較容易接受,在成本的比較下,學(xué)習(xí)和制作的成本減少,增加了使用者與開發(fā)者。可以直接通過自己的usb端口來下載程序[15]。
4.2.2程序的設(shè)計(jì)
首先對(duì)串口,電機(jī),藍(lán)牙,溫濕度傳感器,顯示器等的定義。
#include //串口
#include //溫濕度
#include //舵機(jī)
#include //顯示
#include
#include
然后對(duì)其各自的引腳接口進(jìn)行定義,其目的就是為了使各自原件能夠在各自的位置起到工作的作用。
定義舵機(jī)引腳
void dj_setup()
{
myservo1.attach(3);
myservo2.attach(4);
myservo3.attach(5);
}
lcd1602接口定義
LiquidCrystal lcd(13, 12, 11, A3, A2, A1, A0);
藍(lán)牙引腳的定義
SoftwareSerial lys(9, 8);
static const long LYSBaud = 9600;
溫度濕度傳感器引腳的定義
dht.setup(10);
氣壓計(jì)定義A4 A5引腳等定義詳細(xì)見源程序
void setup() {
DHT_setup() ; //dht11溫濕度傳感器初始化
dj_setup() ; //舵機(jī)初始化
LCD1602_setup() ; //lcd初始化
}
壓力傳感器電壓的讀取與計(jì)算
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")) ); //顯示高度
藍(lán)牙的定義,用于接下來接收命令
void gasLoop() {
lys.listen();
while (lys.available()) {
c = lys.read();
}}
藍(lán)牙發(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")) );
關(guān)于舵機(jī)的控制首先對(duì)各個(gè)電機(jī)進(jìn)行單獨(dú)的子程序設(shè)計(jì)
舵機(jī)1 舵機(jī)2 原理一致
由于設(shè)計(jì)可以加緊30mm到80mm的桿子,需要舵機(jī)運(yùn)行4周及1440°所以我們是用360°可連續(xù)旋轉(zhuǎn)舵機(jī)。為了滿足循環(huán)周期和運(yùn)動(dòng)速度在設(shè)計(jì)要求,我們對(duì)延遲和旋轉(zhuǎn)角度進(jìn)行進(jìn)一步計(jì)算得到如下程序
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;
}
舵機(jī)3是主運(yùn)動(dòng)舵機(jī)其設(shè)計(jì)如下,理想的角度下我們?cè)O(shè)計(jì)其在拉縮狀態(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;
}
以上是子程序的設(shè)計(jì),主程序就是各個(gè)子程序的共同作用。
藍(lán)牙通過接收各個(gè)指令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是主舵機(jī)伸開
else if(c=="c"){
while(pos3>0) // 伸展
{ dj3_ss() ; }}
d是主舵機(jī)收縮
else if(c=="d"){
while(pos3<90) // 拉縮
{ dj3_xj() ; }}
e是上升
else if(c=="e")
{ while(yl1<2&&pos1<1440)
{ dj1_jj() ; } //1舵機(jī)加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機(jī)松開
while(pos3>0)
{dj3_ss() ;} //3舵機(jī)上收縮
while(yl2<2&&pos2<1440)
{ dj2_jj() ; } //2舵機(jī)加緊
while(pos1>0)
{ dj1_sk() ; } //1舵機(jī)松開
while(pos3<90)
{dj3_xj() ;} //3舵機(jī)下伸開
}
f是下降
else if(c=="f")
{
while(yl2<2&&pos2<1440)
{ dj2_jj() ; } //2舵機(jī)加緊
while(pos1>0)
{ dj1_sk() ; } //1舵機(jī)松開
while(pos3>0)
{dj3_xj() ;} //3舵機(jī)下降縮
while(yl1<2&&pos1<1440)
{ dj1_jj() ; } //1舵機(jī)加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機(jī)松開
while(pos3<90)
{dj3_ss() ;} //3舵機(jī)抬升伸開
}
第五章 蠕動(dòng)式爬桿機(jī)器人的前景
5 蠕動(dòng)式爬桿機(jī)器人的前景
通過了對(duì)爬桿機(jī)器人的前期設(shè)計(jì)與研究,完全滿足不了現(xiàn)有社會(huì)的需求,所以在此設(shè)計(jì)的基礎(chǔ)下可以衍生很多類型的服務(wù)型機(jī)器人。將其設(shè)計(jì)為一個(gè)搭載平臺(tái)可以設(shè)計(jì)出復(fù)雜功能的巡檢機(jī)器人,通過安裝攝像設(shè)備,可以觀測(cè)工作人員難以去觀察的狹窄區(qū)域。也可以通過紅外距離識(shí)別進(jìn)行自我避障的功能。也可以安裝復(fù)雜的氣體檢測(cè)傳感器,識(shí)別管道是否有氣體液體等泄露。通過裝置工作平臺(tái),可以達(dá)到輸送物料的目的。安裝有噴涂裝置可以噴漆,涂保護(hù)膜等作用。
蠕動(dòng)式爬桿機(jī)器人在結(jié)構(gòu)的角度,為未來爬桿型機(jī)器人提供結(jié)構(gòu)參考,避免復(fù)雜的機(jī)械結(jié)構(gòu)與復(fù)雜的控制系統(tǒng)??梢愿奖?,快捷,經(jīng)濟(jì)的情況下完成所需要完成的工作任務(wù)。
目前設(shè)計(jì)的機(jī)器人的工作環(huán)境還是比較局限的,只適用于30mm-80mm直徑的柱狀桿子管道類的攀爬。對(duì)于彎道的管道還沒有進(jìn)一步的研究,這也是未來研究的一個(gè)新的領(lǐng)域,為了滿足工業(yè)化管道的巡檢維護(hù)的工作需求,和城鄉(xiāng)建設(shè)中,部分工作的需求,還需要不斷的改進(jìn)和完善。
第六章 學(xué)習(xí)與收獲
6 學(xué)習(xí)與收獲
在本次的蠕動(dòng)式管道機(jī)器人的控制系統(tǒng)設(shè)計(jì)中,接觸到了簡(jiǎn)單的機(jī)器人的控制原理,通過對(duì)arduino的學(xué)習(xí),對(duì)于此次設(shè)計(jì)的完成起至關(guān)重要的作用。學(xué)習(xí)了關(guān)于整個(gè)控制系統(tǒng)的結(jié)構(gòu)框圖的設(shè)計(jì),各類傳感器的工作原理。選擇合適的原配件,關(guān)于藍(lán)牙遙控小車的基本知識(shí)原理。在arduino開發(fā)環(huán)境下進(jìn)行簡(jiǎn)單的編程,來實(shí)現(xiàn)機(jī)器人的運(yùn)動(dòng)的理論程序。整個(gè)控制機(jī)器人夾爪的是一個(gè)閉環(huán)的系統(tǒng)。通過對(duì)壓力的反饋,來實(shí)現(xiàn)機(jī)器人抓住桿子的穩(wěn)定性。通過對(duì)機(jī)器人運(yùn)動(dòng)的分解,各個(gè)舵機(jī)工作的狀態(tài),來分析其運(yùn)動(dòng)的特點(diǎn),可以通過程序完美的將其表達(dá)出來。通過書籍,文獻(xiàn)以及論壇學(xué)習(xí)簡(jiǎn)單的程序語言,并對(duì)其加工,使之可以在此機(jī)器人上可以完美的運(yùn)行。本次設(shè)計(jì)綜合了書本知識(shí),課外知識(shí),網(wǎng)絡(luò)學(xué)習(xí)和同學(xué)導(dǎo)師的討論,共同完成。培養(yǎng)了自己獨(dú)立的自學(xué)能力,和與同學(xué)之間的合作能力。
參考文獻(xiàn)
參考文獻(xiàn)
[1] 祝俊. 管道檢測(cè)機(jī)器人的運(yùn)動(dòng)控制研究[D]. 華南理工大學(xué) 2012
[2] 李著信,蘇毅,呂宏慶,孟浩龍. 管道在線檢測(cè)技術(shù)及檢測(cè)機(jī)器人研究[J]. 后勤工程學(xué)院學(xué)報(bào). 2006(04)
[3]黨安明.傳感器與檢測(cè)技術(shù),北京:北京大學(xué)出版社,2011.
[4] 蔡傳武,管貽生,周雪峰,江勵(lì),朱海飛,吳文強(qiáng),張憲民,張宏. 雙手爪式仿生攀爬機(jī)器人的搖桿控制[J]. 機(jī)器人. 2012(03)
[5]郭天祥.新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略,北京:電子工業(yè)出版社,2008.
[6] 任恒靚. 一種自主機(jī)器人動(dòng)態(tài)路徑規(guī)劃系統(tǒng)設(shè)計(jì)[D]. 內(nèi)蒙古科技大學(xué) 2017
[7]林瑞光,電機(jī)與拖動(dòng)基礎(chǔ),杭州:浙江大學(xué)出版社,2002.
[8]李正熙.電動(dòng)機(jī)實(shí)用控制電路,北京:化學(xué)工業(yè)出版社,2006.
[9]吳功平,肖曉暉,郭應(yīng)龍,胡基才. 架空高壓輸電線自動(dòng)爬行機(jī)器人的研制[J]. 中國(guó)機(jī)械工
程,2006(03):237-240.
[10]肖志光. 雙手爪攀爬機(jī)器人自主抓夾的研究[D].華南理工大學(xué),2013.
[11]趙松年,張奇鵬. 機(jī)電一體化機(jī)械系統(tǒng)設(shè)計(jì)[M] . 第一版,北京:機(jī)械工業(yè)出版社,1996
[12]王海波.機(jī)電一體化設(shè)計(jì)基礎(chǔ)[M],北京:化學(xué)工業(yè)出版社,2012
[13] 劉彩霞,龔德利. 螺旋輪式小型管道機(jī)器人及其驅(qū)動(dòng)控制系統(tǒng)研究[J]. 制造業(yè)自動(dòng)化. 2014(15)
[14] 蔣俠飛. 一種管內(nèi)蠕動(dòng)機(jī)器人設(shè)計(jì)與研究[D]. 北方工業(yè)大學(xué) 2017
[15]賈朝川,楊婷,符茂勝. 管外爬行機(jī)器人及其控制系統(tǒng)設(shè)計(jì)[J]. 皖西學(xué)院學(xué)報(bào),2014,30(02):20-23.
附錄
附 錄
控制系統(tǒng)源程序
#include //串口
#include //溫濕度
#include //舵機(jī)
#include //顯示
#include
#include
SFE_BMP180 pressure;// 創(chuàng)建一個(gè)氣壓計(jì)對(duì)象
double baseline; // 基準(zhǔn)氣壓
LiquidCrystal lcd(13, 12, 11, A3, A2, A1, A0); //lcd1602接口定義
//溫濕度
DHT dht;
int dhtH, dhtT, dhtF;
//舵機(jī)
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 //藍(lán)牙
static const long LYSBaud = 9600;
//-------------------------------------------------------------------------
#define lgs Serial //串口
static const long LGSBaud = 9600;
void bmp180_setup() //bmp1
{
Serial.begin(9600);
Serial.println("REBOOT");
//獲得基準(zhǔn)氣壓
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() {
//-------------------------------藍(lán)牙串口
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); // 定義舵機(jī)引腳
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() ; //舵機(jī)初始化
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);// 獲得一個(gè)氣壓值
a = pressure.altitude(p,baseline);//獲得基于基準(zhǔn)氣壓的高度值
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")) );
//藍(lán)牙發(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舵機(jī)加緊
while(pos2>0)
{ dj2_sk() ; } //2舵機(jī)松開
while(pos3>0)
{dj3_ss() ;} //3舵機(jī)上
收藏