Search Code

MPU-9250 가속도계, 자이로스코프 및 자력계 코드

MPU-9250 가속도계, 자이로스코프 및 자력계 코드

이 튜토리얼에서는 가속도계, 자이로스코프, 지자기 센서를 하나의 컴팩트한 모듈에 결합한 MPU-9250 센서를 사용하는 방법을 살펴보겠습니다. 이 가이드가 끝나면 센서 데이터를 읽고 프로젝트에서 그 의미를 해석할 수 있게 될 것입니다. 이 센서는 방향 및 모션 추적이 중요한 로봇 공학 및 드론과 같은 응용 분야에서 특히 유용합니다. 설정 및 코드에 대한 추가 설명은 비디오(00:20 지점)를 참조할 수 있습니다.

ELE_MPU6050_208
ELE_MPU6050_208

하드웨어 설명

MPU-9250 모듈은 가속도계, 자이로스코프, 지자기 센서의 세 가지 센서를 통합합니다. 가속도계는 가속력을 측정하여 속도와 방향을 결정할 수 있게 합니다. 자이로스코프는 각속도를 제공하여 시간에 따른 방향 변화를 이해하는 데 도움을 줍니다. 마지막으로 지자기 센서는 나침반 역할을 하여 자기장 데이터를 제공하며, 이는 내비게이션에 도움이 됩니다.

이러한 센서의 조합은 드론이나 스마트폰과 같이 정밀한 모션 추적이 필요한 응용 분야에서 특히 유용합니다. MPU-9250은 I2C 또는 SPI를 통해 통신하므로 다양한 마이크로컨트롤러 설정에 적합합니다.

데이터시트 세부 정보

제조업체 InvenSense
부품 번호 MPU-9250
로직/IO 전압 1.8V (I/O), 3.3V (공급)
공급 전압 2.4 - 3.6V
출력 전류 (채널당) 3.2mA (정상 작동)
피크 전류 (채널당) 19.8mA (최대)
PWM 주파수 가이드 해당 없음
입력 로직 임계값 0.3 * VDD (낮음), 0.7 * VDD (높음)
전압 강하 / RDS(on) / 포화 해당 없음
열 제한 -40 ~ 85 °C
패키지 QFN
참고 사항 / 변형 내부 전압 레귤레이터 포함
  • 모듈 손상을 방지하려면 적절한 전압 공급(2.4 - 3.6V)을 확인하세요.
  • 브레이크아웃 보드에 이미 포함되어 있지 않다면 SDA 및 SCL 라인에 풀업 저항을 사용하세요.
  • I2C 주소(기본값은 0x68)를 확인하고 대체 주소를 위해 ADO 핀을 적절히 조정하세요.
  • 오류 판독을 방지하기 위해 연결 상태를 확인하세요.
  • 정확한 측정을 위해 센서를 정기적으로 보정하세요.

배선 지침

SDA 및 SCL에 A4와 A4를 사용하는 MPU6050용 Arduino 배선
SDA 및 SCL에 A4와 A4를 사용하는 MPU6050용 Arduino 배선
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL

MPU-9250을 Arduino에 배선하려면 먼저 MPU-9250의 VCC 핀을 Arduino의 5V 핀에 연결하세요. 모듈에는 내부 레귤레이터가 있으므로 5V로 전원을 공급해도 안전합니다. 다음으로 GND 핀을 Arduino의 접지(GND)에 연결하세요. 데이터 통신을 위해 SDA 핀을 Arduino의 A4 핀에 연결하고 SCL 핀을 A5 핀에 연결하세요. 이 구성은 많은 Arduino 보드에서 표준입니다.

Arduino Mega를 사용하는 경우 SDA 및 SCL 핀은 각각 20번 및 21번 핀에 있습니다. 통신 오류를 방지하려면 연결이 안전한지 확인하세요. MPU-9250의 I2C 주소를 변경해야 하는 경우 ADO 핀을 5V에 연결하여 0x69로 설정하세요. 연결을 끊으면 0x68로 되돌아갑니다.

SDA 및 SCL에 A4와 A4를 사용하는 MPU6050용 Arduino 회로도
SDA 및 SCL에 A4와 A4를 사용하는 MPU6050용 Arduino 회로도

코드 예제 및 설명

Arduino 스케치에서 MPU9250 라이브러리를 포함하고 센서 인스턴스를 생성하는 것으로 시작합니다:

#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);

코드는 setup() 함수에서 센서를 초기화하고 통신을 시작합니다:

void setup() {
  Serial.begin(115200);
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    while(1) {}
  }
}

loop() 함수 내에서 센서 데이터를 지속적으로 읽고 출력합니다:

void loop() {
  IMU.readSensor();
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  // 다른 축에 대한 추가 출력 문
}

이 섹션은 가속도계, 자이로스코프 및 지자기 센서 값을 읽어 시리얼 모니터에 표시합니다. 전체 구현을 위해 기사 아래에 로드된 전체 코드를 확인하세요.

데모 / 예상 결과

코드를 실행하면 시리얼 모니터에서 센서 값이 실시간으로 업데이트되는 것을 볼 수 있습니다. 센서를 움직이면 가속도계 값이 변동하고, 자이로스코프 값은 회전 속도를 표시합니다. 지자기 센서는 3축의 자기장 강도를 제공하며, 이를 통해 방향을 결정할 수 있습니다. 부동 입력에 주의하세요. 부정확한 판독을 초래할 수 있습니다(비디오 12:30 지점).

챕터

  • 소개 (00:00)
  • 하드웨어 설명 (01:30)
  • 배선 지침 (04:00)
  • 코드 예제 및 설명 (06:00)
  • 시연 (10:00)

이미지

ELE_MPU6050_208
ELE_MPU6050_208
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
126-Arduino code for an MPU-9250 accelerometer, gyroscope, and magnetometer
언어: C++
/*
 * Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com

Copyright (c) 2017 Bolder Flight Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, 
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
 * Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch instruction video for this code: 
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5

S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/

#include "MPU9250.h"

// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;

void setup() {
  // Serial to display data
  Serial.begin(115200);
  while(!Serial) {}

  // Start communication with IMU 
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
}

void loop() {
  // Read the sensor
  IMU.readSensor();
  // Display the data
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  Serial.print("\t");
  Serial.print("AccelY: ");  
  Serial.print(IMU.getAccelY_mss(),6);
  Serial.print("\t");
  Serial.print("AccelZ: ");  
  Serial.println(IMU.getAccelZ_mss(),6);
  
  Serial.print("GyroX: ");
  Serial.print(IMU.getGyroX_rads(),6);
  Serial.print("\t");
  Serial.print("GyroY: ");  
  Serial.print(IMU.getGyroY_rads(),6);
  Serial.print("\t");
  Serial.print("GyroZ: ");  
  Serial.println(IMU.getGyroZ_rads(),6);

  Serial.print("MagX: ");  
  Serial.print(IMU.getMagX_uT(),6);
  Serial.print("\t");  
  Serial.print("MagY: ");
  Serial.print(IMU.getMagY_uT(),6);
  Serial.print("\t");
  Serial.print("MagZ: ");  
  Serial.println(IMU.getMagZ_uT(),6);
  
  Serial.print("Temperature in C: ");
  Serial.println(IMU.getTemperature_C(),6);
  Serial.println();
  delay(200);
}

자원 및 참고자료

파일📁

파일이 없습니다.