README.rst
1.. zephyr:code-sample:: tdk_apex
2 :name: TDK Advanced Pedometer and Event Detection (APEX)
3 :relevant-api: sensor_interface
4
5 Get TDK APEX event detection (trigger mode).
6
7Overview
8********
9
10This sample application shows how to use the APEX (Advanced Pedometer
11and Event Detection) features of TDK Invensense sensors. It consists of:
12** Pedometer: Tracks step count, and provide details such as the cadence
13and the estimated activity type (Walk, Run, Unknown).
14** Tilt Detection: Detects the Tilt when tilting the board with an angle
15of 30 degrees or more. The tilt event is generated when the
16position is held for 4 seconds.
17** Wake on Motion (WoM): Detects motion per axis exceeding 195 mg threshold.
18** Significant Motion Detector (SMD): Detects when the user has moved
19significantly.
20APEX features support are configured through devicetree.
21
22References
23**********
24
25 - https://invensense.tdk.com/download-pdf/an-000271-icm-42607x-and-icm-42670x-apex-motion-functions-description-and-usage/
26
27Driver configuration
28********************
29
30The APEX is based on accelerometer data only. The TDK Sensor driver configures
31accelerometer low power mode and the APEX operating frequency (25Hz or 50Hz).
32
33Wiring
34*******
35
36This sample uses an external breakout for the sensor. A devicetree
37overlay must be provided to identify the TDK sensor, the SPI or I2C bus interface and the interrupt
38sensor GPIO.
39
40Building and Running
41********************
42
43This sample supports TDK IMU devices. Each device needs
44to be aliased as ``tdk-apex-sensorN`` where ``N`` goes from ``0`` to ``9``. For example:
45
46.. code-block:: devicetree
47
48 / {
49 aliases {
50 tdk-apex-sensor0 = &icm42670p;
51 };
52 };
53
54This sample supports APEX feature of TDK device. It needs to be specified as bellow:
55
56.. code-block:: devicetree
57
58 icm42670p: icm42670p@0 {
59 apex = "pedometer";
60 }
61
62Make sure the apex feature used is in devicetree, then build and run with:
63
64.. zephyr-app-commands::
65 :zephyr-app: samples/sensor/tdk_apex
66 :board: nrf52dk/nrf52832
67 :goals: build flash
68
69Sample Output
70=============
71
72.. code-block:: devicetree
73
74 icm42670p: icm42670p@0 {
75 apex = "pedometer";
76 }
77
78.. code-block:: console
79
80 Found device "icm42670p@68", getting sensor data
81 [0:00:09.287]: STEP_DET count: 6 steps cadence: 2.0 steps/s activity: Unknown
82 [0:00:09.689]: STEP_DET count: 7 steps cadence: 2.1 steps/s activity: Walk
83 [0:00:10.051]: STEP_DET count: 8 steps cadence: 2.2 steps/s activity: Walk
84 [0:00:10.433]: STEP_DET count: 9 steps cadence: 2.2 steps/s activity: Walk
85 [0:00:10.835]: STEP_DET count: 10 steps cadence: 2.3 steps/s activity: Walk
86
87 <repeats endlessly>
88
89.. code-block:: devicetree
90
91 icm42670p: icm42670p@0 {
92 apex = "tilt";
93 }
94
95.. code-block:: console
96
97 Found device "icm42670p@68", getting sensor data
98 [0:00:15.249]: TILT
99 [0:00:21.479]: TILT
100 [0:00:26.765]: TILT
101
102 <repeats endlessly>
103
104.. code-block:: devicetree
105
106 icm42670p: icm42670p@0 {
107 apex = "wom";
108 }
109
110.. code-block:: console
111
112 Found device "icm42670p@68", getting sensor data
113 [0:00:02.555]: WOM x=1 y=0 z=1
114 [0:00:02.636]: WOM x=0 y=0 z=1
115 [0:00:02.797]: WOM x=0 y=1 z=0
116 [0:00:02.877]: WOM x=0 y=0 z=1
117 [0:00:02.957]: WOM x=1 y=1 z=1
118
119 <repeats endlessly>
120
121.. code-block:: devicetree
122
123 icm42670p: icm42670p@0 {
124 apex = "smd";
125 }
126
127.. code-block:: console
128
129 Found device "icm42670@68", getting sensor data
130 [0:00:04.622]: SMD
131 [0:00:05.084]: SMD
132 [0:00:05.566]: SMD
133
134 <repeats endlessly>
135