注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!
GY-87 IMUモジュール
GY-87モジュールは、MPU6050、QMC5883L、BMP180の3つのセンサーチップが装備されており、それぞれ独自の機能を提供します。MPU6050はジャイロスコープと加速度計を組み合わせて運動追跡を行い、QMC5883Lは方向感知用の磁力計として機能し、BMP180は気圧と温度を測定するために使用されます。これらはI2Cプロトコルを使用してArduinoと効果的に通信することができます。
これらのセンサーは、I2Cプロトコルを介してシームレスに統合されており、Arduinoのようなプラットフォームとの効率的な通信を確保しています。GY-87モジュールの各センサーは、固有のI2Cアドレスを通じてアクセスできます:MPU6050は0x68、QMC5883Lは0x0D、BMP180は0x77でアクセスします。
各センサーチップの個別チュートリアル:
これらの3つのチップを同時に使用したい場合は、以下の簡単な例があります:
注釈
ファイル
09-gy87.inoを直接elite-explorer-kit-main\basic_project\09-gy87のパスから開くことができます。または、このコードをArduino IDEにコピーしてください。
注釈
ライブラリをインストールするには、Arduinoライブラリマネージャーを使用してください。
1/*
2 This Arduino code is designed to work with the GY-87 IMU (Inertial Measurement Unit) module,
3 which is a multi-sensor module containing three individual sensors: MPU6050 (Accelerometer and Gyroscope),
4 QMC5883L Magnetometer, and BMP180 (Barometric Pressure and Temperature). The code initializes these
5 sensors and continuously prints their readings to the Serial Monitor.
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 https://github.com/mprograms/QMC5883LCompass (QMC5883LCompass by MPrograms)
11 https://github.com/adafruit/Adafruit-BMP085-Library (Adafruit BMP085 Library by Adafruit)
12*/
13
14// Include required libraries
15#include <Adafruit_MPU6050.h>
16#include <Adafruit_Sensor.h>
17#include <Wire.h>
18#include <Adafruit_BMP085.h>
19#include <QMC5883LCompass.h>
20
21// Initialize sensor objects
22Adafruit_MPU6050 mpu;
23Adafruit_BMP085 bmp;
24QMC5883LCompass compass;
25
26void setup() {
27 // Initialize the serial communication with a baud rate of 9600
28 Serial.begin(9600);
29
30 // Initialize the MPU6050 sensor (accelerometer and gyroscope)
31 initializeMPU6050();
32
33 // Enable I2C bypass on MPU6050 to directly access the QMC5883L magnetometer
34 mpu.setI2CBypass(true);
35
36 // Initialize the QMC5883L magnetometer sensor
37 initializeQMC5883L();
38
39 // Initialize BMP180 barometric sensor
40 initializeBMP180();
41}
42
43
44void loop() {
45 // Print MPU6050 data
46 printMPU6050();
47
48 // Print QMC5883L data
49 printQMC5883L();
50
51 // Print BMP180 data
52 printBMP180();
53
54 delay(500);
55}
56
57void initializeQMC5883L() {
58
59 compass.init();
60
61 // You should replace the code below according to your calibration results
62 compass.setCalibrationOffsets(-458.00, -310.00, -362.00);
63 compass.setCalibrationScales(0.79, 0.79, 2.19);
64
65}
66
67void printQMC5883L() {
68
69 Serial.println();
70 Serial.println("QMC5883L ------------");
71
72 int x, y, z, a;
73 char myArray[3];
74
75 compass.read();
76
77 x = compass.getX();
78 y = compass.getY();
79 z = compass.getZ();
80
81 a = compass.getAzimuth();
82
83 compass.getDirection(myArray, a);
84
85 Serial.print("X: ");
86 Serial.print(x);
87
88 Serial.print(" Y: ");
89 Serial.print(y);
90
91 Serial.print(" Z: ");
92 Serial.print(z);
93
94 Serial.print(" Azimuth: ");
95 Serial.print(a);
96
97 Serial.print(" Direction: ");
98 Serial.print(myArray[0]);
99 Serial.print(myArray[1]);
100 Serial.println(myArray[2]);
101
102 Serial.println("QMC5883L ------------");
103 Serial.println();
104}
105
106
107void initializeMPU6050() {
108 // Check if the MPU6050 sensor is detected
109 if (!mpu.begin()) {
110 Serial.println("Failed to find MPU6050 chip");
111 while (1)
112 ; // Halt if sensor not found
113 }
114 Serial.println("MPU6050 Found!");
115
116 // set accelerometer range to +-8G
117 mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
118
119 // set gyro range to +- 500 deg/s
120 mpu.setGyroRange(MPU6050_RANGE_500_DEG);
121
122 // set filter bandwidth to 21 Hz
123 mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
124
125 Serial.println("");
126 delay(100);
127}
128
129void printMPU6050() {
130
131 Serial.println();
132 Serial.println("MPU6050 ------------");
133
134 /* Get new sensor events with the readings */
135 sensors_event_t a, g, temp;
136 mpu.getEvent(&a, &g, &temp);
137
138 /* Print out the values */
139 Serial.print("Acceleration X: ");
140 Serial.print(a.acceleration.x);
141 Serial.print(", Y: ");
142 Serial.print(a.acceleration.y);
143 Serial.print(", Z: ");
144 Serial.print(a.acceleration.z);
145 Serial.println(" m/s^2");
146
147 Serial.print("Rotation X: ");
148 Serial.print(g.gyro.x);
149 Serial.print(", Y: ");
150 Serial.print(g.gyro.y);
151 Serial.print(", Z: ");
152 Serial.print(g.gyro.z);
153 Serial.println(" rad/s");
154
155 Serial.print("Temperature: ");
156 Serial.print(temp.temperature);
157 Serial.println(" degC");
158
159 Serial.println("MPU6050 ------------");
160 Serial.println();
161}
162
163void initializeBMP180() {
164 // Start BMP180 initialization
165 if (!bmp.begin()) {
166 Serial.println("Could not find a valid BMP180 sensor, check wiring!");
167 while (1)
168 ; // Halt if sensor not found
169 }
170 Serial.println("BMP180 Found!");
171}
172
173void printBMP180() {
174 Serial.println();
175 Serial.println("BMP180 ------------");
176 Serial.print("Temperature = ");
177 Serial.print(bmp.readTemperature());
178 Serial.println(" *C");
179
180 Serial.print("Pressure = ");
181 Serial.print(bmp.readPressure());
182 Serial.println(" Pa");
183
184 // Calculate altitude assuming 'standard' barometric
185 // pressure of 1013.25 millibar = 101325 Pascal
186 Serial.print("Altitude = ");
187 Serial.print(bmp.readAltitude());
188 Serial.println(" meters");
189
190 Serial.print("Pressure at sealevel (calculated) = ");
191 Serial.print(bmp.readSealevelPressure());
192 Serial.println(" Pa");
193 Serial.println("BMP180 ------------");
194 Serial.println();
195}
注釈
磁力計は使用前にキャリブレーション(QMC5883Lの校正)が必要であり、使用時に水平に保持し、 鉄製品、磁化された材料、電流を運ぶワイヤーから離しておく 必要があります。
コードがArduino Uno R4に正常にアップロードされると、シリアルモニターが活動し始め、GY-87 IMUモジュールからのセンサーデータが連続して表示されます。このモジュールには、加速度計とジャイロスコープの読み取りを行うMPU6050、磁力計の読み取りを行うQMC5883L、気圧と温度の読み取りを行うBMP180の3つの個別のセンサーが組み込まれています。