Светът на инерционните сензори се разви бързо и устройства като MPU9250, който съчетава акселерометър, жироскоп и магнитометър в един модул, се превърнаха в ключова част за проекти за роботика, дронове и системи, които изискват точно улавяне на малки и големи движения. В тази статия ще проучим как да използваме този сензор с Arduino, какви са неговите забележителни характеристики, както и някои примери за код, за да започнете с него.
Използването на MPU9250 е полезно не само за любители, но и за професионалисти, които трябва да измерват точно ориентацията и движението. Това решение позволява разработването на системи за стабилизиране, автономни превозни средства и роботи, които изискват познаване на техните движения в различните оси. Гъвкавостта на сензора, заедно с неговата точност и ниска цена, му спечелиха солидна репутация сред разработчиците.
Какво представлява MPU9250?
El MPU9250 Това е модул, който включва акселерометър, жироскоп и магнитометър на едно устройство. С тази комбинация сензорът може да измерва както линейното ускорение, така и ъгловата скорост, както и магнитното поле на околната среда. Този сензор Invensense има 9 степени на свобода, което означава, че може да измерва в три различни оси, както ускорение, въртене (жироскоп), така и магнитно поле (магнитометър), като по този начин дава възможност за изчисляване на пълната ориентация на устройството.
Модулът е предназначен за комуникирайте чрез SPI или I2C, което позволява лесното му свързване към платформи с отворен код като Arduino или Raspberry Pi. Освен това, благодарение на Цифров процесор за движение (DMP), е в състояние да извършва сложни изчисления, за да обедини данните, получени от трите сензора, и да осигури по-прецизни измервания.
Основни характеристики на MPU9250
MPU9250 се отличава с голям брой функции, които го правят много интересен модул за проекти, които изискват улавяне на прецизни движения, сред които са:
- Акселерометър: Регулируем диапазон на ускорение между ±2g, ±4g, ±8g и ±16g.
- Жироскоп: Програмируем диапазон от ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Магнитометър: Чувствителност от 0.6µT/LSB и програмируем диапазон до 4800µT.
- Консумация на енергия: Много ниска, идеална за преносими устройства или устройства, които изискват работа за дълги периоди (3.5 mA в активен режим).
Свързване на модула MPU9250 с Arduino
Свързването на модула към вашия Arduino е лесна процедура, благодарение на факта, че работи чрез I2C протокола. той типична схема на свързване между MPU9250 и a Arduino Uno е:
- VCC: Свързване към 3.3V.
- GND: към земята (GND).
- S.D.A.: Свържете го към щифт A4 на Arduino.
- SCL: Свържете го към щифт A5 на Arduino.
Важно е да се гарантира, че захранването е правилно, за да може сензорът да функционира правилно. Повечето модули вече имат регулатор на напрежението, за да могат да използват 5V на Arduino, без да го повредят.
Примери за код за MPU9250
По-долу ви показваме как можете да започнете да програмирате MPU9250 в Arduino, като четете данните от акселерометъра, жироскопа и магнитометъра. Библиотеката MPU9250.h
Много е полезно да се улесни програмирането и в нашия пример описваме подробно как да четем необработени данни:
#include <Wire.h>
#include <MPU9250.h>
MPU9250 imu(Wire, 0x68);
void setup() {
Wire.begin();
Serial.begin(115200);
if (imu.begin() != 0) {
Serial.println("Error al iniciar MPU9250");
} else {
Serial.println("MPU9250 iniciado");
}
}
void loop() {
imu.readSensor();
Serial.print("Aceleracion: ");
Serial.print(imu.getAccelX_mss());
Serial.print(", ");
Serial.print(imu.getAccelY_mss());
Serial.print(", ");
Serial.print(imu.getAccelZ_mss());
Serial.println();
delay(1000);
}
Този код чете трите компонента на ускорението. Отчитанията на жироскоп и магнитометър могат да бъдат направени по подобен начин, като се използват методите getGyroX_rads()
y getMagX_uT()
съответно.
Практически приложения
Има множество приложения, при които MPU9250 се превръща в незаменим инструмент. Нека разгледаме някои от най-важните:
- Дронове и роботика: Едно от най-честите приложения на MPU9250 е в системите за стабилизиране на полета и роботиката, където получаването на ориентация в реално време е от съществено значение.
- Виртуална реалност: Чрез прецизно улавяне на ориентация и движение, сензорът може да се използва за проследяване в приложения за видеоигри или симулатори на виртуална реалност.
- Навигационни системи: В комбинация с други сензори, като GPS, MPU9250 се използва в инерционна навигация за разбиране на движенията и откриване на ориентация.
Калибриране на магнитометър
Една от най-важните стъпки при използване на MPU9250 е калибриране на магнитометър. Магнитометърът е от съществено значение за елиминиране на грешки, генерирани от магнитната среда (като заснемане на сгради или смущения от друго електронно оборудване), така че извършването на правилно калибриране е от решаващо значение за точни измервания.
За да калибрираме правилно магнитометъра, можем да използваме библиотеката RTIMULib-Arduino. Ето една проста програма за калибриране:
#include <RTIMULib.h>
RTIMU *imu;
RTIMUSettings settings;
void setup() {
Wire.begin();
Serial.begin(115200);
imu = RTIMU::createIMU(&settings);
imu->IMUInit();
imu->setCalibrationMode(true);
}
void loop() {
if (imu->IMURead()) {
RTVector3 mag = imu->getCompass();
Serial.print("Magnetómetro: ");
Serial.print(mag.x());
Serial.print(", ");
Serial.print(mag.y());
Serial.print(", ");
Serial.print(mag.z());
Serial.println();
}
}
Кодът по-горе чете данните от магнитометъра, така че можете да извършвате движения по осите и да покривате пълния диапазон от възможни показания. Това помага да се идентифицират изкривяванията на магнитното поле и да се подобрят изчисленията за ориентация.
Филтри за подобряване на прецизността
За да се подобри точността на показанията на MPU9250, един от най-често срещаните подходи е изпълнение на филтъра които комбинират данните, получени от жироскопа, акселерометъра и магнитометъра.
El допълнителен филтър Това е ефективно и лесно за изпълнение решение. Този филтър разчита на жироскопа, за да получи бързи резултати, докато акселерометърът и магнитометърът коригират дългосрочните отклонения от жироскопа (известни като дрейф). Прост код, който прилага този филтър, може да се види в следния пример:
#include <ComplementaryFilter.h>
ComplementaryFilter cf;
void setup() {
cf.setAccelerometerGain(0.02);
cf.setMagnetometerGain(0.98);
}
void loop() {
// Integrar lecturas de acelerómetro y giroscopio
cf.update(sensorData.accelX, sensorData.gyroX);
float pitch = cf.getPitch();
float roll = cf.getRoll();
Serial.print("Pitch: ");
Serial.print(pitch);
Serial.print(" Roll: ");
Serial.println(roll);
}
Този филтър е от съществено значение за премахване на дрейфа на жироскопа и генериране на по-стабилна ориентация. Освен това е много по-бързо да се изпълнява на микроконтролери като Arduino, отколкото други по-сложни методи като филтъра на Калман, който консумира повече ресурси.
MPU9250 е невероятно гъвкаво решение за голямо разнообразие от проекти, които изискват точна ориентация и измерване на движението. Свързването му към Arduino и получаването на основни показания е относително лесно и чрез прилагане на няколко филтъра можете да получите много точни и полезни резултати за широк спектър от приложения.