0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣將Arduino與MPU6050連接

454398 ? 來(lái)源:工程師吳畏 ? 2019-07-29 08:56 ? 次閱讀

在進(jìn)入項(xiàng)目之前,您需要了解MPU6050傳感器的一些基礎(chǔ)知識(shí)。 MPU-6050是一種IMU傳感器,在單個(gè)芯片上包含MEMS微機(jī)電系統(tǒng))加速度計(jì)和MEMS陀螺儀。

這里是IMU傳感器,其中IMU代表慣性測(cè)量單元,是一種利用加速度計(jì)測(cè)量比力的裝置,使用陀螺儀測(cè)量角速率和使用磁強(qiáng)計(jì)測(cè)量磁場(chǎng)。

IMU傳感器用于自平衡機(jī)器人,飛機(jī),手機(jī),平板電腦,航天器,衛(wèi)星,無(wú)人機(jī),無(wú)人機(jī)(無(wú)人駕駛飛行器)等用于引導(dǎo),位置檢測(cè),方向檢測(cè),運(yùn)動(dòng)跟蹤和飛行控制。

兩種常見(jiàn)的IMU是ADXL 335加速度計(jì)和MPU-6050。 ADXL 335包含一個(gè)3軸加速度計(jì)。

對(duì)于MPU-6050,它是一個(gè)六軸運(yùn)動(dòng)跟蹤設(shè)備,結(jié)合了3軸加速度計(jì)和3 -axis陀螺儀在一個(gè)芯片上。我們將在下一節(jié)中看到有關(guān)MPU6050的更多詳細(xì)信息。

簡(jiǎn)介到MPU6050傳感器

MPU-6050是由InvenSense開(kāi)發(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è)來(lái)自Accelerometer,三個(gè)來(lái)自Gyro)。 MPU-6050可以使用I2C協(xié)議進(jìn)行通信。

數(shù)字運(yùn)動(dòng)處理器或DMP是一種嵌入式處理器,可以減少來(lái)自主處理器的計(jì)算負(fù)載,如Arduino,從加速度計(jì),陀螺儀和外部磁力計(jì)獲取和處理數(shù)據(jù)。

將MPU6050與Arduino接口

如前所述,MPU6050僅支持I2C通信,因此必須僅連接到Arduino的I2C引腳。 Arduino的I2C引腳與模擬輸入引腳A4和A5復(fù)用,即A4為SDA,A5為SCL。

來(lái)到MPU6050,我們使用了一個(gè)提供8個(gè)引腳的普通分線板。上圖顯示了MPU6050分線板的原理圖。

在此,我們將使用SCL,SDA和INT引腳連接Arduino。

所需組件

硬件

Arduino UNO [在此處購(gòu)買]

MPU6050分組板[在此處購(gòu)買]

連接線[在此處購(gòu)買]

軟件

Arduino IDE

處理(用于3D可視化)

電路圖

下圖顯示了MPU6050與Arduino UNO接口的電路圖。如前所述,MPU6050和Arduino之間的接口必須使用I2C協(xié)議實(shí)現(xiàn)。

因此,Arduino(A5)的SCL引腳連接到MPU6050的SCL引腳。同樣,Arduino(A4)的SDA引腳連接到MPU6050板的SDA引腳。

此外,我們將使用MPU6050的中斷功能來(lái)指示當(dāng)1024字節(jié)FIFO緩沖區(qū)已滿時(shí)(或中斷)Arduino。因此,將MPU6050的INT引腳連接到Arduino UNO的外部中斷0(INT0)引腳,即引腳2.

注意:在I2C中通信時(shí),MPU-6050始終充當(dāng)從屬設(shè)備。

閱讀來(lái)自MPU6050的RAW值

在上傳實(shí)際程序之前,我們將首先看到一個(gè)簡(jiǎn)單的程序來(lái)讀取加速度計(jì),陀螺儀和溫度傳感器的原始值。只需將MPU6050的SCL和SDA線連接到Arduino(A4和A5)的相應(yīng)I2C引腳,然后上傳以下代碼即可。

如果打開(kāi)串行終端,您將獲得加速度計(jì)和陀螺儀的原始值以及溫度傳感器校準(zhǔn)的溫度。數(shù)據(jù)看起來(lái)像這樣。

如您所見(jiàn),閱讀原始數(shù)據(jù)來(lái)自MPU6050傳感器的數(shù)據(jù)很簡(jiǎn)單但是這些數(shù)據(jù)我們需要對(duì)這些數(shù)據(jù)進(jìn)行額外的計(jì)算才能得到偏航,俯仰和俯仰。

我已經(jīng)提到了MPU6050傳感器,有一個(gè)特殊的處理器,稱為DMP或數(shù)字運(yùn)動(dòng)處理器,與加速度計(jì)和陀螺儀嵌入在同一芯片上。此DMP的使用是可以使用固件對(duì)其進(jìn)行編程,以便對(duì)來(lái)自傳感器的數(shù)據(jù)執(zhí)行復(fù)雜的計(jì)算。

但是沒(méi)有關(guān)于InvenSense的DMP的明確文檔因此我們錯(cuò)過(guò)了直接在芯片上快速計(jì)算傳感器數(shù)據(jù)的方法。

Jeff Rowberg等人在DMP的逆向工程方面做得非常出色來(lái)自I2C信號(hào)分析的相關(guān)信息。

將代碼上傳到Arduino并測(cè)試MPU6050

在上傳代碼之前,我們需要為Arduino下載兩個(gè)庫(kù)。它們是I2Cdev和MPU6050。下載鏈接和官方GitHub鏈接如下所示。

I2Cdev:下載I2CDEV LIBRARY 或訪問(wèn)GitHub LINK

MPU6050:下載MPU6050 LIBRARY 或訪問(wèn)GitHub LINK

下載MPU6050庫(kù)并通過(guò)解壓縮下載的文件來(lái)提取內(nèi)容。您將獲得一個(gè)名為“MPU6050”的文件夾。復(fù)制此文件夾并將其粘貼到Arduino的libraries文件夾中。

在我的情況下,它位于“C: Program Files(x86) Arduino libraries”。對(duì)I2Cdev庫(kù)做同樣的事情。

如果一切順利,請(qǐng)打開(kāi)Arduino IDE并瀏覽以下路徑:文件 - 》示例 - 》 MPU6050 - 》示例 - 》 MPU6050_DMP6并打開(kāi)示例代碼MPU6050_DMP6。

將此代碼上傳到Arduino(假設(shè)您已根據(jù)電路圖建立了連接)并且代碼為上傳,打開(kāi)串口終端。

將串口終端的波特率設(shè)置為115200,您將得到以下文字。

“初始化DMP 。..

初始化I2C設(shè)備。..。..

測(cè)試設(shè)備連接。..

MPU6050連接成功

發(fā)送任何字符以開(kāi)始DMP編程和演示:“

如果您沒(méi)有獲得任何數(shù)據(jù)或仍然獲取垃圾數(shù)據(jù),只需重置Arduino。如果您查看最后一句,它會(huì)說(shuō)“發(fā)送任何字符以開(kāi)始DMP編程和演示”。因此,在串行監(jiān)視器中鍵入任何字符,如1或a,然后發(fā)送它。只要您按Enter鍵,就可以開(kāi)始在串行監(jiān)視器上看到Y(jié)aw,Pitch and Roll(ypr)值。

注意:在此期間,請(qǐng)將MPU6050放在穩(wěn)定的水平表面上。此外,等待MPU6050的值穩(wěn)定10秒鐘。

根據(jù)接口Arduino和MPU6050的值進(jìn)行處理中的3D建模

在項(xiàng)目的下一步中,我們將使用Processing IDE查看MPU6050傳感器的3D建模,您可以在其中查看傳感器數(shù)據(jù)的3D表示。 Processing是一種為電子藝術(shù)和視覺(jué)設(shè)計(jì)開(kāi)發(fā)的編程語(yǔ)言和IDE。實(shí)際上,Arduino IDE也基于Processing編程語(yǔ)言。

要下載Processing IDE,請(qǐng)?jiān)L問(wèn) LINK 。使用給定鏈接下載并安裝Processing IDE。

下載處理IDE并安裝后(只需從下載的zip文件中解壓縮內(nèi)容),您需要下載一個(gè)庫(kù)for Processing稱為“Toxi”。您可以從 LINK 下載Toxi庫(kù)。

我選擇了“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中打開(kāi)MPU6050_DMP6(我們之前上傳的示例程序)。向下滾動(dòng)到顯示以下內(nèi)容的行。

#define OUTPUT_READABLE_YAWPITCHROLL

通過(guò)在其前面添加雙正斜杠來(lái)注釋此行。

//#define OUTPUT_READABLE_YAWPITCHROLL

此外,找到//#define OUTPUT_TEAPOT 的行,并通過(guò)刪除雙正斜杠取消注釋。現(xiàn)在,您可以上傳代碼。我們?cè)诖a中修改的不是將數(shù)據(jù)發(fā)送到串行終端,而是將其轉(zhuǎn)發(fā)到處理IDE。

現(xiàn)在,打開(kāi)Processing IDE并單擊File - 》打開(kāi)?,F(xiàn)在,導(dǎo)航到為Arduino安裝MPU6050庫(kù)的文件夾。打開(kāi)名為“MPUTeapot”的Processing示例。

在我的示例中,此示例的位置為C: Program Files(x86) Arduino libraries MPU6050 Examples MPU6050_DMP6 Processing MPUTeapot。

此程序可自動(dòng)選擇Arduino所連接的PORT編號(hào)。與此相關(guān)的代碼中的行是

字符串portName = Serial.list()[0];

指定Arduino的PORT編號(hào)的另一種方法是手動(dòng)輸入COM端口號(hào)。為此,請(qǐng)注釋以上行并取消注釋以下行,并將COM端口號(hào)替換為Arduino所連接的相應(yīng)COM端口號(hào)。

//String portName =“COM4”;

在點(diǎn)擊Processing中的運(yùn)行按鈕之前,請(qǐng)確保Arduino IDE的串行監(jiān)視器是關(guān)閉?,F(xiàn)在,單擊處理IDE中的運(yùn)行按鈕。您將獲得一個(gè)具有類似結(jié)構(gòu)的平面的窗口。在對(duì)MPU6050進(jìn)行3D建模之前等待10秒。

通過(guò)屏幕上的3D對(duì)象可以看到MPU6050的移動(dòng)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185926
  • MPU6050
    +關(guān)注

    關(guān)注

    38

    文章

    307

    瀏覽量

    70653
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    硬件i2c讀寫MPU6050

    本資料為MPU6050
    發(fā)表于 07-15 11:45 ?2次下載

    mpu6050芯片的INT中斷信號(hào)引腳和單片機(jī)之間需要接電阻嗎?

    mpu6050芯片的INT中斷信號(hào)引腳和單片機(jī)之間需要接電阻嗎? 我見(jiàn)有的電路圖里面沒(méi)有,有的卻說(shuō)需要,到底是怎樣的?
    發(fā)表于 05-07 07:21

    MPU6050休眠后如何配置重力加速度喚醒MPU6050?

    MPU6050休眠后如何配置重力加速度喚醒MPU6050自己?
    發(fā)表于 05-07 06:19

    ADXL345和MPU6050的區(qū)別

    ADXL345和MPU6050是兩種常見(jiàn)的加速度計(jì)和陀螺儀傳感器,用于測(cè)量物體的加速度和旋轉(zhuǎn)速度。它們?cè)谠O(shè)計(jì)、性能和應(yīng)用方面有一些區(qū)別。在本文中,我們將對(duì)ADXL345和MPU6050的區(qū)別進(jìn)行詳細(xì)
    的頭像 發(fā)表于 01-04 11:30 ?5914次閱讀

    mpu6050mpu6500哪個(gè)性能好

    地說(shuō)出一個(gè)“更好”的性能。下面詳細(xì)介紹它們的特點(diǎn)和性能。 首先,我們來(lái)看一下MPU6050。MPU6050是早期InvenSense公司推出的一款六軸傳感器,它包含了三軸陀螺儀和三軸加速度計(jì)。陀螺儀用于測(cè)量角速度,加速度計(jì)用于
    的頭像 發(fā)表于 12-21 16:54 ?6524次閱讀

    MPU-6000和MPU-6050產(chǎn)品說(shuō)明書(shū)

    mpu6050模塊介紹?
    發(fā)表于 11-30 09:17 ?0次下載

    MPU6050數(shù)據(jù)偏差有點(diǎn)大,怎么消除?

    MPU6050出來(lái)的數(shù)據(jù)波動(dòng)很大,不知道怎么去處理?有沒(méi)有知道的麻煩請(qǐng)教一下
    發(fā)表于 11-09 07:33

    mpu6050無(wú)法獲取絕對(duì)角度嗎?

    之前用ADXL345是可以獲得相對(duì)于世界坐標(biāo)的絕對(duì)傾角角度但用MPU6050(原子的例程),似乎只能獲得相對(duì)于初始化時(shí)的角度。 也就是初始化時(shí)候如果不是水平,而是傾斜30度(比如拿俯仰角來(lái)說(shuō)),那么
    發(fā)表于 11-06 08:02

    MPU6050能用來(lái)測(cè)試速度嗎?

    MPU6050能用來(lái)測(cè)試速度么?
    發(fā)表于 10-25 08:15

    MPU6050的外部中斷引腳是如何觸發(fā)?

    想知道MPU6050的外部中斷引腳是如何觸發(fā),我看有的程序設(shè)置的是5ms一次中斷,找半天沒(méi)找到在哪里設(shè)置的。是在dmp里邊?
    發(fā)表于 10-23 07:01

    靈動(dòng)微MPU6050應(yīng)用源代碼

      MPU6050是一種常見(jiàn)的六軸加速度計(jì)陀螺儀傳感器,可以用于測(cè)量物體的加速度和角速度。該傳感器內(nèi)置了三軸加速度計(jì)和三軸陀螺儀,可以通過(guò)I2C接口與微控制器進(jìn)行通信。
    發(fā)表于 10-20 16:31 ?0次下載
    靈動(dòng)微<b class='flag-5'>MPU6050</b>應(yīng)用源代碼

    MCU\mpu6050 通信及電路原理圖

    SPI\IIC\RS485通信動(dòng)態(tài)圖展示,MCU\mpu6050 通信及電路原理圖
    發(fā)表于 10-17 16:36 ?5次下載

    mpu6050航向角偏移怎么解決?

    為什么mpu6050航向角會(huì)偏移,在四軸上怎么解決偏移問(wèn)題
    發(fā)表于 10-08 06:07

    請(qǐng)教關(guān)于一個(gè)MPU6050的問(wèn)題

    ,樹(shù)莓派也能正常工作,但發(fā)現(xiàn)這個(gè)6050時(shí)有時(shí)無(wú),程序讀也報(bào)錯(cuò),感覺(jué)像是在重啟: 一直查不出原因,后來(lái),把電源至了某寶上現(xiàn)成的DC-DC模塊 發(fā)現(xiàn),MPU6050工作一切正常。 于是懷疑到電源,用示波器
    發(fā)表于 10-04 21:09

    ArduinoMPU6050加速度計(jì)和陀螺儀教程

    自制云臺(tái)相機(jī)不一定要很笨重,試用MPU6050加速計(jì)、陀螺儀傳感器與Arduino就可以!同時(shí)解釋MPU6050的工作原理以及如何從中讀取數(shù)據(jù),然后我們將給出兩個(gè)實(shí)際例子。
    發(fā)表于 09-26 06:14