De wereld van traagheidssensoren is snel geëvolueerd en apparaten zoals de MPU9250, die versnellingsmeter, gyroscoop en magnetometer in één module combineert, zijn een belangrijk onderdeel geworden voor roboticaprojecten, drones en systemen die het nauwkeurig vastleggen van kleine en grote bewegingen vereisen. In dit artikel gaan we onderzoeken hoe je deze sensor met Arduino kunt gebruiken, wat de opvallende kenmerken ervan zijn, en enkele codevoorbeelden om ermee aan de slag te gaan.
Het gebruik van de MPU9250 is niet alleen handig voor hobbyisten, maar ook voor professionals die oriëntatie en beweging nauwkeurig moeten meten. Deze oplossing maakt de ontwikkeling mogelijk van stabilisatiesystemen, autonome voertuigen en robots die hun bewegingen in de verschillende assen moeten kennen. De veelzijdigheid van de sensor, samen met zijn nauwkeurigheid en lage kosten, heeft hem een solide reputatie opgeleverd onder ontwikkelaars.
Wat is de MPU9250?
El MPU9250 Het is een module die omvat versnellingsmeter, gyroscoop en magnetometer op één enkel apparaat. Met deze combinatie is de sensor in staat zowel de lineaire versnelling als de hoeksnelheid te meten, evenals het magnetische veld van zijn omgeving. Deze Invensense-sensor heeft 9 vrijheidsgraden, wat betekent dat hij in drie verschillende assen kan meten, zowel de versnelling, de rotatie (gyroscoop) als het magnetische veld (magnetometer), waardoor de mogelijkheid ontstaat om de volledige oriëntatie van het apparaat te berekenen.
De module is ontworpen om communiceren via SPI of I2C, waardoor het eenvoudig kan worden aangesloten op open source-platforms zoals Arduino of Raspberry Pi. Verder dank aan Digitale bewegingsprocessor (DMP), is in staat complexe berekeningen uit te voeren om de door de drie sensoren verkregen gegevens te combineren en nauwkeurigere metingen te verkrijgen.
Belangrijkste kenmerken van de MPU9250
De MPU9250 onderscheidt zich door een groot aantal functies die het tot een zeer interessante module maken voor projecten waarbij nauwkeurige bewegingen moeten worden vastgelegd, waaronder:
- Versnellingsmeter: Instelbaar acceleratiebereik tussen ±2g, ±4g, ±8g en ±16g.
- Gyroscoop: Programmeerbaar bereik van ±250°/s, ±500°/s, ±1000°/s, ±2000°/s.
- Magnetometer: Gevoeligheid van 0.6 µT/LSB en programmeerbaar bereik tot 4800 µT.
- Consumo energético: Zeer laag, ideaal voor draagbare apparaten of apparaten die langdurig moeten worden gebruikt (3.5 mA in actieve modus).
De MPU9250-module verbinden met Arduino
Het aansluiten van de module op uw Arduino is een eenvoudige procedure dankzij het feit dat deze werkt via het I2C-protocol. Hij typisch aansluitschema tussen een MPU9250 en een Arduino Uno is:
- VCC: Aansluiten op 3.3V.
- GND: Naar aarde (GND).
- SDA: Sluit hem aan op pin A4 van de Arduino.
- SCL: Sluit hem aan op pin A5 van de Arduino.
Het is belangrijk om ervoor te zorgen dat de voeding correct is, zodat de sensor goed kan functioneren. De meeste modules beschikken al over een spanningsregelaar om de 5V van de Arduino te kunnen gebruiken zonder deze te beschadigen.
Codevoorbeelden voor de MPU9250
Hieronder laten we zien hoe je kunt beginnen met het programmeren van de MPU9250 in Arduino, waarbij je de gegevens van de accelerometer, gyroscoop en magnetometer uitleest. De bibliotheek MPU9250.h
Het is erg handig om het programmeren te vergemakkelijken, en in ons voorbeeld leggen we uit hoe je onbewerkte gegevens leest:
#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);
}
Deze code leest de drie componenten van versnelling. Met deze methoden kunnen gyroscoop- en magnetometermetingen op soortgelijke wijze worden uitgevoerd getGyroX_rads()
y getMagX_uT()
respectievelijk.
Praktische toepassingen
Er zijn meerdere toepassingen waarbij de MPU9250 een onmisbaar hulpmiddel wordt. Laten we enkele van de belangrijkste onderzoeken:
- Drones en robotica: Een van de meest voorkomende toepassingen van de MPU9250 is bij vluchtstabilisatie- en robotsystemen, waarbij het verkrijgen van realtime oriëntatie essentieel is.
- Virtuele realiteit: Door de oriëntatie en beweging nauwkeurig vast te leggen, kan de sensor worden gebruikt voor tracking in videogametoepassingen of virtual reality-simulators.
- Navigatiesystemen: In combinatie met andere sensoren, zoals GPS, wordt de MPU9250 gebruikt bij traagheidsnavigatie om bewegingen te begrijpen en oriëntatie te detecteren.
Magnetometerkalibratie
Een van de belangrijkste stappen bij het gebruik van de MPU9250 is het kalibratie van de magnetometer. De magnetometer is essentieel voor het elimineren van fouten die worden gegenereerd door de magnetische omgeving (zoals bouwbeelden of interferentie van andere elektronische apparatuur), dus het uitvoeren van een goede kalibratie is van cruciaal belang voor nauwkeurige metingen.
Om de magnetometer correct te kalibreren, kunnen we de RTIMULib-Arduino-bibliotheek gebruiken. Hier is een eenvoudig kalibratieprogramma:
#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();
}
}
De bovenstaande code leest de gegevens van de magnetometer, zodat u bewegingen op de assen kunt maken en het volledige scala aan mogelijke metingen kunt bestrijken. Dit helpt bij het identificeren van magnetische veldvervormingen en het verbeteren van oriëntatieberekeningen.
Filters om de precisie te verbeteren
Om de nauwkeurigheid van de MPU9250-metingen te verbeteren, is een van de meest gebruikelijke benaderingen implementatie van filters die de gegevens combineren die zijn verkregen uit de gyroscoop, versnellingsmeter en magnetometer.
El complementair filter Het is een effectieve en eenvoudige oplossing om te implementeren. Dit filter vertrouwt op de gyroscoop om snelle resultaten te krijgen, terwijl de versnellingsmeter en magnetometer afwijkingen op de lange termijn van de gyroscoop corrigeren (ook wel drift genoemd). Een eenvoudige code die dit filter implementeert, is te zien in het volgende voorbeeld:
#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);
}
Dit filter is essentieel om gyroscoopdrift te elimineren en een stabielere oriëntatie te genereren. Bovendien is het veel sneller uit te voeren op microcontrollers zoals de Arduino dan andere, meer complexe methoden zoals het Kalman-filter, dat meer bronnen verbruikt.
De MPU9250 is een ongelooflijk veelzijdige oplossing voor een grote verscheidenheid aan projecten die nauwkeurige oriëntatie- en bewegingsmeting vereisen. Het aansluiten op een Arduino en het verkrijgen van basismetingen is relatief eenvoudig, en door een paar filters te implementeren kunt u zeer nauwkeurige en nuttige resultaten verkrijgen voor een breed scala aan toepassingen.