Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BMX160 Step Detection

    BMX160 Step Detection

    Nikosant03
    Long-established Member

    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)

    Screenshot_48.png

     

    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

    13 REPLIES 13

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Nikosant03,

    Which mode did you use? If it is sensitive for you, you could choose normal mode robust mode for your application.

    Nikosant03
    Long-established Member

    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

    BSTRobin
    Community Moderator
    Community Moderator

    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.

    Nikosant03
    Long-established Member

    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

    BSTRobin
    Community Moderator
    Community Moderator

    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.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist