




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
對Arduino與MPU6050傳感器的探索和應(yīng)用物理學(xué)系胡耕源一、實驗設(shè)計初始方案MPU6050傳感器是一款六軸加速度傳感器。在設(shè)計實驗時,我希望通過該傳感器實現(xiàn)空間定位,從而描繪出運(yùn)行軌跡,打到姿態(tài)捕捉的效果。理論上,從加速度出發(fā),通過兩次積分即可得到空間坐標(biāo)。但是在實際操作中,兩次積分會帶來無法接受的巨大誤差,并且很難矯正,因此沒能成功。由于缺少解決實際問題的經(jīng)驗,該試驗方案設(shè)計存在問題,導(dǎo)致了實驗的失敗,但是在探索過程中,學(xué)到了豐富的硬件知識。2.最終方案原始方案的探索和失敗耗費(fèi)了大量的時間,但是我還是希望運(yùn)用之前學(xué)到的知識完成一個作品,因此設(shè)計了第二個方案。該方案仍使用MPU6050傳感器,利用其內(nèi)部微處理器輸出的dmp數(shù)據(jù),解算出傳感器的姿態(tài)角,實現(xiàn)一個可以通過姿態(tài)操縱鼠標(biāo)的手柄。圖1姿態(tài)控制手柄成品圖成果如上圖所示,利用面包板為主體,將MPU6050傳感器置于中央,左右各兩個控制按鈕°Arduino本身有鼠標(biāo)和鍵盤操控的內(nèi)置庫,可以直接模擬鍵鼠硬件指令。但是后來發(fā)現(xiàn)Uno并不支持,需要ArduinoLeonardo才可以使用相關(guān)庫函數(shù),因此,本項目中采用串口輸出控制命令,配合在計算機(jī)上運(yùn)行的python程序控制,其中python程序僅負(fù)責(zé)將串口接收到的指令翻譯為鼠標(biāo)控制命令。因此,如果有Leonardo,理論上該Arduino程序可以實現(xiàn)跨平臺的硬件操作,無需客戶端程序配合。在該項目中,實現(xiàn)的功能有:跟其傾斜狀態(tài)自動控制鼠標(biāo)的移動方向及速度(傾角越大移動越快)按鈕控制左鍵及右鍵點擊支持按下拖動操作按鈕控制移動速度擋位二、實驗記錄.初識MPU6050傳感器MPU6050-GY251傳感器通過IIC協(xié)議與Arduino通信,可以以圖2方式連接。圖2MPU6050傳感器與ArduinoUno的接線圖其中SDA與SCL線負(fù)責(zé)IIC通信,VCC與GND分別接電源正負(fù)極,INT接Arduino的外部中斷口,在Uno上是數(shù)字2接口。訪問該傳感器的內(nèi)部數(shù)據(jù)可以通過“MPU6050”庫得到,或者可以根據(jù)該傳感器的寄存器地圖1直接通過內(nèi)置的Wire庫訪問指定地址,事實上“MPU6050”庫也就是封裝了對這些寄存器的訪問。但是寄存器中保存的是16bit的原始數(shù)據(jù),要后續(xù)處理才能得到我們感性其的物理量,.MPU6050的數(shù)據(jù)處理MPU6050的加速度和空間角加速度原始數(shù)據(jù)以16位有符號整數(shù)的形式保存,分別有2/4/8/16g和250/500/1000/2000°/s四個量程。以加速度為例,若想要讀取;|■則計算公式為:<,.=(寄存器讀數(shù))/3府施 (1.1)在原始方案中,使用的是2g的量程,用該方法讀取出的數(shù)據(jù)會有±0.05g左右的噪音,并且在運(yùn)動過程中會隨時間產(chǎn)生小幅度的漂移.濾波算法與漂移消除對于數(shù)據(jù)噪音的問題,可以通過濾波算法處理。初始項目中,使用了卡爾曼濾波。對濾波算法的解釋和介紹見展示ppt,具體代碼見附件中””的相關(guān)代碼段落。而漂移消除,可以通過周期性靜止調(diào)零解決。4.姿態(tài)解算雖然從加速度和角加速度數(shù)據(jù),無法通過兩次積分(用離散求和近似)得到空間定位,會在積分中將誤差放大到不可接受的程度,但是可以在重力的輔助下,得到比較精確的姿態(tài)數(shù)據(jù),即傳感器的朝向。與物理問題中常用的歐拉角不同,工程實踐中使用較多的是YPR角,如上圖所示。在地面環(huán)境中,由于存在重力,根據(jù)加速度數(shù)據(jù)我們可以定位出數(shù)值向下的方向,從而可以完全確定上圖中的Pitch角和Roll角。但是對于Yaw角,我們不能唯一確定,在項目中總是將其初始化為零,再根據(jù)陀螺儀數(shù)據(jù)確定角度。在1寄存器地址的電子版可以在廠商官網(wǎng)找到。實驗設(shè)計的最終萬案中,使用的也是YPR角來控制鼠標(biāo)移動萬向圖3YPR角示意圖網(wǎng)上有很多關(guān)于使用原始數(shù)據(jù)進(jìn)行姿態(tài)解算的文章2,但事實上我們并不需要自己進(jìn)行計算。根據(jù)官網(wǎng)上對該傳感器的介紹,該傳感器自帶了進(jìn)行DMP姿態(tài)解算的微處理器,可以直接輸出傳感器的姿態(tài)數(shù)據(jù),并且已經(jīng)進(jìn)行了良好的濾波。我們要做的知識將DMP數(shù)據(jù)轉(zhuǎn)化為需要的角坐標(biāo),如丫PR角或者歐拉角。在“MPU6050”庫中,就有調(diào)用DMP數(shù)據(jù)輸出角坐標(biāo)的例程,項目的最終方案中就使用了相關(guān)代碼。5.Aduino中斷在最終方案中對于多個按鈕控制對應(yīng)不同操作狀態(tài)的處理,嘗試了兩個方案,第一^方案是通過Arduino的中斷功能實現(xiàn)可以參考,寫得較為詳盡4相關(guān)理論介紹參見圖4也引用自該網(wǎng)頁。可以參考,寫得較為詳盡4相關(guān)理論介紹參見圖4也引用自該網(wǎng)頁。型號int.Oint.1int.2int,3int.4int,5UNO\Ethernet23Mega25602321201918Leonardo3201Due 所有IO口均可表1Arduino硬件的中斷引腳但是該方案有兩個很大的缺點:ArduinoUno只有兩個外部中斷引腳(如表一所示),其他引腳均無法注冊外部中斷,而本方案中需要用到四個按鈕。當(dāng)程序在處理上一個中斷時,無法對新的中斷觸發(fā)進(jìn)行響應(yīng)。因此,當(dāng)有多個按鈕同時被按下,或者短時間內(nèi)重復(fù)觸發(fā)按鍵時,程序無法正確完整地捕捉指令,雙擊或組合鍵操作都會受此影響無法實現(xiàn)。對于第一個問題,有較好的解決方案:在其他數(shù)字引腳上軟件模擬外部中斷,即偵聽這些引腳并捕捉電平變化。庫"PinChangeInt-master”已經(jīng)實現(xiàn)了這一功能,該庫可以在網(wǎng)上找到,庫文件見附件。該庫提供了除內(nèi)部終端引腳外的引腳設(shè)置中斷的方法,并以與內(nèi)置中斷函數(shù)相同的語法封裝。對于第二個問題,沒有較好的解決方案,因此若需要實現(xiàn)組合鍵的功能,需考慮其他思路。本實驗中,最終采取了有限狀態(tài)機(jī)的方法。6.有限狀態(tài)機(jī)有限狀態(tài)機(jī)是一種計算機(jī)模型,描述了一系列的狀態(tài)序列以及它們對外來信號的響應(yīng)。根據(jù)外來信號的不同,程序在不同狀態(tài)之間切換。圖4是一個典型的有限狀態(tài)機(jī)模型,其中大寫英文字母表示不同的信號,狀態(tài)1為初始狀態(tài),狀態(tài)6為終止?fàn)顟B(tài)。4B10NB10N圖4有限狀態(tài)機(jī)示意圖該模型與實驗設(shè)計的最終方案非常契合。在Arduino的loop段落中,僅需根據(jù)各按鈕對應(yīng)引腳的電平高低,即可確定所處狀態(tài),輸出正確的操作指令。7.按鍵抖動與上拉電阻當(dāng)按鈕按動時,由于其機(jī)械結(jié)構(gòu)的原因,會產(chǎn)生按鍵抖動,即短時間內(nèi)電平發(fā)生多次高低波動。而Arduino循環(huán)偵測的頻率很高,這樣的抖動會被捕捉到,從而產(chǎn)生干擾信號。通過上拉電阻可以消除這樣的抖動。在本實驗中,每個按鈕的負(fù)極均接有一枚200Q的色環(huán)電阻。8.串口緩沖區(qū)(buffer)實驗方案中提到,由于Uno硬件缺乏Leonardo才有的發(fā)送鍵鼠硬件指令的能力,在實踐中,采用了串口發(fā)送指令,電腦接受指令并用python操控鼠標(biāo)的方式實現(xiàn)功能。但是實際操作中,這一妥協(xié)方案也有其固有缺陷。在串口通訊中,Arduino硬件傳輸?shù)臄?shù)據(jù)并不直接被電腦上運(yùn)行的程序接收,而是被操作系統(tǒng)接收并儲存到一個緩沖區(qū)內(nèi),形成一個先進(jìn)先出(FIFO)數(shù)據(jù)的數(shù)據(jù)隊列。在通常情況下,這并不構(gòu)成問題,但是由于操縱鼠標(biāo)對數(shù)據(jù)的實時性有要求,如果硬件發(fā)送的指令不能得到及時處理,就會產(chǎn)生很大的操作延時,因為python總會先讀取之前發(fā)送的命令,而無法獲取最新的指令。在實踐中發(fā)現(xiàn),由于Arduino發(fā)送命令的速度非常快(每次循環(huán)都根據(jù)當(dāng)前按鍵狀態(tài)和傳感器姿態(tài)輸出一個指令),而python程序循環(huán)的效率很低,會出現(xiàn)Arduino—秒內(nèi)的指令,python要10秒才能處理完的情況。對此有兩個解決方案。在python讀取指令前,清空緩存區(qū),并讀取到來的下一個指令在Arduino循環(huán)中加入延遲,減小發(fā)出指令的頻率兩個方案各有優(yōu)劣。第一個方案能夠保證python程序以最快速度處理指令,并不會有任何操作延遲。但是在一些情況下會漏掉按鍵點擊的指令(按鈕按下立刻松開)第二個方案會進(jìn)一步降低指令的密度,使鼠標(biāo)移動不連貫。作為沒有Leonardo的妥協(xié)方案,在最終的作品中選擇了第二個,保證了功能的完整性。三、實驗分析1.項目選擇進(jìn)行本次實驗時,在項目選擇上出現(xiàn)了很大失誤。一開始不想僅僅參照別人成功的項目方案按部就班地復(fù)現(xiàn),而是考慮從硬件出發(fā)設(shè)計原創(chuàng)的項目。但是對于新手而言,由于對硬件的認(rèn)知非常淺薄,對于實際項目中會遇到的工程問題沒有很好的估計,因此對于設(shè)計出的項目的可行性會出現(xiàn)誤判,例如實驗設(shè)計的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年三勒漿抗疲勞液項目投資價值分析報告
- 2025至2030年ALPS可調(diào)電阻項目投資價值分析報告
- 長期護(hù)理工作經(jīng)驗分享
- 2025年皮革紙品證件本冊項目可行性研究報告
- 2025年潤滑脂低溫轉(zhuǎn)矩測定儀項目可行性研究報告
- 公共領(lǐng)域車輛電動化先行區(qū)試點方案發(fā)布
- 如何做好中層領(lǐng)導(dǎo)的主管
- 2025年地塞米松環(huán)氧水解物項目可行性研究報告
- 25年公司、項目部、各個班組安全培訓(xùn)考試試題含答案【鞏固】
- 2025年車間安全培訓(xùn)考試試題答案典型題
- 2025年03月黑龍江綏化市市委書記進(jìn)校園引才活動公開招聘1167人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 施工合同中約定的安全防護(hù)、文明施工措施費(fèi)用支付計劃
- 太原市2025年高三年級模擬考試語文試題及答案
- 青島版(2017)小學(xué)四年級科學(xué)下冊4.14《不同環(huán)境中的植物》課件
- 直擊重點的2024年ESG考試試題與答案
- 2025年審計監(jiān)察面試題及答案
- 2025年河南應(yīng)用技術(shù)職業(yè)學(xué)院單招職業(yè)技能測試題庫完美版
- nginx面試題及答案100道
- 綜合與實踐+白晝時長規(guī)律的探究教案+2024-2025學(xué)年人教版數(shù)學(xué)七年級下冊
- 非營利組織離任審計報告范文
- 家電行業(yè)品質(zhì)部門的質(zhì)量提升職責(zé)
評論
0/150
提交評論