INFORMACIÓN
El módulo ICM20948 9DOF Sensor IMU I2C SPI es una unidad de medición inercial de 9 ejes que integra un acelerómetro de 3 ejes, un giroscopio de 3 ejes y un magnetómetro de 3 ejes. Esta combinación permite medir aceleración lineal, velocidad angular y orientación con respecto al campo magnético terrestre. Es compatible con conectores DevLab, Qwiic y STEMMA QT. Incluye 4 header macho y un arnés JST 1mm para conexión Qwiic.
El módulo ICM20948 está diseñado para aplicaciones de detección de movimiento, orientación y robótica mediante comunicación I2C o SPI.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Marca: UNIT Electronics
- País de origen: Hecho en México
- Tipo: IMU 9 DOF
- IC: ICM-20948
-
Voltaje de suministro:1.3V a 3.6V
-
Interfaz:
-
I2C (selección por pin AD0 – Abierto: 0x69 , Cerrado: 0x68 )
-
SPI
-
- Frecuencia:
- I2C: 400 KhZ
- SPI: 7 Mhz
- ADC: Resolución 16 bits por cada sensor de movimiento
- Temperatura de funcionamiento: -40°C a +85°C
-
Tipo de conector: JST 1,0 mm 4 pines
- Dimensiones: 25.40 mm x 16 mm
- Peso: 4.92 g
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Test de prueba ICM20948 9DOF
En el siguiente test de prueba, será para comprobar la conexión y comunicación vía I2C por el conector Qwiic y procesando las lecturas por medio de la tarjeta Pulsar C6.

Previamente, tendremos que descargar la librería en el Arduino IDE para el uso del sensor ICM20948. Esta tiene el nombre de Devlab_ICM20948.

El siguiente código nos ayudara a visualizar en el monitor serial la lectura del sensor, desplegando la información del acelerómetro, giroscopio y del magnetómetro.
#include <Wire.h>
#include <DevLab_ICM20948.h>
/* ====================== User Config ======================= */
#define SDA_PIN 6
#define SCL_PIN 7
#define I2C_FREQ 400000UL
#define ICM_ADDR 0x69
DevLab_ICM20948 imu;
/**
* @brief Configure Serial, I2C, sensor identity check, and enabled sensors.
*
* The sketch stops in an infinite loop if the IMU cannot be initialized or
* the WHO_AM_I register does not match the expected ICM-20948 value.
*/
void setup() {
Serial.begin(115200);
delay(200);
Serial.println(F("ICM-20948 — I2C Basic"));
Wire.begin(SDA_PIN, SCL_PIN);
/* Initialize IMU. */
if (!imu.beginI2C(ICM_ADDR, Wire, 400000)) {
Serial.println(F("ERROR: beginI2C() failed"));
while (1) delay(200);
}
/* WHO_AM_I check. */
uint8_t who;
if (!imu.readWhoAmI(who) || who != 0xEA) {
Serial.println(F("ERROR: WHO_AM_I mismatch"));
while (1) delay(200);
}
Serial.print(F("WHO_AM_I = 0x"));
Serial.println(who, HEX);
/* Enable all sensors. */
if (!imu.setSensors(true, true, true)) {
Serial.println(F("ERROR: setSensors failed"));
}
/* Initialize magnetometer. */
if (!imu.initMag()) {
Serial.println(F("Mag init failed"));
} else {
Serial.println(F("Mag initialized"));
}
Serial.println(F("Ready."));
}
/**
* @brief Read accelerometer, gyroscope, magnetometer, and temperature data.
*
* Values are printed periodically to the Serial monitor in engineering units.
*/
void loop() {
float ax, ay, az;
float gx, gy, gz;
float mx, my, mz;
float tC;
/* Read accelerometer. */
if (imu.readAccel(ax, ay, az)) {
Serial.print(F("ACC [g]: "));
Serial.print("aX:"); Serial.print(ax, 3); Serial.print(", ");
Serial.print("aY:");Serial.print(ay, 3); Serial.print(", ");
Serial.print("aZ:");Serial.println(az, 3);
} else {
Serial.println(F("ACC read failed"));
}
/* Read gyroscope. */
if (imu.readGyro(gx, gy, gz)) {
Serial.print(F("GYR [dps]: "));
Serial.print("gX:"); Serial.print(gx, 2); Serial.print(", ");
Serial.print("gY:"); Serial.print(gy, 2); Serial.print(", ");
Serial.print("gZ:");Serial.println(gz, 2);
} else {
Serial.println(F("GYR read failed"));
}
/* Read magnetometer. */
if (imu.readMag(mx, my, mz)) {
Serial.print(F("MAG [uT]: "));
Serial.print("mX:");Serial.print(mx, 2); Serial.print(", ");
Serial.print("mY:");Serial.print(my, 2); Serial.print(", ");
Serial.print("mZ:"); Serial.println(mz, 2);
} else {
Serial.println(F("MAG read failed"));
}
/* Read temperature. */
if (imu.readTemperature(tC)) {
Serial.print(F("TMP [C]: "));
Serial.println(tC, 2);
} else {
Serial.println(F("TMP read failed"));
}
Serial.println(("-----------------------------"));
delay(2000);
}
Para visualizar la información en el monitor serial tendrás que habilitar USB CDC On Boot : ENABLE (Barra de herramientas >Tools) y los bauds para visualizar la información son a 115200 bauds. El resultado será el siguiente:

Aplicaciones
-
Robótica: Retroalimentación de orientación, inclinación, rotación y movimiento.
-
Drones y plataformas móviles: Medición inercial para la estimación de actitud.
-
Dispositivos vestibles: Seguimiento de gestos, actividad y movimiento.
-
Navegación: Medición de rumbo asistida por magnetómetro.
-
Educación y prototipado: Experimentos prácticos con unidades de medición inercial mediante I²C o SPI.

Placa Perforada Tipo Protoboard 48 x 133 mm
Panel de Iluminación LED Micro USB 5V 430mA - 470mA
Bateria 18650 3.7V 3000mAh ±10%
PIC16F877A-I/P Microcontrolador 8 Bits DIP-40
DB157S(60MIL) Puente Rectificador 1000V 1.5A SMD
Kit Soldador Eléctrico 60W 110V Cautín Multímetro
FR107 Diodo Rectificador 1A 1000V
Tuxedo 18650 Rocket Launcher
SYB-500 Protoboard 2700 Puntos
KTNNKG KG1201-A Relay RF 433 MHz con Control
Transistor 60T65PES TO-247 IGBT MBQ60T65PES
Touchdot ESP32-S3 WiFi BT -UNIT DevLab
Mini Ventilador Dual para Raspberry Pi 5V
Kit Brazo Robótico 6DOF con Garra y Servos
LM2596S-5.0/TR Regulador de Voltaje 5V 3A SMD
DualMCU ESP32 + RP2040 - UNIT DevLab
Pasta para Soldar ZJ-18 30g

















Valoraciones
No hay valoraciones aún.