D5-D6 KX023 accelerometer #7374
Replies: 1 comment
-
Posted at 2019-11-30 by Robin Fri 2019.11.29
Hello Martyn @iMartyn and thank you for posting the link to the datasheet. From that, I grabbed the URL (bottom p.1) to that company and opened the DDL for 'Developers': and scrolling down, found the detail datasheet for the KX023 (nine references total)
Google'ing 'using the kx023 as a step counter' yielded this paper with pseudo code: Posted at 2019-11-30 by @fanoush
For using it as step counter (which is why it is in the device) it probably helps to use the buffer and interrupt and set the performance mode so it does not produce so much data. Then the main CPU can sleep most of the time. Original firmware lasts week or more in this mode so it is not so bad for the battery. I haven't used it for step counting yet but I tried the tap and doubletab features which can automatically guess that you hit the tracker from some side (once or twice) which can be used as additional buttons (check more info and code in this github issue) Now I am actually trying to sync DS-D6 build with all the new stuff for bangle.js including tensorflow. That could possibly be used for step counting too instead of some random guesswork which movement means one step. Tried yesterday evening and currently the build with tensorflow is too large to fit (by some small amount) so I need to trim it down a bit. I am also working on procedure for moving the bootloader so there is a bit more space (it takes 24KB now, can fit into 12KB and be moved by 12KB up). Posted at 2019-11-30 by @allObjects
Nice and extremely creative! I like that very much. Posted at 2019-12-01 by iMartyn Hey @fanoush, great that you're active here. To reduce the power drain, does espruino on the D6 use deep sleep at all? I'd like to use setTimeout() but if there's a better way for battery life, I'd love to know. If we can get to the same level (1 week on battery) as the stock firmware, that'd be incredible! Posted at 2019-12-01 by Robin Sun 2019.12.01 This suggests automatically:
Posted at 2019-12-02 by @fanoush
yes, on nrf5x platform it works automatically out of box, it sleeps almost always. I got to the point that my simple watch app checking for button (and RX pin of serial console) lasts 30-40 days just sitting on the table with bluetooth advertising on (= default state). You can verify it by setting busy or sleep indicator (not sure what is the difference) However recently I tried espruino bootloader made for SDK12 and Softdevice 3.1.0 and I don't see such great power management with that now. I have same build of (latest) espruino for SDK11 and SDK12 and with exactly same javascript code the one with SDK12/SD3.x lasts days while SDK11 lasts weeks so I am investigating what is different. It is built from same git source the only difference seems to be the SoftDevice. I also tried to call NRF.sleep() on SDK12/SD3.x and it still discharges faster than SDK11 with advertising on. Will need more tests, maybe that DS-D6 used has already worse battery (it is the first DS-D6 I got). I don't have any measurement tools for such low currents so I just keep some idle on my desk and check battery voltage after few days. Posted at 2020-01-02 by user107850 Hi, I am also looking at hacking the DS-D6, well, actually the Lenovo HX03W. I am a bit disappointed that the accelerometer does not include step counting out of the box! Posted at 2020-05-20 by user107850 A followup on this: we have a C implementation of the algorithm, in case anyone wants to import it: https://github.com/Oxford-step-counter/C-Step-Counter Posted at 2020-05-20 by @fanoush Hello, nice, just checked it briefly and I am not sure about the 64bit time in processSample, what is the precision? miliseconds? can it be 32bit? or can I perhaps set frequency once? or send zero if this is just next sample with no delay. I guess I get batch of values from kx023 per interrupt but don't know the time, but values are probably spaced evenly with some preset frequency. But I guess I can start with time zero and then just increment 64bit value by some constant with each sample. EDIT: also looking into the code and ther is 64bit math used, is this really needed?, wouldn't 32bit integer or possibly 32bit float type be enough for such task? x,y,z data from kx023 is only 16bit Posted at 2020-05-20 by user107850 Hi fanoush, the time is meant to be in ms and it can be since the start of the system (the most common case) or since the start of the algorithm. If you don't have a clock, you can just feed a variable which you increment of +sampling_frequency each time, as you say yourself. It should be OK to reduce the type it to 32 bits, but there is no check when the clock is reset. Alternatively, you could just get rid of the timestamp altogether, but whenever time is used later in the algorithm, you need to assume that it has increased of a given period. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Posted at 2019-11-30 by iMartyn
Hi wonderful Espruino folks!
Whilst I'm waiting eagerly for my Bangle, figured I'd have a play with the D6 bracelet thing I have.
It has an KX023 accelerometer, but I'm looking for using the device as a sleep and step counter.
Using an accel as a step counter will drain the battery fast, but I wondered if anyone had attempted this? There's some clever features that I don't really understand of the accelerometer but the datasheet is sparse ( https://eu.mouser.com/datasheet/2/217/KX023%20Sell%20Sheet_0-542331.pdf ).
Anyone used this particular part and got any tips?
Cheers,
--
Martyn
Beta Was this translation helpful? Give feedback.
All reactions