MPU6050:用於Arduino定位的模塊

MPU6050板

如果您需要創建一個項目並將其定位,那就知道 如何放置 關於空間,您可以使用模塊 主控板6050。 即,該模塊是具有6個自由度(DoF)的慣性測量單元或IMU(慣性測量單元)。 這要歸功於3軸加速度傳感器和3軸陀螺儀。

該MPU6050可以知道包含對象的放置位置,以用於 應用 導航,測角,穩定,手勢控制等。 移動電話通常包括這種類型的傳感器,例如,通過手勢控制某些功能,例如,如果智能手機被翻轉,則停止操作;通過將移動設備當作方向盤旋轉來在視頻遊戲中駕駛車輛等。

什麼是加速度計和陀螺儀?

MEMS實例

MEMS實例

好吧,讓我們分部分進行。 首先是要了解這些類型的傳感器是什麼 能夠檢測加速度和轉彎,可以從自己的名字推導出來。

  • 加速度計:測量加速度,即單位時間的速度變化。 請記住,在物理學中,速度隨時間的變化(a = dV / dt)是加速度的定義。 根據牛頓第二定律,我們還有a = F / m,這就是加速度計用來工作的原理,也就是說,它們使用物體的力和質量參數。 為了能夠在電子學中實現,使用了MEMS(微電子機械系統)技術,該技術不同於傳統的電子芯片製造技術,因為機械零件是在MEMS中產生的。 在這種情況下,將創建能夠測量加速度的軌道或元素。 這意味著可以採用許多其他單位,例如速度(如果加速度在時間上積分),如果再次積分,我們有位移等。 也就是說,非常有趣的參數可以知道對象的位置或檢測對象的運動。
  • 陀螺儀:又稱陀螺儀,它是一種測量物體角速度的設備,即單位時間的角位移或物體繞其軸旋轉的速度。 在這種情況下,MEMS技術還可以利用一種稱為科里奧利(Coriolis)的效應來測量該速度。 因此,可以測量角速度,或者通過將角速度相對於時間進行積分,可以獲得角位移。

MPU6050模塊

MPU6050引腳排列

現在您知道了加速度計和陀螺儀是什麼, MPU6050模塊 是一種集成了這兩個元素的電子板,可讓您測量元素位置的這些變化,從而能夠產生反應。 例如,當物體移動時,LED會亮起,或者其他更複雜的事情。

就像我說的,它有6個自由軸,自由度, 3軸X,Y和Z加速度傳感器以及其他3軸陀螺儀 測量角速度。 您必須考慮不要在放置模塊的方式和測量的旋轉方向上犯錯誤,因為如果輸入錯誤的符號會有些混亂。 查看下圖,該圖指定了軸的方向(但是,請注意,PCB本身也在一側上進行了打印):

數據表MPU6050

考慮到這一點, 引腳排列,或多或少,您都清楚可以開始使用MPU6050。 如上圖所示,連接非常簡單,它允許I2C通信與大多數微控制器(包括Arduino)兼容。 SCL和SDA引腳在板上有一個上拉電阻,可直接連接到Arduino板,因此您不必擔心自己添加它們。

要在I2C總線上同時使用兩個方向,您可以使用這些 針腳和方向:

  • AD0 = 1或高電平(5v):適用於I0C地址69x2。
  • AD0 = 0或低(GND或Nc):用於I0C總線的地址68x2。

請記住,該模型的工作電壓為3v3,但幸運的是,它具有內置穩壓器,因此可以毫無問題地將其與Arduino的5v兼容,並將其轉換為3.3v。

順便說一下,如果內部引腳連接到GND,如果未連接此引腳,則地址為 默認情況下它將是0x68,因為默認情況下它將接地,因此將其解釋為邏輯0。

與Arduino集成

Arduino和MPU6050連接

你可以得到 有關I2C總線的更多信息 在本文中。 您已經知道,根據Arduino開發板,用於總線的引腳會有所不同,但是在 Arduino UNO 是模擬引腳 A4和A5,用於SDA(數據)和SCL(時鐘) 分別。 它們是唯一的Arduino引腳,以及應為板供電的5v和GND引腳。 因此,連接盡可能簡單。

對於MPU6050的功能,您可以使用其鏈接庫中的庫,您可以在該鏈接中獲取更多信息。 I2C 模塊的和總線的 主控板6050.

MPU6050的Arduino板編程不是太簡單,因此不適合初學者。 此外,了解加速度的極限或角度範圍後,您可以進行校準以確定確切的運動或加速度。 但是,為了至少可以有一個示例說明如何使用它,您可以從 Arduino IDE的示例草圖 它將讀取加速度計和陀螺儀記錄的值:

// Bibliotecas necesarias:
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

// Dependiendo del estado de AD0, la dirección puede ser 0x68 o 0x69, para controlar así el esclavo que leerá por el bus I2C
MPU6050 sensor;

// Valores RAW o en crudo leidos del acelerometro y giroscopio en los ejes x,y,z
int ax, ay, az;
int gx, gy, gz;

void setup() {
  Serial.begin(57600);    //Función para iniciar el puerto serie con 57600 baudios
  Wire.begin();           //Inicio para el bus I2C 
  sensor.initialize();    //Iniciando del sensor MPU6050

  if (sensor.testConnection()) Serial.println("Sensor iniciado correctamente");
  else Serial.println("Error al iniciar el sensor");
}

void loop() {
  // Leer las aceleraciones y velocidades angulares
  sensor.getAcceleration(&ax, &ay, &az);
  sensor.getRotation(&gx, &gy, &gz);

  // Muestra las lecturas que va registrando separadas por una tabulación 
  Serial.print("a[x y z] g[x y z]:\t");
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t");
  Serial.print(gy); Serial.print("\t");
  Serial.println(gz);

  delay(100);
}

如果您是初學者而又不太了解 如何使用Arduino IDE進行編程這對您來說很難理解,因此您可以免費查閱Arduino編程入門課程的手冊...


成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。