資料介紹
描述
概述
在 COVID19 之前,人們不得不在正常的生活活動中自愿或不自愿地進行一些體育鍛煉。例如,他們必須通勤到學校、辦公室或商業(yè)場所。在 COVID19 期間,許多人改變了生活方式。他們中的大多數(shù)人已經開始在家遠程工作,身體活動受到限制。此外,在學?;蜣k公室中,您必須保持坐姿,但在家里,您可以自由地以自己舒適的任何姿勢坐下或躺著,或者在工作時出于懶惰。從長遠來看,缺乏活動和不良姿勢會造成嚴重的健康問題。主要問題是在辦公椅上的不良坐姿引起的脊椎疼痛。在這個項目中,我為活動和姿勢監(jiān)測和警報可穿戴設備構建了一個概念驗證,它告訴用戶他們的活動或空閑情況,并及時提醒他們讓他們活躍或要求糾正姿勢。如果有人想重新創(chuàng)建項目,我會盡力提供分步說明。
設置開發(fā)環(huán)境
我正在使用 MacOS 進行開發(fā)。首先,我們需要從這里下載 nRF connect for Desktop:nRF Connect for Desktop 是一個跨平臺工具,可以使用 nRF5340 進行測試和開發(fā)。請按照上面鏈接中的安裝指南進行操作。安裝后打開應用程序并單擊工具鏈管理器以安裝 nRF Connect SDK。

默認情況下,它安裝在 MacOS 的 /opt/nordic/ncs 中。由于我們將使用帶有 nRF5340 DK 的 Adafruit display shield,Zephyr 中當前版本的 nrf5340 板文件不完全支持 Adafruit display shield 所需的 Arduino 定義。為了解決這個問題,我們需要應用補丁。請按照以下命令應用補丁。
$ cd /tmp
$ git clone https://github.com/NordicPlayground/ncs-display-ble-example.git
$ cd ncs-display-ble-example
$ cp nrf5340_display.patch /opt/nordic/ncs/v1.5.1/zephyr
$ cd /opt/nordic/ncs/v1.5.1/zephyr
$ git apply nrf5340_display.patch
此外,我們將在帶有 nRF5340 DK 的 Adafruit shield 中使用內置的 microSD 卡。我們需要在 board/shields/adafruit_2_8_tft_touch_v2/adafruit_2_8_tft_touch_v2.overlay 文件中將 arduino_header 引腳定義從 12 更改為 11,如下所示。
<&arduino_header 11 GPIO_ACTIVE_LOW>; /* D04 */
環(huán)境設置完成后,我們必須通過執(zhí)行以下命令來激活它。
$ source /opt/nordic/ncs/v1.5.1/zephyr/zephyr-env.sh
硬件設置
帶顯示屏蔽的 nRF5340 DK 用作 BLE 中央設備。連接到 ADXL345 加速度計的 nRF52840 加密狗用作 BLE 外設。連接圖原理圖可以在原理圖部分找到。物理連接如下圖所示。

我們需要在 BLE 外設應用程序中為 ADXL345 加速度計添加一個覆蓋文件,該文件定義加速度計 I2C 引腳定義和從機地址。
&i2c1 {
compatible = "nordic,nrf-twim";
status = "okay";
sda-pin = < 31 >;
scl-pin = < 29 >;
clock-frequency = ;
adxl345@53 {
compatible = "adi,adxl345";
reg = < 0x53 >;
label = "ADXL345";
};
};
應用
為此,創(chuàng)建了 3 個項目的概念證明。
- nrf52840_dongle_ble_peripheral_acc(作為數(shù)據節(jié)點)
- nrf5340_dk_ble_central_acc(用于數(shù)據收集)
- nrf5340_dk_ble_central_inf(用于模型推理)
所有項目的代碼都可以在 Github 存儲庫中找到:https ://github.com/metanav/AdvancedWearables
數(shù)據采集
為 4 個類收集訓練數(shù)據:
- 跑步
- 步行
- 坐得好
- 坐不好
BLE 外設(nRF52840 加密狗)以 25Hz 的采樣率收集 3 軸加速度計數(shù)據。每秒它會通過 150 字節(jié) [25 (Hz) x 3 (axis) x 2 (16 bit)] 有效負載通知連接的中央設備。一個易于使用的圖形用戶界面 (GUI) 是使用允許選擇訓練標簽和存儲數(shù)據的顯示屏蔽設計的。BLE 中央設備從外圍設備收集加速度計數(shù)據并將其保存到 SD 卡(內置在顯示擴展板中)。3 軸加速度計數(shù)據保存為 CSV 文件格式,文件名作為標簽與自動增量整數(shù)連接。示例如下所示:
Filename: Sitting_Bad.4.csv
-187,-937,218
-187,-937,218
-187,-937,218
-187,-906,218
-187,-906,218
-218,-906,218
-218,-906,218
-187,-937,218
-218,-906,218
-218,-906,218
-187,-906,218
-187,-906,218
-187,-906,218
-218,-906,218
-187,-906,218
-218,-906,218
-218,-906,218
-218,-906,218
-218,-906,218
-218,-906,218
-187,-906,218
為 nRF5340 DK 構建和刷新數(shù)據采集固件
使用 USB 電纜將 nRF5340 DK 連接到計算機并運行命令:
$ pip3 install -U west
$ git clone https://github.com/metanav/AdvancedWearables
$ cd AdvancedWearables/nrf5340_dk_ble_central_acc
$ source /opt/nordic/ncs/v1.5.1/zephyr/zephyr-env.sh
$ rm -rf build
$ west build -b nrf5340dk_nrf5340_cpuapp
$ west flash
nRF52840 Dongle 的構建和閃存固件
將 nRF52840 加密狗連接到計算機并運行命令:
$ cd AdvancedWearables/nrf52840_dongle_ble_peripheral_acc
$ rm -rf build
$ west build -b nrf52840dongle_nrf52840
我們不能用west來刷 nRF52840。我們將使用 nRF Connect > Programmer。首先按下加密狗上的重置按鈕,然后從左上角的下拉菜單中選擇設備。單擊添加十六進制文件按鈕>瀏覽...并選擇 AdvancedWearables/nrf52840_dongle_ble_peripheral_acc/build/zephyr/zephyr.hex 文件并單擊寫入按鈕。

數(shù)據收集演示
數(shù)據采集??演示(實時)
數(shù)據上傳到 Edge Impulse Studio
Edge Impulse Studio 為 nRF5340 DK 創(chuàng)建的固件很方便,它會自動將來自 USB UART 連接的數(shù)據上傳到 DK。但我想制作一款可用于現(xiàn)場數(shù)據收集和模型推理的可穿戴設備。走路或跑步時攜帶筆記本電腦采集數(shù)據不方便。此外,您可能在現(xiàn)場沒有互聯(lián)網連接。所以我創(chuàng)建了完全獨立的設備,它通過 BLE 從外圍設備捕獲數(shù)據并保存到 microSD 卡中。捕獲的數(shù)據被復制到計算機。我編寫了一個腳本(如下),它將原始加速度計數(shù)據轉換為 Edge Impulse 工作室訓練所需的數(shù)據采集 JSON 格式。
import json
import time
import hmac
import hashlib
import os
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
HMAC_KEY = config['edge_impulse']['hmac_key']
dir = 'raw_data'
for filename in os.listdir(dir):
if filename.endswith('.csv'):
prefix, ext = os.path.splitext(filename)
outfilename = os.path.join('formatted_data', '{}.json'
.format(prefix))
values = []
with open(os.path.join(dir, filename)) as fp:
for line in fp:
line = line.strip()
values.append([int(i) for i in line.split(',')])
emptySignature = ''.join(['0'] * 64)
data = {
"protected": {
"ver": "v1",
"alg": "HS256",
"iat": time.time()
},
"signature": emptySignature,
"payload": {
"device_name": "E1:01:2D:53:40:DA",
"device_type": "NRF5340DK",
"interval_ms": 40,
"sensors": [
{ "name": "accX", "units": "m/s2" },
{ "name": "accY", "units": "m/s2" },
{ "name": "accZ", "units": "m/s2" }
],
"values": values
}
}
# encode in JSON
encoded = json.dumps(data)
# sign message
signature = hmac.new(bytes(HMAC_KEY, 'utf-8'),
msg = encoded.encode('utf-8'),
digestmod = hashlib.sha256).hexdigest()
# set the signature again in the message, and encode again
data['signature'] = signature
encoded = json.dumps(data, indent=4)
with open(outfilename, 'w') as fout:
fout.write(encoded)
首先將 microSD 卡中的所有原始數(shù)據復制到計算機的 raw_data 目錄中。您需要在 Edge Impulse 注冊一個帳戶并創(chuàng)建一個新項目來上傳數(shù)據。

此外,您需要 Edge Impulse Studio 項目的 HMAC 密鑰來生成數(shù)據采集格式的簽名。您可以從 Dashboard > Keys [tab] 復制 HMAC 密鑰,如下所示。

使用您自己的 HMAC 密鑰創(chuàng)建一個包含以下內容的config.ini文件。
[edge_impulse]
hmac_key = <your hmac key>
執(zhí)行以下命令。
$ mkdir formatted_data
$ python3 data_aquisition_format.py
轉換后的數(shù)據如下圖所示。采樣率為 25 Hz,因此 interval_ms 為 40ms,如果您的傳感器采樣率不同,可以在腳本中更改。
{
"protected": {
"ver": "v1",
"alg": "HS256",
"iat": 1623920716.465548
},
"signature": "19bec321f71e504460add5f453fc12d636153f06ebac2f3f6ba4a49813",
"payload": {
"device_name": "E1:01:2D:53:40:DA",
"device_type": "NRF5340DK",
"interval_ms": 40,
"sensors": [
{ "name": "accX", "units": "m/s2" },
{ "name": "accY","units": "m/s2" },
{ "name": "accZ", "units": "m/s2" }
],
"values": [
[ -187, -906, 250 ],
[ -218, -906, 250 ],
[ -187, -906, 250 ],
[ -187, -875, 250 ],
// more values
]
}
}
使用 Edge Impulse CLI 上傳數(shù)據。請按照說明在此處安裝 CLI:。下面的命令用于上傳所有 JSON 文件,這些文件會自動拆分為訓練和測試數(shù)據集。
$ cd formatted_data
$ edge-impulse-uploader --category split *.json
我們可以在Data Acquisition頁面看到上傳的數(shù)據。

訓練
轉到 Impulse Design > Create Impulse 頁面并單擊Add a processing block并選擇Spectral Analysis ,它非常適合分析來自加速度計的重復數(shù)據。它提取信號隨時間變化的頻率和功率特性。此外,在同一頁面上單擊添加學習塊并選擇從數(shù)據中學習模式的神經網絡(Keras),并將其應用于新數(shù)據。它非常適合對運動數(shù)據進行分類。由于 Sitting 狀態(tài)的運動識別需要更長的持續(xù)時間,因此對于時間序列數(shù)據塊,我選擇了 2000ms 窗口大小和 100ms 窗口增加。現(xiàn)在單擊保存脈沖按鈕。

現(xiàn)在轉到 Impulse Design > Spectral Features 頁面并單擊Save parameters按鈕。我保留了對我來說看起來不錯的默認值。

單擊“保存參數(shù)”按鈕將重定向到另一個頁面,我們應該單擊“生成特征”按鈕。完成特征生成通常需要幾分鐘。我們可以在 Feature Explorer 中看到生成的特征的 3D 可視化。數(shù)據似乎對步行和跑步有明確的劃分,但坐姿有點接近。訓練和學習模式并在類之間進行更好的分離將是神經網絡的工作。
現(xiàn)在轉到 Impulse Design > NN Classifier 頁面并定義神經網絡架構。我創(chuàng)建了具有 4 個密集(完全連接)層的模型,這些層非常適合頻譜分析 DSP 模塊的輸出。訓練周期數(shù)選擇為 50。

現(xiàn)在單擊開始訓練按鈕并等待幾分鐘,直到訓練完成。我們可以在下面看到訓練輸出。該模型有 86.8% 的準確率,對于這么小的數(shù)據集來說還不錯,我們還有改進的空間。此外,混淆矩陣清楚地顯示了 Sitting_Good 和 Sitting_Bad 類具有誤報,可以通過為這兩個類收集更多數(shù)據來改進。對于這個概念驗證項目,我們將使用這個模型。

部署
Edge Impulse Studio 支持 nRF5340 DK 部署固件二進制文件,但對于這個項目,我們正在使用其他功能,例如連接到外圍設備以獲取數(shù)據并在 Adafruit 顯示屏上顯示結果。因此,在部署頁面中,我們將選擇創(chuàng)建庫 > C++ 庫選項。對于Select optimization選項,我們將選擇Enable EON Compiler以減少模型的內存使用。此外,我們將選擇未優(yōu)化 (Float32) 模型,因為它比量化 (Int8) 模型具有更好的準確性。現(xiàn)在單擊Build按鈕,幾秒鐘后庫包將下載到本地計算機。
對于推理,我創(chuàng)建了一個新的 nRF5340 DK 項目,它借用了數(shù)據收集項目中的大部分 BLE 和顯示代碼。由于推理庫主要包含 C++ 代碼庫,我們需要在項目設置中更改一些內容。
- 將數(shù)據采集項目復制的src目錄下的所有*.c文件重命名為*.cpp
- 在幾個頭文件中使用 extern "C"
- 在 prj.conf 中添加 C++ 配置
CONFIG_CPLUSPLUS=y
CONFIG_LIB_CPLUSPLUS=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_FPU=y
現(xiàn)在解壓縮并將以下文件移動到項目根目錄。
- CMakeLists.txt
- 邊緣脈沖 SDK
- 模型參數(shù)
- tflite 模型
構建并刷新 nRF5340 DK 的推理固件
使用 USB 電纜將 nRF5340 DK 連接到計算機并運行以下命令:
$ git clone https://github.com/metanav/AdvancedWearables
$ cd AdvancedWearables/nrf5340_dk_ble_central_inf
$ source /opt/nordic/ncs/v1.5.1/zephyr/zephyr-env.sh
$ rm -rf build
$ west build -b nrf5340dk_nrf5340_cpuapp
$ west flash
推理演示
BLE Central (nRF5340) 從 BLE 外設收集 2000 毫秒的加速度計數(shù)據并運行推理。推理日志(下圖)顯示 DSP 時間為 8 毫秒,分類時間為 1 毫秒,這非???。由于推理速度很快,因此每個推理周期的總滯后時間不超過 2 秒(用于從外圍設備累積數(shù)據)。
Predictions (DSP: 8 ms., Classification: 1 ms., Anomaly: 0 ms.)
Features (8 ms.): 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.509764 0.793651 1.043532 3.571429 0.199363 0.000000 0.000000 0.128670 0.626574 0.175257 0.013350
Running neural network...
Predictions (time: 1 ms.):
Running:.0.000000
Sitting_Bad:.0.226727
Sitting_Good:.0.773085
Walking:.0.000188
結論
該項目最初是作為測試 nRF5340 DK 機器學習可穿戴項目能力的應用程序而開始的。剛開始這似乎是一項艱巨的任務,但在花了一些時間學習 SDK 之后,它變得簡單而令人滿意。事實證明,nRF5340 DK 是一款功能強大的硬件,非常適合 TinyML。此外,Edge Impulse Studio 是一個易于使用的在線工具,可用于訓練和部署機器學習模型以進行快速原型制作。我要感謝 Nordic Semiconductor 為我提供了本次比賽的免費硬件,并迫使我提高了我生疏的 C/C++ 技能。
- 可穿戴設備的電針活動應用簡介
- 可穿戴設備上的光學心率監(jiān)測(OHRM)申請簡介
- 可穿戴設備上的血壓監(jiān)測申請簡介
- 用于便攜可穿戴設備的RX8130CE
- 2023可穿戴設備行業(yè)技術與市場分析 22次下載
- 可穿戴設備開源分享
- 支持Twitch的簡單可穿戴設備
- 如何設計更加小巧、續(xù)航能力更強的可穿戴設備
- 可穿戴設備的設計方向與規(guī)范資料下載
- 可穿戴設備的電源方案探討資料下載
- 可穿戴設備中的電源管理技術資料下載
- 基于無線充電為可穿戴設備提供標準的設計方案 6次下載
- 基于無線模塊的可穿戴設備的應用方案 3次下載
- 使用無線模塊構建可穿戴設備 9次下載
- 移動與可穿戴設備的解決方案 25次下載
- 醫(yī)療可穿戴設備的設計需求和解決方案 3408次閱讀
- 可穿戴設備、狀態(tài)監(jiān)測和物聯(lián)網應用中的關鍵規(guī)格和功能 1118次閱讀
- 提高生物傳感可穿戴設備心率監(jiān)測性能的指南 1717次閱讀
- 可穿戴心率監(jiān)測算法的驗證與性能 1663次閱讀
- 可穿戴設備應用程序的實現(xiàn) 965次閱讀
- 可穿戴設備發(fā)展歷程!醫(yī)療可穿戴設備和傳感器生態(tài)系統(tǒng)正在快速成長! 6647次閱讀
- 可穿戴系統(tǒng)的生物阻抗測量 8015次閱讀
- 淺析Dialog可穿戴設備解決方案 4932次閱讀
- 關于可穿戴設備市場的調研報告 3111次閱讀
- MEMS六軸傳感器的可穿戴設備電路設計—電路精選(37) 4012次閱讀
- 可穿戴設備氧傳感器電路解析—電路精選(35) 4664次閱讀
- MCU如何滿足可穿戴設備的設計需求 763次閱讀
- 醫(yī)療可穿戴設備:如何打開慢性病困惑的“黑箱” 1195次閱讀
- 簡單有效的可穿戴設備ESD靜電防護原則 3076次閱讀
- 為什么可穿戴設備如此流行? 1131次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論