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