在進(jìn)入項(xiàng)目之前,您需要了解MPU6050傳感器的一些基礎(chǔ)知識。 MPU-6050是一種IMU傳感器,在單個(gè)芯片上包含MEMS(微機(jī)電系統(tǒng))加速度計(jì)和MEMS陀螺儀。
這里是IMU傳感器,其中IMU代表慣性測量單元,是一種利用加速度計(jì)測量比力的裝置,使用陀螺儀測量角速率和使用磁強(qiáng)計(jì)測量磁場。
IMU傳感器用于自平衡機(jī)器人,飛機(jī),手機(jī),平板電腦,航天器,衛(wèi)星,無人機(jī),無人機(jī)(無人駕駛飛行器)等用于引導(dǎo),位置檢測,方向檢測,運(yùn)動(dòng)跟蹤和飛行控制。
兩種常見的IMU是ADXL 335加速度計(jì)和MPU-6050。 ADXL 335包含一個(gè)3軸加速度計(jì)。
對于MPU-6050,它是一個(gè)六軸運(yùn)動(dòng)跟蹤設(shè)備,結(jié)合了3軸加速度計(jì)和3 -axis陀螺儀在一個(gè)芯片上。我們將在下一節(jié)中看到有關(guān)MPU6050的更多詳細(xì)信息。
簡介到MPU6050傳感器
MPU-6050是由InvenSense開發(fā)的六軸運(yùn)動(dòng)跟蹤設(shè)備。 MPU6050器件的主要特性如下所述。
三軸加速度計(jì)
三軸陀螺儀
數(shù)字輸出溫度傳感器
六個(gè)16位ADC(三個(gè)用于加速度計(jì),三個(gè)用于陀螺儀)
集成數(shù)字運(yùn)動(dòng)處理器(DMP)
1024B FIFO緩沖區(qū)
六軸MPU-6050被稱為6 DoF(六自由度)設(shè)備,因?yàn)樗峁┝鶄€(gè)輸出值(三個(gè)來自Accelerometer,三個(gè)來自Gyro)。 MPU-6050可以使用I2C協(xié)議進(jìn)行通信。
數(shù)字運(yùn)動(dòng)處理器或DMP是一種嵌入式處理器,可以減少來自主處理器的計(jì)算負(fù)載,如Arduino,從加速度計(jì),陀螺儀和外部磁力計(jì)獲取和處理數(shù)據(jù)。
將MPU6050與Arduino接口
如前所述,MPU6050僅支持I2C通信,因此必須僅連接到Arduino的I2C引腳。 Arduino的I2C引腳與模擬輸入引腳A4和A5復(fù)用,即A4為SDA,A5為SCL。
來到MPU6050,我們使用了一個(gè)提供8個(gè)引腳的普通分線板。上圖顯示了MPU6050分線板的原理圖。
在此,我們將使用SCL,SDA和INT引腳連接Arduino。
所需組件
硬件
Arduino UNO [在此處購買]
MPU6050分組板[在此處購買]
連接線[在此處購買]
軟件
Arduino IDE
處理(用于3D可視化)
電路圖
下圖顯示了MPU6050與Arduino UNO接口的電路圖。如前所述,MPU6050和Arduino之間的接口必須使用I2C協(xié)議實(shí)現(xiàn)。
因此,Arduino(A5)的SCL引腳連接到MPU6050的SCL引腳。同樣,Arduino(A4)的SDA引腳連接到MPU6050板的SDA引腳。
此外,我們將使用MPU6050的中斷功能來指示當(dāng)1024字節(jié)FIFO緩沖區(qū)已滿時(shí)(或中斷)Arduino。因此,將MPU6050的INT引腳連接到Arduino UNO的外部中斷0(INT0)引腳,即引腳2.
注意:在I2C中通信時(shí),MPU-6050始終充當(dāng)從屬設(shè)備。
閱讀來自MPU6050的RAW值
在上傳實(shí)際程序之前,我們將首先看到一個(gè)簡單的程序來讀取加速度計(jì),陀螺儀和溫度傳感器的原始值。只需將MPU6050的SCL和SDA線連接到Arduino(A4和A5)的相應(yīng)I2C引腳,然后上傳以下代碼即可。
如果打開串行終端,您將獲得加速度計(jì)和陀螺儀的原始值以及溫度傳感器校準(zhǔn)的溫度。數(shù)據(jù)看起來像這樣。
如您所見,閱讀原始數(shù)據(jù)來自MPU6050傳感器的數(shù)據(jù)很簡單但是這些數(shù)據(jù)我們需要對這些數(shù)據(jù)進(jìn)行額外的計(jì)算才能得到偏航,俯仰和俯仰。
我已經(jīng)提到了MPU6050傳感器,有一個(gè)特殊的處理器,稱為DMP或數(shù)字運(yùn)動(dòng)處理器,與加速度計(jì)和陀螺儀嵌入在同一芯片上。此DMP的使用是可以使用固件對其進(jìn)行編程,以便對來自傳感器的數(shù)據(jù)執(zhí)行復(fù)雜的計(jì)算。
但是沒有關(guān)于InvenSense的DMP的明確文檔因此我們錯(cuò)過了直接在芯片上快速計(jì)算傳感器數(shù)據(jù)的方法。
Jeff Rowberg等人在DMP的逆向工程方面做得非常出色來自I2C信號分析的相關(guān)信息。
將代碼上傳到Arduino并測試MPU6050
在上傳代碼之前,我們需要為Arduino下載兩個(gè)庫。它們是I2Cdev和MPU6050。下載鏈接和官方GitHub鏈接如下所示。
I2Cdev:下載I2CDEV LIBRARY 或訪問GitHub LINK
MPU6050:下載MPU6050 LIBRARY 或訪問GitHub LINK
下載MPU6050庫并通過解壓縮下載的文件來提取內(nèi)容。您將獲得一個(gè)名為“MPU6050”的文件夾。復(fù)制此文件夾并將其粘貼到Arduino的libraries文件夾中。
在我的情況下,它位于“C: Program Files(x86) Arduino libraries”。對I2Cdev庫做同樣的事情。
如果一切順利,請打開Arduino IDE并瀏覽以下路徑:文件 - 》示例 - 》 MPU6050 - 》示例 - 》 MPU6050_DMP6并打開示例代碼MPU6050_DMP6。
將此代碼上傳到Arduino(假設(shè)您已根據(jù)電路圖建立了連接)并且代碼為上傳,打開串口終端。
將串口終端的波特率設(shè)置為115200,您將得到以下文字。
“初始化DMP 。..
初始化I2C設(shè)備。..。..
測試設(shè)備連接。..
MPU6050連接成功
發(fā)送任何字符以開始DMP編程和演示:“
如果您沒有獲得任何數(shù)據(jù)或仍然獲取垃圾數(shù)據(jù),只需重置Arduino。如果您查看最后一句,它會(huì)說“發(fā)送任何字符以開始DMP編程和演示”。因此,在串行監(jiān)視器中鍵入任何字符,如1或a,然后發(fā)送它。只要您按Enter鍵,就可以開始在串行監(jiān)視器上看到Y(jié)aw,Pitch and Roll(ypr)值。
注意:在此期間,請將MPU6050放在穩(wěn)定的水平表面上。此外,等待MPU6050的值穩(wěn)定10秒鐘。
根據(jù)接口Arduino和MPU6050的值進(jìn)行處理中的3D建模
在項(xiàng)目的下一步中,我們將使用Processing IDE查看MPU6050傳感器的3D建模,您可以在其中查看傳感器數(shù)據(jù)的3D表示。 Processing是一種為電子藝術(shù)和視覺設(shè)計(jì)開發(fā)的編程語言和IDE。實(shí)際上,Arduino IDE也基于Processing編程語言。
要下載Processing IDE,請?jiān)L問 LINK 。使用給定鏈接下載并安裝Processing IDE。
下載處理IDE并安裝后(只需從下載的zip文件中解壓縮內(nèi)容),您需要下載一個(gè)庫for Processing稱為“Toxi”。您可以從 LINK 下載Toxi庫。
我選擇了“toxiclibs-complete-0020”文件。下載此文件后,將內(nèi)容解壓縮到名為“toxiclibs-complete-0020”的文件夾。
復(fù)制此文件夾并將其粘貼到Processing的libraries文件夾中。就我而言,它是“C: Users Ravi Documents Processing libraries”。
復(fù)制文件夾后,您就可以進(jìn)行3D建模了。首先,您需要上傳先前的Arduino代碼(MPU6050_DMP6),只需稍加修改。
在Arduino IDE中打開MPU6050_DMP6(我們之前上傳的示例程序)。向下滾動(dòng)到顯示以下內(nèi)容的行。
#define OUTPUT_READABLE_YAWPITCHROLL
通過在其前面添加雙正斜杠來注釋此行。
//#define OUTPUT_READABLE_YAWPITCHROLL
此外,找到//#define OUTPUT_TEAPOT 的行,并通過刪除雙正斜杠取消注釋?,F(xiàn)在,您可以上傳代碼。我們在代碼中修改的不是將數(shù)據(jù)發(fā)送到串行終端,而是將其轉(zhuǎn)發(fā)到處理IDE。
現(xiàn)在,打開Processing IDE并單擊File - 》打開?,F(xiàn)在,導(dǎo)航到為Arduino安裝MPU6050庫的文件夾。打開名為“MPUTeapot”的Processing示例。
在我的示例中,此示例的位置為C: Program Files(x86) Arduino libraries MPU6050 Examples MPU6050_DMP6 Processing MPUTeapot。
此程序可自動(dòng)選擇Arduino所連接的PORT編號。與此相關(guān)的代碼中的行是
字符串portName = Serial.list()[0];
指定Arduino的PORT編號的另一種方法是手動(dòng)輸入COM端口號。為此,請注釋以上行并取消注釋以下行,并將COM端口號替換為Arduino所連接的相應(yīng)COM端口號。
//String portName =“COM4”;
在點(diǎn)擊Processing中的運(yùn)行按鈕之前,請確保Arduino IDE的串行監(jiān)視器是關(guān)閉?,F(xiàn)在,單擊處理IDE中的運(yùn)行按鈕。您將獲得一個(gè)具有類似結(jié)構(gòu)的平面的窗口。在對MPU6050進(jìn)行3D建模之前等待10秒。
通過屏幕上的3D對象可以看到MPU6050的移動(dòng)。
-
Arduino
+關(guān)注
關(guān)注
188文章
6469瀏覽量
187054 -
MPU6050
+關(guān)注
關(guān)注
39文章
307瀏覽量
71403
發(fā)布評論請先 登錄
相關(guān)推薦
評論