Menu mobile
Este módulo IMU es una pequeña placa en la que se colocan todos los sensores necesarios para 10 grados de libertad. Este módulo se comunica con Arduino o microcontroladores a través de la interfaz I2C. Con las funciones y el código fuente de FreeIMU existentes, puede utilizar fácilmente esta IMU como un sistema AHRS en los controles de vuelo. Puede utilizar este módulo en VTOL, modelos de aviones, UAVS y también en dispositivos industriales y médicos.
Este sensor tiene 8 pines:
Puede ver el pinout de este módulo en la imagen a continuación:
Conexión
El módulo se alimenta directamente de Arduino, así que no necesitamos una fuente de alimentación externa.
Los pines están conectados según la tabla:
Pin Módulo
Pin de Arduino UNO
VCC
5V
GND
SCL
A5
SDA
Tal y como indica la siguiente figura:
Abre Arduino IDE e instala las siguientes librerías:
Al principio, debes agregar las librerías "Adafruit_BMP280_Library" y "MPU9250_asukiaaa" en Arduino IDE. Para ello descárgalas haciendo clic sobre sus nombres, y una vez denstro de GitHub, descargarla. Instalarlas después desde Programa -> Incluir biblioteca -> Añadir Bilioteca .ZIP ...), buscar el comprimido descargado y aceptar.
Ahora, abre un nuevo sketch y pega el siguiente código:
/*
by MohammedDamirchi
https://electropeak.com/learn/
*/
#include <MPU9250_asukiaaa.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bme; // I2C
MPU9250_asukiaaa mySensor;
float aX, aY, aZ, aSqrt, gX, gY, gZ, mDirection, mX, mY, mZ;
void setup() {
Serial.begin(115200);
while (!Serial);
#ifdef _ESP32_HAL_I2C_H_ // For ESP32
Wire.begin(SDA_PIN, SCL_PIN);
mySensor.setWire(&Wire);
#endif
bme.begin();
mySensor.beginAccel();
mySensor.beginGyro();
mySensor.beginMag();
// You can set your own offset for mag values
// mySensor.magXOffset = -50;
// mySensor.magYOffset = -55;
// mySensor.magZOffset = -10;
}
void loop() {
if (mySensor.accelUpdate() == 0) {
aX = mySensor.accelX();
aY = mySensor.accelY();
aZ = mySensor.accelZ();
aSqrt = mySensor.accelSqrt();
Serial.print("accelX: " + String(aX));
Serial.print("\taccelY: " + String(aY));
Serial.print("\taccelZ: " + String(aZ));
Serial.print("\taccelSqrt: " + String(aSqrt));
if (mySensor.gyroUpdate() == 0) {
gX = mySensor.gyroX();
gY = mySensor.gyroY();
gZ = mySensor.gyroZ();
Serial.print("\tgyroX: " + String(gX));
Serial.print("\tgyroY: " + String(gY));
Serial.print("\tgyroZ: " + String(gZ));
if (mySensor.magUpdate() == 0) {
mX = mySensor.magX();
mY = mySensor.magY();
mZ = mySensor.magZ();
mDirection = mySensor.magHorizDirection();
Serial.print("\tmagX: " + String(mX));
Serial.print("\tmaxY: " + String(mY));
Serial.print("\tmagZ: " + String(mZ));
Serial.print("\thorizontalDirection: " + String(mDirection));
Serial.print("\tTemperature(*C): ");
Serial.print(bme.readTemperature());
Serial.print("\tPressure(Inches(Hg)): ");
Serial.print(bme.readPressure()/3377);
Serial.print("\tApproxAltitude(m): ");
Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(""); // Add an empty line
Una vez lo tengas todo conectado, el puerto y placa bien, sube el código a la placa y ya puedes abrir el "Serial Plotter" (o con el Monitor Serie, desde la pestaña Herramientas) para ver los movimientos registrados. Puedes filtrarlos y probar a modificar el código de ejemplo. Por supuesto, puedes probar los ejemplos de las librerías.