.. highlight:: csharp BMI160 Accelerometer ==================== The `BMI160 `_ accelerometer is the most commonly used accelerometer on the available MbientLab boards and has additional features not available on the :ref:`BMA255 `. It also comes with a :doc:`gyroscrope ` giving 6 degrees of freedom. :: using MbientLab.MetaWear.Sensor; IAccelerometerBmi160 accBmi160 = metawear.GetModule(); Output Data Rate ---------------- Available output data rates for the BMI160 device is enumerated by its `OutputDataRate `_ enum. You can use these entries to set the ODR to a known quantity. :: using MbientLab.MetaWear.Sensor; using MbientLab.MetaWear.Sensor.AccelerometerBmi160; using MbientLab.MetaWear.Sensor.AccelerometerBosch; // set odr to 25Hz // set range to +/-4g accBmi160.Configure(odr: OutputDataRate._25Hz, range: DataRange._4g); Step Detection -------------- The BMI160 chip comes with a step detection algorithm that can either send an interupt for every step detected (async producer) or accumulate the steps in a counter that returns the value when requested (forced producer). The algorithm has 3 operational modes that modify the sensitivity and robustness of the detector. It is important that you set the mode before using the detection algorithm. ========= ============================================================================================== Mode Description ========= ============================================================================================== Normal Balanced between false positives and false negatives, recommended for most applications Sensitive Few false negatives but eventually more false positives, recommended for light weighted people Robust Few false positives but eventually more false negatives ========= ============================================================================================== Data from both the counter and detector are unsigned integers with the step counter able to count to 2^16 steps (2 bytes). :: using MbientLab.MetaWear.Sensor.AccelerometerBmi160; var detector = accBmi160.StepDetector; // Configuration the algorithm to run as a detector // using normal detection mode detector.Configure(mode: StepDetectorMode.Normal); await detector.AddRouteAsync(source => source.Stream(data => Console.WriteLine("Took a step"))); detector.Start(); accelerometer.Start(); Significant Motion ------------------ The BMI160 chip also has an additional motion detection algorithm that detects significant motion i.e. a change in location from walking or being in a moving vehicle. It detects this type of motion by sleeping for a period of time (skip time), when motion is first detected, then still detecting motion for a window of time (proof time) when waking up. :: using MbientLab.MetaWear.Sensor.AccelerometerBmi160; accBmi160.Motion.ConfigureSignificant(proof: ProofTime._1s, skip: SkipTime._1_5s); await accBmi160.Motion.AddRouteAsync(source => source.Stream(data => Console.WriteLine("significant motion detected")) ); accBmi160.Motion.Start(); accBmi160.Start();