From fbdceca4f9b7b114311832f15aa44e1705467f67 Mon Sep 17 00:00:00 2001 From: Paula Scharf Date: Mon, 19 Jan 2026 11:21:17 +0100 Subject: [PATCH] feat: also support icm20948 --- senseBox-bike-atrai-v2/platformio.ini | 1 + .../AccelerationSensor/AccelerationSensor.cpp | 24 ++++++++++++++++--- .../AccelerationSensor/AccelerationSensor.h | 6 ++++- senseBox-bike-nancy/platformio.ini | 1 + .../AccelerationSensor/AccelerationSensor.cpp | 17 +++++++++++++ .../AccelerationSensor/AccelerationSensor.h | 6 ++++- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/senseBox-bike-atrai-v2/platformio.ini b/senseBox-bike-atrai-v2/platformio.ini index f4af248..2cefd30 100644 --- a/senseBox-bike-atrai-v2/platformio.ini +++ b/senseBox-bike-atrai-v2/platformio.ini @@ -24,3 +24,4 @@ lib_deps = sensebox/SenseBoxBLE@^1.1.0 adafruit/Adafruit NeoPixel@^1.12.2 invensenseinc/ICM42670P@^1.0.7 + adafruit/Adafruit ICM20X@^2.0.7 diff --git a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp index 12fd34d..ecbff19 100644 --- a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp +++ b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp @@ -27,6 +27,12 @@ void AccelerationSensor::initSensor() icm.startGyro(21, 500); // Gyro ODR = 100 Hz, Full Scale Range = 2000 dps activeSensor = ICM42670X; } + else if (icm2.begin_I2C(0x68, &Wire1)) + { + icm2.setAccelRange(ICM20948_ACCEL_RANGE_8_G); + icm2.setAccelRateDivisor(10.25); // 100 Hz sample rate + activeSensor = ICM20948; + } else { Serial.println("No compatible acceleration sensor found"); @@ -46,7 +52,7 @@ float probSett = 0.0; float probStanding = 0.0; float anomaly = 0.0; -float prevAccTime = millis(); +// float prevAccTime = millis(); bool AccelerationSensor::readSensorData() { @@ -75,13 +81,25 @@ bool AccelerationSensor::readSensorData() buffer[ix++] = (imu_event.gyro[1]*2.0)/6550.0; buffer[ix++] = (imu_event.gyro[2]*2.0)/6550.0; } + else if (activeSensor == ICM20948) + { + sensors_event_t a, g, m, temp; + icm2.getEvent(&a, &g, &m, &temp); + buffer[ix++] = a.acceleration.x; + buffer[ix++] = a.acceleration.y; + buffer[ix++] = a.acceleration.z; + buffer[ix++] = g.gyro.x; + buffer[ix++] = g.gyro.y; + buffer[ix++] = g.gyro.z; + } else { return false; // No sensor active } - Serial.println(millis() - prevAccTime); - prevAccTime = millis(); + // Serial.print("acc: "); + // Serial.println(millis() - prevAccTime); + // prevAccTime = millis(); // one second interval if (EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE <= ix) diff --git a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h index 4acf106..105331e 100644 --- a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h +++ b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h @@ -4,6 +4,8 @@ #include "../BaseSensor.h" #include #include "ICM42670P.h" // Include for ICM42670P +#include // Include for ICM20948 +#include // Include for ICM20948 class AccelerationSensor : public BaseSensor { @@ -20,12 +22,14 @@ class AccelerationSensor : public BaseSensor { NONE, MPU6050, - ICM42670X // ICM42670X is a placeholder for the ICM42670P + ICM42670X, // ICM42670X is a placeholder for the ICM42670P + ICM20948 }; SensorType activeSensor = NONE; // Track which sensor is active Adafruit_MPU6050 mpu; ICM42670 icm = ICM42670(Wire1, 0); // Instantiate an ICM42670 with LSB address set to 0 + Adafruit_ICM20948 icm2; }; #endif // ACCELERATION_SENSOR_H \ No newline at end of file diff --git a/senseBox-bike-nancy/platformio.ini b/senseBox-bike-nancy/platformio.ini index f23d859..beae02c 100644 --- a/senseBox-bike-nancy/platformio.ini +++ b/senseBox-bike-nancy/platformio.ini @@ -24,3 +24,4 @@ lib_deps = sensebox/SenseBoxBLE@^1.1.0 adafruit/Adafruit NeoPixel@^1.12.2 invensenseinc/ICM42670P@^1.0.7 + adafruit/Adafruit ICM20X@^2.0.7 diff --git a/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.cpp b/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.cpp index 093b370..ecbff19 100644 --- a/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.cpp +++ b/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.cpp @@ -27,6 +27,12 @@ void AccelerationSensor::initSensor() icm.startGyro(21, 500); // Gyro ODR = 100 Hz, Full Scale Range = 2000 dps activeSensor = ICM42670X; } + else if (icm2.begin_I2C(0x68, &Wire1)) + { + icm2.setAccelRange(ICM20948_ACCEL_RANGE_8_G); + icm2.setAccelRateDivisor(10.25); // 100 Hz sample rate + activeSensor = ICM20948; + } else { Serial.println("No compatible acceleration sensor found"); @@ -75,6 +81,17 @@ bool AccelerationSensor::readSensorData() buffer[ix++] = (imu_event.gyro[1]*2.0)/6550.0; buffer[ix++] = (imu_event.gyro[2]*2.0)/6550.0; } + else if (activeSensor == ICM20948) + { + sensors_event_t a, g, m, temp; + icm2.getEvent(&a, &g, &m, &temp); + buffer[ix++] = a.acceleration.x; + buffer[ix++] = a.acceleration.y; + buffer[ix++] = a.acceleration.z; + buffer[ix++] = g.gyro.x; + buffer[ix++] = g.gyro.y; + buffer[ix++] = g.gyro.z; + } else { return false; // No sensor active diff --git a/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.h b/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.h index 4acf106..105331e 100644 --- a/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.h +++ b/senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.h @@ -4,6 +4,8 @@ #include "../BaseSensor.h" #include #include "ICM42670P.h" // Include for ICM42670P +#include // Include for ICM20948 +#include // Include for ICM20948 class AccelerationSensor : public BaseSensor { @@ -20,12 +22,14 @@ class AccelerationSensor : public BaseSensor { NONE, MPU6050, - ICM42670X // ICM42670X is a placeholder for the ICM42670P + ICM42670X, // ICM42670X is a placeholder for the ICM42670P + ICM20948 }; SensorType activeSensor = NONE; // Track which sensor is active Adafruit_MPU6050 mpu; ICM42670 icm = ICM42670(Wire1, 0); // Instantiate an ICM42670 with LSB address set to 0 + Adafruit_ICM20948 icm2; }; #endif // ACCELERATION_SENSOR_H \ No newline at end of file