這個項目將為您介紹一款智能運動手環(huán) GetFit,您的終極健康和鍛煉伙伴。GetFit 是一款易于使用、可教的健身追蹤器,能夠檢測到無窮無盡的各種鍛煉。它由 Arduino Nano 33 BLE Sense 和 Edge Impulse 提供支持,是一個完全開源的項目。
特點如下:
Can Count 無限練習(xí)
完全開源
適用教學(xué)
可充電
估算每天和每周的卡路里燃燒
第 1 步:Arduino Nano 33 BLE Sense(項目大腦)
對于我們正在使用的這個項目,Arduino nano 33 BLE sense。這是一款支持 3.3V AI 的板,采用最小的可用外形尺寸。它帶有一系列嵌入式傳感器。
LSM9DS1(9軸IMU)
LPS22HB(氣壓計和溫度傳感器)
HTS221(相對濕度傳感器)
APDS-9960(數(shù)字接近、環(huán)境光、RGB 和手勢傳感器)
MP34DT05(數(shù)字麥克風(fēng))
在這里,我們利用 LSM9DS1 傳感器的 3 個加速通道來計算活動。
使用基于規(guī)則的編程來識別活動是一項非常艱巨的任務(wù),因為人們不會每次都以相同的方式執(zhí)行活動。但是機器學(xué)習(xí)可以輕松處理這些變化。要創(chuàng)建機器學(xué)習(xí)模型,您通常會在 Python 等高級語言之上使用 TensorFlow 或 Scikit-learn 等框架。仍然學(xué)習(xí)其中一些框架有很多好處,但在這里我們將使用一個名為 Edge Impulse 的工具,因為它只會讓模型訓(xùn)練變得更加容易。幸運的是,Edge Impulse 完全支持 Arduino Nano 33 BLE Sense。
第 2 步:邊緣脈沖
使用 Edge Impulse,您可以快速收集真實的傳感器數(shù)據(jù),在云端根據(jù)這些數(shù)據(jù)訓(xùn)練 ML 模型,然后將模型部署回您的 Arduino 設(shè)備。從那里您可以通過單個函數(shù)調(diào)用將模型集成到您的 Arduino 草圖中。
本文檔包含“如何開始使用 Edge Impulse 和 BLE Sense 板”?還有示例機器學(xué)習(xí)項目。如果您是該領(lǐng)域的初學(xué)者,請不要忘記嘗試。
第 3 步:數(shù)據(jù)采集
數(shù)據(jù)是機器學(xué)習(xí)模型中不可避免的一部分,數(shù)據(jù)采集和模型生成請訪問 edgeimpulse.com。
確保您的設(shè)備連接到邊緣脈沖。
然后我們用幾根扎線帶和一塊海綿將 Arduino 連接到我的手臂上,以使模型對每項活動都非常準(zhǔn)確。然后我們開始采樣。
我們收集了大約 17 分鐘的數(shù)據(jù)。你擁有的數(shù)據(jù)越多,你的模型就越好。另外,盡量保持一個平衡的數(shù)據(jù)集。為模型提供平衡的數(shù)據(jù)集將產(chǎn)生更高的準(zhǔn)確性。
在這里,我們還通過使它們在運動的不同開始和結(jié)束位置保持靜止來采取空閑狀態(tài)。我們還執(zhí)行了拆分?jǐn)?shù)據(jù)集來測試模型,這在分析模型時確實是一個很好的做法。訓(xùn)練數(shù)據(jù)用于訓(xùn)練您的模型,而測試數(shù)據(jù)用于在訓(xùn)練后測試您的模型的準(zhǔn)確性。
第 4 步:特征提取
弄清楚從我們的數(shù)據(jù)中提取哪些特征以提交給我們的模型進行訓(xùn)練并最終進行推理,這是我們在機器學(xué)習(xí)中可以做的最重要的事情之一。邊緣脈沖不是挑選一些原始樣本,而是以各種方式組合樣本以生成獨特的特征,幫助描述特定運動中正在發(fā)生的事情。
我們應(yīng)該首先創(chuàng)建一個脈沖,這是 Edge Impulse 對機器學(xué)習(xí)管道的說法,以便生成特征。您應(yīng)該看到第一個塊,它代表您的原始數(shù)據(jù)。這里我們使用窗口大小和窗口增加為 2000 毫秒,因為它非常適合我們的數(shù)據(jù)。處理塊是指我們在邊緣脈沖中的特征提取方法,邊緣脈沖會為我們的運動數(shù)據(jù)推薦頻譜分析塊,這就是我們想要的。在學(xué)習(xí)槽中,我們添加了一個神經(jīng)網(wǎng)絡(luò)交叉塊。盡管神經(jīng)網(wǎng)絡(luò)很棒,但它們有一個主要問題。在處理以前從未見過的數(shù)據(jù)(如新活動)時,它們毫無用處。因為神經(jīng)網(wǎng)絡(luò)只能訪問訓(xùn)練數(shù)據(jù),所以他們無法對此進行評估。即使你為它提供的東西與以前所見的完全不同,它仍然屬于四個類別之一。因此,我們還添加了一個 Anamoly 檢測塊來查找運動中的異常情況。它們實際上會在輸出中脫穎而出。在設(shè)計沖動之后,我們?yōu)檫@些數(shù)據(jù)生成了特征。
第 5 步:神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是一系列算法,通過模擬人腦運作方式的過程,努力識別一組數(shù)據(jù)中的潛在關(guān)系。從這個意義上說,神經(jīng)網(wǎng)絡(luò)是指神經(jīng)元系統(tǒng),無論是有機的還是人工的。
神經(jīng)網(wǎng)絡(luò)可以適應(yīng)不斷變化的輸入;因此網(wǎng)絡(luò)可以生成最好的結(jié)果,而無需重新設(shè)計輸出標(biāo)準(zhǔn) 現(xiàn)在是時候通過使用這些提取的特征來生成模型了。這些是我們用于生成模型的神經(jīng)網(wǎng)絡(luò)設(shè)置和架構(gòu)。
如果您對此沒有任何想法,請不要擔(dān)心邊緣沖動會自動為您建議最佳架構(gòu)和設(shè)置。
通過使用這些設(shè)置,我們?yōu)槟P蛯崿F(xiàn)了 93% 的準(zhǔn)確度。這似乎非常棒。下圖顯示了我們模型的混淆矩陣。
第 6 步:異常檢測
異常檢測的主要目的是在鍛煉期間識別異常,因此我們將忽略它們。我們已經(jīng)計算了數(shù)據(jù)的特征重要性,因為它們在異常檢測中非常重要。
邊緣脈沖實際上使用 K-means 聚類來進行異常檢測。此方法查看數(shù)據(jù)集中的數(shù)據(jù)點,并將相似的數(shù)據(jù)點分組到預(yù)定義的 K 個集群中。可以添加閾值來檢測異常:如果數(shù)據(jù)點與其最近的質(zhì)心之間的距離大于閾值,則為異常。
上圖顯示了異常瀏覽器窗口,當(dāng)我們嘗試對俯臥撐運動(測試數(shù)據(jù))進行分類時。如您所見,數(shù)據(jù)包含在集群中。對于異常,數(shù)據(jù)點將在集群之外。
第 7 步:模型測試
是時候用測試數(shù)據(jù)驗證我們的模型,看看它在新數(shù)據(jù)上的表現(xiàn)了。
它對測試數(shù)據(jù)進行了很好的分類,可以高達 87% 的準(zhǔn)確率。
第 8 步:部署
現(xiàn)在我們有了 ML 模型,是時候?qū)⑺c我們的邊緣設(shè)備(Arduino Nano 33 BLE sense)一起部署了。您訓(xùn)練的 ML 已經(jīng)針對嵌入式硬件(如微控制器)進行了優(yōu)化。將 ML 模型部署到 Nano 33 BLE Sense 板上非常簡單,只需導(dǎo)航到左側(cè)菜單上的部署即可。
在 Create library 部分,單擊 Arduino library,然后在底部單擊 Build 按鈕。這將啟動一個過程,Edge Impulse 為您的 Arduino 板創(chuàng)建一個庫,其中包含您訓(xùn)練的 ML 模型。構(gòu)建過程完成后,您的瀏覽器應(yīng)該開始下載生成的庫。在邊緣脈沖中,有用于為 NN 分類器選擇優(yōu)化的選項。通過選擇合適的,我們將獲得更好的設(shè)備性能。令人驚訝的事實是,Edge 沖動會為我們推薦最好的。通過啟用編譯器,我們將以更少的內(nèi)存獲得相同的精度。
第 9 步:數(shù)據(jù)流
為了將數(shù)據(jù)發(fā)送到云端,我們使用了 33 BLE sense 的藍牙低功耗。設(shè)備實際上會通過藍牙將數(shù)據(jù)發(fā)送到手機,然后手機將這些數(shù)據(jù)轉(zhuǎn)發(fā)到 firebase,這就是我們在這個項目中的數(shù)據(jù)庫。
低功耗藍牙,簡稱BLE,是藍牙的一種省電變體。BLE 的主要應(yīng)用是少量數(shù)據(jù)的短距離傳輸(低帶寬)。與始終開啟的藍牙不同,BLE 始終處于睡眠模式,除非在啟動連接時。這使得它消耗非常低的功率,我們將獲得更多的運行時間。
這就是我們使用 BLE 在手機和 Arduino nano 33 BLE 感應(yīng)器之間進行通信的原因。在這種情況下,Arduino 將充當(dāng)外圍設(shè)備,而手機將充當(dāng)中央設(shè)備。要使用 BLE 感知的 BLE 功能,我們正在使用 Arduino BLE 庫。
Firebase 是一個移動和 Web 應(yīng)用程序開發(fā)平臺。Firebase 讓開發(fā)人員可以專注于打造出色的用戶體驗。您不需要管理服務(wù)器。您不需要編寫 API。Firebase 是您的服務(wù)器、您的 API 和您的數(shù)據(jù)存儲,所有這些都編寫得非常通用,您可以對其進行修改以滿足大多數(shù)需求。在我們的項目中,我們使用 Firebase 的實時數(shù)據(jù)庫來即時發(fā)布和檢索數(shù)據(jù),這樣就沒有時間延遲。
查找 Firebase 配置
轉(zhuǎn)到 Firebase
然后轉(zhuǎn)到設(shè)置》項目設(shè)置
在您的應(yīng)用下 》 SDK 設(shè)置和配置 》 配置
第 10 步:用戶界面
我們?yōu)樵撛O(shè)備設(shè)計了一個神經(jīng)形態(tài)伴侶網(wǎng)絡(luò)應(yīng)用程序。Neumorphism 或軟 UI 是一種視覺風(fēng)格,它結(jié)合了背景顏色、形狀、漸變、高光和陰影,以確保圖形強烈的按鈕和開關(guān)。所有這些都可以實現(xiàn)柔軟的擠壓塑料外觀和幾乎 3D 造型。
在開始鍛煉之前,您需要在個人選項卡中提交您的個人詳細(xì)信息,例如姓名、年齡、性別、身高和體重。此信息用于分析鍛煉。
你可以在這里找到完整的代碼。
第11步:鋰電池
鋰聚合物電池的主要優(yōu)點是它們的能量或密度大約是鎳鎘或鎳氫電池的四倍。它們也非常輕巧且柔韌。這些優(yōu)勢讓我們?yōu)樵O(shè)備選擇鋰聚合物電池。為了減小尺寸,我們在這里使用了 160 毫安時的電池,這可以為設(shè)備提供最佳運行時間。LiPo的最大電壓為4.2v,標(biāo)稱電壓為3.7V。電壓從最大值 4.2 開始,在電池壽命的大部分時間里迅速下降到 3.7V 左右。一旦你達到 3.4V,電池就會沒電,在 3.0V 時,截止電路會斷開電池。
第 12 步:直流電壓升壓器
實際上,有兩個選項可以為 Arduino 供電,要么給標(biāo)準(zhǔn) 3.3V 到 3.3V 引腳,要么給 Vin 提供 (5-21) 伏特。在這兩種情況下,我們都應(yīng)該非常小心。
VIN(和 USB)進入 3.3V 開關(guān)穩(wěn)壓器。這具有 4.5V 的最小輸入電壓。當(dāng)我們將 3.3V 從電源直接饋入電路板時。我們應(yīng)該通過切斷那個鏈接來將該調(diào)節(jié)器的輸出與電路的其余部分隔離(參見上圖)。
注意:如果您提供超過 3.3V 的電壓,您可能會損壞電路板。
所以在這里我們應(yīng)該給 Arduino 的 Vin 提供 5V 電壓,但鋰電池在充滿電后最多只能提供 4.2V 電壓。
為了解決這個問題,我們使用了升壓轉(zhuǎn)換器模塊,該模塊可在 1.5V 至 5V 的各種輸入范圍內(nèi)提供 5V DC 穩(wěn)定電壓輸出。
這是升壓轉(zhuǎn)換器模塊,可在 1.5V 至 5V 的各種輸入范圍內(nèi)提供 5V DC 穩(wěn)定電壓輸出。這個小型微型電路可提升電壓電平并提供放大的穩(wěn)定 5V 輸出。對于不同的輸入范圍,它消耗不同的電流量來產(chǎn)生平衡的輸出。
使用該模塊時,必須符合以下條件1。輸入電壓不能大于標(biāo)稱電壓,否則會燒壞模塊2。輸入功率必須大于輸出功率,否則輸出電壓會低于標(biāo)稱電壓。 3.輸出負(fù)載不能大于標(biāo)稱負(fù)載,否則輸出電壓會小于標(biāo)稱電壓。
啟動電壓0.8V,輸出電流7mA
輸入1-1.5V,輸出5V 40-100mA
輸入1.5-2V,輸出5V 100-150mA
輸入2-3V,輸出5V 150-380mA
輸入3V以上,輸出5V 380-480mA;
DC-DC升壓轉(zhuǎn)換器模塊工作頻率為150KHZ,典型轉(zhuǎn)換效率為85%
第 13 步:TP4056 鋰離子電池充電器模塊
TP4056模塊是一個線性充電器鋰離子電池。該模塊使用 TP4056 鋰離子充電控制器 IC 和單獨的保護 IC。它們可以為由單節(jié)電池組成的電池充電。最重要的是,它支持恒流恒壓充電模式。用戶可以選擇這兩種模式。該模塊提供 1 安培的充電電流。
但是我們的電池只需要170毫安的電流。該模塊的有趣之處在于它有一個 RPROG 電流設(shè)置電阻器 (R3)。因此,我們可以通過更改該電阻輕松調(diào)整輸出電流。上圖顯示了 R3 及其當(dāng)前值。
TP4056 充電器模塊采用 0805 SMD 封裝,用于電阻。我們把 1.2K 的電阻換成了 10K?,F(xiàn)在它可以為電池提供130毫安的電流。所以我們的設(shè)備可以通過這個模塊輕松充電。
注意:您也可以為電池提供 1 安培的電流,但不會持續(xù)很長時間。
第 14 步:4mm SPDT 1P2T 滑動開關(guān)
4mm SPDT 1P2T 滑動開關(guān)與 TP4056 充電器模塊一起使用,用于調(diào)節(jié)充電控制器和升壓器之間的電流。上述模式顯示了 SPDT 開關(guān)中的電流。
第 15 步:用于案例的 Fusion 360
為了制作外殼,我們使用了 Fusion 360,外殼實際上由主體和蓋子兩部分組成。主體和蓋子通過摩擦配合連接。為了連接 TP4056 充電器模塊,我們實際上設(shè)計了一個可以插入內(nèi)部的支架。支架實際上是一個單獨的文件,沒有與正文合并。
在商店里找不到便宜的帶扣,這也是我們設(shè)計它的原因。這些是我們設(shè)計的 3D 打印部件。藍色和白色的顏色組合使它更具吸引力。我們總共有 4 個文件。點擊下方名稱可以直接下載:
knuckle.step
LId.step
Main_File.step
Stand.step
第 16 步:手環(huán)帶子
這種設(shè)計實際上是為手臂設(shè)計的,作為臂章。鉤環(huán)機構(gòu)與這個 1/2 英寸的松緊帶一起用作緊固件。所以任何人都可以通過輕松調(diào)整表帶來佩戴這款表帶。
第 17 步:組裝硬件
連接表帶后,我們開始按照上面給出的示意圖組裝硬件。使用上圖作為參考,我們的 Get-Fit 現(xiàn)在可以用了。
-
Arduino
+關(guān)注
關(guān)注
188文章
6490瀏覽量
190072 -
運動手環(huán)
+關(guān)注
關(guān)注
0文章
36瀏覽量
10747
發(fā)布評論請先 登錄
評論