注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

MPU6050

概要

このチュートリアルでは、GY-87 IMUモジュールをArduino Unoと接続し、MPU6050センサーに焦点を当てて学びます。MPU6050の初期化と、加速度計、ジャイロスコープ、温度データをシリアルモニターに表示する方法をカバーします。このレッスンは、ロボティクス、ジェスチャー制御デバイス、インタラクティブなアートインスタレーションなど、運動と温度センシングが必要なプロジェクトに不可欠です。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

キットを丸ごと購入すると便利です。リンクはこちらです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

また、以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ジャンパーワイヤー

購入

GY-87 IMUモジュール

-

配線図

../_images/09-gy87_bb1.png

回路図

../_images/09_basic_gy87_schematic.png

コード

注釈

  • ファイル 09-gy87_mpu6050.ino を直接 elite-explorer-kit-main\basic_project\09-gy87_mpu6050 のパスから開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

注釈

ライブラリをインストールするには、Arduino Library Managerを使用し、 「Adafruit MPU6050」 を検索してインストールしてください。

09-gy87_mpu6050.ino
 1/*
 2  This Arduino code is designed for interfacing with the GY-87 IMU module, focusing 
 3  specifically on the MPU6050 sensor, which includes an accelerometer and a gyroscope. 
 4  The code initializes the MPU6050 sensor and prints its accelerometer, gyroscope, and 
 5  temperature readings to the Serial Monitor at regular intervals.
 6  
 7  Board: Arduino Uno R4
 8  Component: GY-87 IMU Module
 9  Library: https://github.com/adafruit/Adafruit_MPU6050  (Adafruit MPU6050 by Adafruit)
10*/
11
12// Include required libraries
13#include <Adafruit_MPU6050.h>
14#include <Adafruit_Sensor.h>
15#include <Wire.h>
16
17// Initialize sensor objects
18Adafruit_MPU6050 mpu;
19
20void setup() {
21  // Initialize the serial communication with a baud rate of 9600
22  Serial.begin(9600);
23
24  // Initialize the MPU6050 sensor (accelerometer and gyroscope)
25  initializeMPU6050();
26}
27
28void loop() {
29  // Print MPU6050 data
30  printMPU6050();
31
32  delay(500);
33}
34
35
36void initializeMPU6050() {
37  // Check if the MPU6050 sensor is detected
38  if (!mpu.begin()) {
39    Serial.println("Failed to find MPU6050 chip");
40    while (1)
41      ;  // Halt if sensor not found
42  }
43  Serial.println("MPU6050 Found!");
44
45  // set accelerometer range to +-8G
46  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
47
48  // set gyro range to +- 500 deg/s
49  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
50
51  // set filter bandwidth to 21 Hz
52  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
53
54  Serial.println("");
55  delay(100);
56}
57
58void printMPU6050() {
59
60  Serial.println();
61  Serial.println("MPU6050 ------------");
62
63  /* Get new sensor events with the readings */
64  sensors_event_t a, g, temp;
65  mpu.getEvent(&a, &g, &temp);
66
67  /* Print out the values */
68  Serial.print("Acceleration X: ");
69  Serial.print(a.acceleration.x);
70  Serial.print(", Y: ");
71  Serial.print(a.acceleration.y);
72  Serial.print(", Z: ");
73  Serial.print(a.acceleration.z);
74  Serial.println(" m/s^2");
75
76  Serial.print("Rotation X: ");
77  Serial.print(g.gyro.x);
78  Serial.print(", Y: ");
79  Serial.print(g.gyro.y);
80  Serial.print(", Z: ");
81  Serial.print(g.gyro.z);
82  Serial.println(" rad/s");
83
84  Serial.print("Temperature: ");
85  Serial.print(temp.temperature);
86  Serial.println(" degC");
87
88  Serial.println("MPU6050 ------------");
89  Serial.println();
90}

コード解析

  1. ライブラリのインクルード

    センサーのインターフェースと通信のために、 Adafruit_MPU6050 , Adafruit_Sensor , Wire ライブラリが含まれています。

    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    
  2. センサーオブジェクトの初期化

    Adafruit_MPU6050 クラスのオブジェクトを作成し、MPU6050 センサーを表します。

    Adafruit_MPU6050 mpu;
    
  3. セットアップ関数

    シリアル通信を初期化し、MPU6050 センサーを初期化する関数を呼び出します。

    void setup() {
      Serial.begin(9600);
      initializeMPU6050();
    }
    
  4. ループ関数

    MPU6050 のデータを表示する関数を繰り返し呼び出し、各呼び出しの間に 500 ミリ秒の遅延を入れます。

    void loop() {
      printMPU6050();
      delay(500);
    }
    
  5. MPU6050 の初期化関数

    MPU6050 が接続されているかを確認し、加速度計とジャイロの範囲を設定し、フィルタの帯域幅を設定します。

    void initializeMPU6050() {
      // Check if the MPU6050 sensor is detected
      if (!mpu.begin()) {
        Serial.println("Failed to find MPU6050 chip");
        while (1)
          ;  // Halt if sensor not found
      }
      Serial.println("MPU6050 Found!");
    
      // set accelerometer range to +-8G
      mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
    
      // set gyro range to +- 500 deg/s
      mpu.setGyroRange(MPU6050_RANGE_500_DEG);
    
      // set filter bandwidth to 21 Hz
      mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
    
      Serial.println("");
      delay(100);
    }
    
  6. MPU6050 データ表示関数

    MPU6050 から加速度、ジャイロスコープ、温度データを読み取り、シリアルモニターに表示します。

    void printMPU6050() {
    
      Serial.println();
      Serial.println("MPU6050 ------------");
    
      /* Get new sensor events with the readings */
      sensors_event_t a, g, temp;
      mpu.getEvent(&a, &g, &temp);
    
      /* Print out the values */
      Serial.print("Acceleration X: ");
      Serial.print(a.acceleration.x);
      Serial.print(", Y: ");
      Serial.print(a.acceleration.y);
      Serial.print(", Z: ");
      Serial.print(a.acceleration.z);
      Serial.println(" m/s^2");
    
      Serial.print("Rotation X: ");
      Serial.print(g.gyro.x);
      Serial.print(", Y: ");
      Serial.print(g.gyro.y);
      Serial.print(", Z: ");
      Serial.print(g.gyro.z);
      Serial.println(" rad/s");
    
      Serial.print("Temperature: ");
      Serial.print(temp.temperature);
      Serial.println(" degC");
    
      Serial.println("MPU6050 ------------");
      Serial.println();
    }