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.

TDA7294 Amplificador de Audio Mono 100W
Pasta Limpiadora para Puntas de Cautín 6g
Cautín de 90W 110V con Puntas Soporte y Esponja
Teensy 4.0 Tarjeta de Desarrollo RT1062 Micro USB
Pluma Flux 951 Kester 10ml Non Clean
Kit Chasis de Metal MC300 con Llantas Omnidireccional + Joystick
XIAO Matriz RGB 6x10 WS2812B
XIAO ESP32-C6 Wi-Fi y BLE
SYB-500 Protoboard 2700 Puntos
1N5819 Diodo Schottky 1A 40V
Fuente de Alimentación Universal 3V-24V 2A 48W
TTP223B Sensor Capacitivo Touch - UNIT DevLab

















Valoraciones
No hay valoraciones aún.