06-29-2020 09:34 AM
Hi everyone,
I want to configure BMX160 for step detection for human beings. The sensor will be placed inside the insole.
Could you please help me to configure the parameters for min_steptime and min_threshold in order to achieve a robust step detection? I cannot find any information for those parameters into the datasheet.. The only info I can find is regarding the working mode (Normal, Sensitive, Robust) and there is no information regarding the bits on registers 0x7A - 0x7B (see 2.11.37 pg 88)
This is my configuration so far
void stepDetector_set(struct bmi160_dev *dev) {
int8_t rslt = 0;
/* Select the Interrupt channel/pin */
int_config.int_channel = BMI160_INT_CHANNEL_1; // Interrupt channel/pin 1
/* Select the Interrupt type */
int_config.int_type = BMI160_STEP_DETECT_INT;
/* Select the interrupt channel/pin settings */
int_config.int_pin_settg.output_en = BMI160_ENABLE; // na - Enabling interrupt pins to act as output pin
int_config.int_pin_settg.output_mode = BMI160_DISABLE; // na - Choosing push-pull mode for interrupt pin
int_config.int_pin_settg.output_type = BMI160_ENABLE; // na - Choosing active High output
int_config.int_pin_settg.edge_ctrl = BMI160_ENABLE; // na - Choosing edge triggered output
int_config.int_pin_settg.input_en = BMI160_DISABLE; // na - Disabling interrupt pin to act as input
int_config.int_pin_settg.latch_dur = BMI160_LATCH_DUR_NONE; // na - non-latched output
int_config.int_type_cfg.acc_step_detect_int.min_threshold = // ??????
int_config.int_type_cfg.acc_step_detect_int.step_detector_en = BMI160_ENABLE; // na - 1-enable, 0-disable the step detector
int_config.int_type_cfg.acc_step_detect_int.step_detector_mode = BMI160_STEP_DETECT_NORMAL; // na - Set Normal Mode
int_config.int_type_cfg.acc_step_detect_int.step_min_buf = // ??????
int_config.int_type_cfg.acc_step_detect_int.steptime_min = // ??????
/* Set the Step Detector interrupt */
rslt = bmi160_set_int_config(&int_config, dev); /* sensor is an instance of the structure bmi160_dev */
if (rslt != BMI160_OK) {
//printf("BMI160 Step Detector interrupt configuration failure!\n");
} else {
//printf("BMI160 Step Detector interrupt configuration done!\n");
}
}
Thanks in advance
Nick
Solved! Go to Solution.
07-01-2020 11:34 AM
Hello Nikosant03,
Which mode did you use? If it is sensitive for you, you could choose normal mode robust mode for your application.
07-01-2020 11:54 AM
Hi BSTRobin
I tried all the modes (sensitive/normal/robust) but I have the same problem. When I jump an interrupt is generated... Actually this makes sense since the step detection interrupt is based on the accelerometer. I suppose that while jumping I exceed the predefined accel's threshold and that's why the interrupt is generated. How could I work around this issue since I do not want to interrupt while jumping (it is not a step 😀)?
Thanks for your assistance so far!!
Nick
07-02-2020 09:36 AM
Hello Nick,
Could I know your application?
For your jumping test, it needed to record detailed test procedure according your application, capture more than one hundred steps of data(X, Y, Z axis LSB data) to analyse it.
07-02-2020 11:16 AM
Hi BSTRobin,
I will use the BMX160 inside the insole of a shoe. When steps are detected (meaning that the user has wear the shoe) then the interrupt signal will wake up the MCU from its Low Power state. This is the reason I want to filter out the jumps as well as events that are not related with steps, because I do not want the MCU to wake up from events irrelavant with steps.
Do you have any code, that is capable of detecting steps with higher accuracy?
Nick
07-03-2020 12:07 PM
Hello Nick,
To prevent false triggering, BMI160 step counter has a buffer mechanism. For example, if 6 steps was buffered, step counter value will be read out with the 7th step.