Skip to content

Commit cac4418

Browse files
authored
Merge pull request #46 from sensebox/feat/icm20948
feat: also support icm20948
2 parents 455679d + fbdceca commit cac4418

6 files changed

Lines changed: 50 additions & 5 deletions

File tree

‎senseBox-bike-atrai-v2/platformio.ini‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ lib_deps =
2424
sensebox/SenseBoxBLE@^1.1.0
2525
adafruit/Adafruit NeoPixel@^1.12.2
2626
invensenseinc/ICM42670P@^1.0.7
27+
adafruit/Adafruit ICM20X@^2.0.7

‎senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp‎

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ void AccelerationSensor::initSensor()
2727
icm.startGyro(21, 500); // Gyro ODR = 100 Hz, Full Scale Range = 2000 dps
2828
activeSensor = ICM42670X;
2929
}
30+
else if (icm2.begin_I2C(0x68, &Wire1))
31+
{
32+
icm2.setAccelRange(ICM20948_ACCEL_RANGE_8_G);
33+
icm2.setAccelRateDivisor(10.25); // 100 Hz sample rate
34+
activeSensor = ICM20948;
35+
}
3036
else
3137
{
3238
Serial.println("No compatible acceleration sensor found");
@@ -46,7 +52,7 @@ float probSett = 0.0;
4652
float probStanding = 0.0;
4753
float anomaly = 0.0;
4854

49-
float prevAccTime = millis();
55+
// float prevAccTime = millis();
5056

5157
bool AccelerationSensor::readSensorData()
5258
{
@@ -75,13 +81,25 @@ bool AccelerationSensor::readSensorData()
7581
buffer[ix++] = (imu_event.gyro[1]*2.0)/6550.0;
7682
buffer[ix++] = (imu_event.gyro[2]*2.0)/6550.0;
7783
}
84+
else if (activeSensor == ICM20948)
85+
{
86+
sensors_event_t a, g, m, temp;
87+
icm2.getEvent(&a, &g, &m, &temp);
88+
buffer[ix++] = a.acceleration.x;
89+
buffer[ix++] = a.acceleration.y;
90+
buffer[ix++] = a.acceleration.z;
91+
buffer[ix++] = g.gyro.x;
92+
buffer[ix++] = g.gyro.y;
93+
buffer[ix++] = g.gyro.z;
94+
}
7895
else
7996
{
8097
return false; // No sensor active
8198
}
8299

83-
Serial.println(millis() - prevAccTime);
84-
prevAccTime = millis();
100+
// Serial.print("acc: ");
101+
// Serial.println(millis() - prevAccTime);
102+
// prevAccTime = millis();
85103

86104
// one second interval
87105
if (EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE <= ix)

‎senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "../BaseSensor.h"
55
#include <Adafruit_MPU6050.h>
66
#include "ICM42670P.h" // Include for ICM42670P
7+
#include <Adafruit_ICM20948.h> // Include for ICM20948
8+
#include <Adafruit_Sensor.h> // Include for ICM20948
79

810
class AccelerationSensor : public BaseSensor
911
{
@@ -20,12 +22,14 @@ class AccelerationSensor : public BaseSensor
2022
{
2123
NONE,
2224
MPU6050,
23-
ICM42670X // ICM42670X is a placeholder for the ICM42670P
25+
ICM42670X, // ICM42670X is a placeholder for the ICM42670P
26+
ICM20948
2427
};
2528

2629
SensorType activeSensor = NONE; // Track which sensor is active
2730
Adafruit_MPU6050 mpu;
2831
ICM42670 icm = ICM42670(Wire1, 0); // Instantiate an ICM42670 with LSB address set to 0
32+
Adafruit_ICM20948 icm2;
2933
};
3034

3135
#endif // ACCELERATION_SENSOR_H

‎senseBox-bike-nancy/platformio.ini‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ lib_deps =
2424
sensebox/SenseBoxBLE@^1.1.0
2525
adafruit/Adafruit NeoPixel@^1.12.2
2626
invensenseinc/ICM42670P@^1.0.7
27+
adafruit/Adafruit ICM20X@^2.0.7

‎senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.cpp‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ void AccelerationSensor::initSensor()
2727
icm.startGyro(21, 500); // Gyro ODR = 100 Hz, Full Scale Range = 2000 dps
2828
activeSensor = ICM42670X;
2929
}
30+
else if (icm2.begin_I2C(0x68, &Wire1))
31+
{
32+
icm2.setAccelRange(ICM20948_ACCEL_RANGE_8_G);
33+
icm2.setAccelRateDivisor(10.25); // 100 Hz sample rate
34+
activeSensor = ICM20948;
35+
}
3036
else
3137
{
3238
Serial.println("No compatible acceleration sensor found");
@@ -75,6 +81,17 @@ bool AccelerationSensor::readSensorData()
7581
buffer[ix++] = (imu_event.gyro[1]*2.0)/6550.0;
7682
buffer[ix++] = (imu_event.gyro[2]*2.0)/6550.0;
7783
}
84+
else if (activeSensor == ICM20948)
85+
{
86+
sensors_event_t a, g, m, temp;
87+
icm2.getEvent(&a, &g, &m, &temp);
88+
buffer[ix++] = a.acceleration.x;
89+
buffer[ix++] = a.acceleration.y;
90+
buffer[ix++] = a.acceleration.z;
91+
buffer[ix++] = g.gyro.x;
92+
buffer[ix++] = g.gyro.y;
93+
buffer[ix++] = g.gyro.z;
94+
}
7895
else
7996
{
8097
return false; // No sensor active

‎senseBox-bike-nancy/src/sensors/AccelerationSensor/AccelerationSensor.h‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "../BaseSensor.h"
55
#include <Adafruit_MPU6050.h>
66
#include "ICM42670P.h" // Include for ICM42670P
7+
#include <Adafruit_ICM20948.h> // Include for ICM20948
8+
#include <Adafruit_Sensor.h> // Include for ICM20948
79

810
class AccelerationSensor : public BaseSensor
911
{
@@ -20,12 +22,14 @@ class AccelerationSensor : public BaseSensor
2022
{
2123
NONE,
2224
MPU6050,
23-
ICM42670X // ICM42670X is a placeholder for the ICM42670P
25+
ICM42670X, // ICM42670X is a placeholder for the ICM42670P
26+
ICM20948
2427
};
2528

2629
SensorType activeSensor = NONE; // Track which sensor is active
2730
Adafruit_MPU6050 mpu;
2831
ICM42670 icm = ICM42670(Wire1, 0); // Instantiate an ICM42670 with LSB address set to 0
32+
Adafruit_ICM20948 icm2;
2933
};
3034

3135
#endif // ACCELERATION_SENSOR_H

0 commit comments

Comments
 (0)