• <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>

    24小時(shí)聯(lián)系電話(huà):18217114652、13661815404

    中文

    您當前的位置:
    首頁(yè)>
    電子資訊>
    行業(yè)資訊>
    健身手環(huán):使用 NodeM...

    行業(yè)資訊

    健身手環(huán):使用 NodeMCU 和脈沖傳感器的物聯(lián)網(wǎng)項目


    健身手環(huán):使用 NodeMCU 和脈沖傳感器的物聯(lián)網(wǎng)項目

    我們這一代人已經(jīng)非常適應久坐不動(dòng)的生活方式,現在很難回到健康的生活方式。因此,現在控制我們的活動(dòng)比以往任何時(shí)候都更加重要。為了適應健康的生活方式,重要的是要注意我們每天消耗和燃燒的卡路里量。建議除了我們身體燃燒的卡路里之外,每天至少燃燒500600卡路里的熱量,以調節身體機能。健身帶幫助我們注意每天燃燒的卡路里數量,從而席卷了市場(chǎng)。這個(gè)概念性的健身手環(huán)是一個(gè)物聯(lián)網(wǎng)項目,它使用心跳來(lái)計算燃燒的卡路里并幫助用戶(hù)使用智能手機應用程序監控他/她的活動(dòng)水平。

    健身帶的工作原理:

    該健身手環(huán)系統使用心跳傳感器以每分鐘心跳次數 (BPM) 為單位測量心臟活動(dòng)。心跳是了解身體活動(dòng)的關(guān)鍵參數。當進(jìn)行任何體力活動(dòng)時(shí),我們的心率會(huì )升高,而當我們放松時(shí),心跳會(huì )恢復正常。這使得心跳成為了解燃燒卡路里數量的重要參數。除了心跳率,我們還需要其他參數,例如用戶(hù)的性別、年齡和體重。這些參數將幫助我們推斷給定時(shí)間內燃燒的卡路里。

    當系統開(kāi)啟時(shí),NodeMCU 將等待來(lái)自 Blynk 應用程序的啟動(dòng)指令,該應用程序通過(guò) WiFI NodeMCU 連接到本地網(wǎng)絡(luò )。然后用戶(hù)需要輸入個(gè)人資料詳細信息,例如性別、年齡和體重。完成后,用戶(hù)可以使用 Blynk 應用程序中的設備開(kāi)啟按鈕打開(kāi)健身手環(huán)?,F在 NodeMCU 將開(kāi)始讀取心跳模擬數據并跟蹤時(shí)間。

    這款健身手環(huán)使用PLSNSR1 脈搏傳感器來(lái)測量心跳速率。輸入的心跳被轉換為每分鐘的心跳次數和 NodeMCU 中燃燒的卡路里。結果輸出數據被傳輸回 Blynk 應用程序以顯示在用戶(hù)界面中。

    在用戶(hù)界面中,BPM(每分鐘節拍數)將每秒更新一次,燃燒的卡路里量將每 10 秒更新一次,以幫助用戶(hù)監控他/她的健身計劃的強度水平。

    會(huì )話(huà)完成后,用戶(hù)需要使用 Blynk 應用程序界面關(guān)閉系統?,F在,一封包含燃燒卡路里量和會(huì )話(huà)持續時(shí)間的電子郵件將發(fā)送到用戶(hù)電子郵件,以幫助記錄他們燃燒的卡路里。

    物聯(lián)網(wǎng)健身帶特點(diǎn):

    BPM(每分鐘比特數)計算平均心跳率。

    10 秒確定并更新云中燃燒的總卡路里。

    用戶(hù)可以通過(guò)物聯(lián)網(wǎng)應用程序或智能手機控制何時(shí)開(kāi)始和停止健身帶活動(dòng)。

    向用戶(hù)發(fā)送關(guān)于平均心跳 (BPM) 和燃燒卡路里的警報電子郵件。

    LED 指示燈根據用戶(hù)心跳速度閃爍。

    所需硬件:

    節點(diǎn)單片機

    脈搏傳感器(PLSNSR1)

    引領(lǐng)

    電阻器(220 歐姆)

    跳線(xiàn)

    該應用程序采用以下三個(gè)輸入

    性別

    年齡

    重量

    在給出有效輸入后,系統可以被打開(kāi)。ON OFF 按鈕用作樂(lè )隊的 ON/OFF 開(kāi)關(guān)。當用戶(hù)激活此按鈕時(shí),上述三個(gè)參數將通過(guò)云發(fā)送到 NodeMCU,從而實(shí)現卡路里計算。當年齡和體重字段中給出無(wú)效輸入時(shí),即為零,則健身追蹤器系統將保持關(guān)閉狀態(tài)。

    NodeMCU 在處理完傳感器數據后會(huì )更新應用程序界面字段,例如 – BPM(每秒更新一次)和卡路里消耗(每 10 秒更新一次)。這將幫助用戶(hù)實(shí)時(shí)監測他們燃燒的卡路里并評估他們的健身計劃的強度。

    公式:

    將心跳率轉換為燃燒的卡路里所需的公式是:

    男用

    卡路里消耗 = ((-55.0969 + (0.6309*HR) + (0.1988*W) + (0.2017*A))/4.184 )*60*T

    女用

    卡路里消耗 = ((-20.4022+(0.4472*HR) – (0.1263*W) + (0.074*A))/4.184)*60*T

    其中
    HR –
    心跳率(以 BPM 為單位)
    W –
    體重(以千克為單位)
    A –
    年齡(以年為單位)
    T –
    鍛煉的持續時(shí)間(以小時(shí)為單位)

    原型:

    將健身手環(huán)連接到物聯(lián)網(wǎng)云:

    在代碼中添加您的智能手機 SSID 和密碼并上傳到 NodeMCU。在代碼中使用從 Blynk 應用程序生成的授權令牌。等待 NodeMCU 與您的智能手機連接。當設備配對后,NodeMCU 將等待來(lái)自用戶(hù)的 Device ON 命令。

    BPM 的計算和更新,卡路里燃燒將一直執行,直到 NodeMCU 收到 Device OFF 命令。如果您打算更換要用于與手環(huán)配對的智能手機,則必須在替換目標設備的 SSID 和密碼的代碼中進(jìn)行更改。

    算法:

    等待與 Blynk 應用程序的連接。

    讀取來(lái)自 Blynk 用戶(hù)界面的輸入——來(lái)自用戶(hù)的年齡、體重和性別。

    等待 Device ON 按鈕被激活,如果它被激活,請轉到步驟 6。

    如果激活了 ON 按鈕,則將當前系統時(shí)間保存在一個(gè)變量中。

    讀取傳感器模擬輸入數據(心跳)并將它們轉換為每分鐘節拍數 (BPM)。將 BPM 上傳到 Blynk UI。

    計算每 10 秒燃燒的卡路里。將燃燒的卡路里上傳到 Blynk UI。

    重復該過(guò)程,直到取消激活 (OFF) ON 按鈕。

    Blynk UI 中顯示最終燃燒的卡路里和 BPM。

    代碼 :

    將必要的頭文件包含到您的 Arduino IDE 目錄中:ESP8266WiFi.h、BlynkSimpleEsp8266.h。該健身手環(huán)項目由 Nihar Gupta 構建和測試。您可以在此處找到Fitness Band – Github 存儲庫。

    // 包含頭文件

    #define BLYNK_PRINT 串行

    #include<ESP8266WiFi.h>

    #include <BlynkSimpleEsp8266.h>

    // Blynk 生成的身份驗證令牌

    char auth[] = "gTJf3EcGRGacgcW24I-OWcmj70OlwjZ2";

    // 您的 WiFi 憑據。

    // 對于開(kāi)放網(wǎng)絡(luò ),將密碼設置為“”。

    char ssid[] = "你的 SSID"; //替換為你的SSID

    char pass[] = "您的密碼"; //替換為你的密碼

    // 外部 LED

    int led_pin = D6;

    // 校準所需的變量

    const int postInterval = 10 * 1000;

    內率[10];                   

    unsigned long sampleCounter = 0;

    無(wú)符號長(cháng) lastBeatTime = 0; 

    unsigned long lastTime = 0, N;

    INT BPM = 0;

    INT IBI = 0;

    整數 P = 512;

    INT = 512;

    整數閾值 = 512; 

    國際放大器 = 100;                   

    整數信號;

    布爾脈沖 = 假;

    布爾值 firstBeat = true;         

    布爾 secondBeat = true;

    布爾 QS = 假;   

    //需要計算的變量

    布爾 time_noted=false;

    無(wú)符號長(cháng)起始時(shí)間=0;//設備的啟動(dòng)時(shí)間,以毫秒為單位

    布爾郵件發(fā)送=假;   

    unsigned long average_bpm=0; // 存儲平均 bpm

    unsigned long bpm_counted=0; // 存儲計算 bpm 的次數

    布爾男性=真;

    整數權重=0;

    整數年齡=0;

    int start_button=0;

    int do_mail_send =0;

    int heart_rate=0;

    浮動(dòng)卡路里燃燒;

    浮動(dòng)時(shí)間_持續時(shí)間=0;

    浮動(dòng) total_calorie_burn=0;

    // 設置塊

    無(wú)效設置(){

      // 把你的設置代碼放在這里,運行一次:

       Serial.begin(115200);

       //引腳模式

       引腳模式(A0,輸入);

    pinModeled_pin,輸出);

       //BLynk設置

       Blynk.begin(auth, ssid, pass);

    }

    無(wú)效循環(huán)(){

      // 把你的主要代碼放在這里,重復運行:

      Blynk.run(); // Blynk 將持續運行

      // 這里 if 塊將在 blynk 中的啟動(dòng)按鈕打開(kāi)時(shí)執行

      if(start_button==1 && time_noted==true){  

        if(check_if_data_is_correct()==false) 繼續;// 在打開(kāi)設備之前檢查用戶(hù)是否輸入了年齡、性別和體重   

        //Serial.println("BPM 正在計算中");

        計算 bpm();       

        if(millis()-starting_time>=10000){

            計算卡路里_10秒();// 計算每 10 分鐘燃燒的卡路里

        }

      }

    // else if 塊將在開(kāi)始按鈕關(guān)閉時(shí)執行

      否則如果(郵件發(fā)送==真){

        計算卡路里_10秒();

        發(fā)電子郵件();

        郵件發(fā)送=假;

        reset_bpm(); // 當設備關(guān)閉時(shí)重置變量

      }

    }

    // 在打開(kāi)設備之前檢查用戶(hù)是否輸入了年齡、性別和體重

    bool check_if_data_is_correct(){

      如果(體重<=0 || 年齡<=0{

        Blynk.virtualWrite(V9, );

        開(kāi)始按鈕=0;

        時(shí)間注意=假;

        reset_bpm();

       返回假;

      }

      返回真;

    }

    // 該函數每10秒計算一次消耗的卡路里,并更新為blynk

    void calculate_calories_10sec(){

      開(kāi)始時(shí)間=毫秒();

      heart_rate=average_bpm/bpm_counted;

      如果(男==真){

        Serial.println("");

        卡路里燃燒=(浮點(diǎn)數)(((-55.0969+0.6309*心率)+0.1988*體重)+0.2017*年齡))/4.184*60*0.00277778);

      }

      別的{

        Serial.println("");

        卡路里燃燒=(浮動(dòng))(((-20.4022+0.4472*心率)-0.1263*體重)+0.074*年齡))/4.184*60*0.00277778);

      }

      total_calorie_burn+=calorie_burn;

      Serial.println(重量);

      Serial.println(年齡);

      Serial.println(average_bpm);

      Serial.println(bpm_counted);

      Serial.println(calorie_burn);

      Serial.println(time_duration);

    Serial.println(starting_time);

      Blynk.virtualWrite(V7,total_calorie_burn);

    }

    // 此函數用于在設備下線(xiàn)時(shí)向用戶(hù)發(fā)送有關(guān)其狀態(tài)的電子郵件

    void send_email()

    {

      如果(does_mail_send == 0{

        String msg="Hi Nihar Gupta。你的平均心跳是:"+(String)heart_rate+"。你的"+(String)calorie_burn+"卡路里是在"+(String)time_duration+"Hrs"的時(shí)間內燃燒的;

        Blynk.email("youremail@yourdomain.com", "心跳通知", msg); //替換為您的電子郵件

        do_mail_send = 1;

      }

    }

    // 當設備下車(chē)時(shí)重置變量

    void reset_bpm(){

      average_bpm=0;

      bpm_counted=0;

      total_calorie_burn=0;

      Blynk.virtualWrite(V7,0);

      Blynk.virtualWrite(V1,0);

    }

    // 此函數將負責初始化 BPM

    無(wú)效計算_bpm(){

      如果(QS ==真){

       Serial.println("BPM: "+ String(BPM));

       Blynk.virtualWrite(V1,BPM);

       average_bpm+=BPM;

       bpm_counted++;

       QS = 假;

       } else if (millis() >= (lastTime + 2)) {

         讀脈沖();

         lastTime = 毫秒();

       }

           

    }

    // 此函數將讀取模擬數據并將數據校準為 BPM

    無(wú)效讀脈沖(){

      信號 = 模擬讀?。?span>A0);      

      模擬寫(xiě)入(led_pin,信號);   

    樣本計數器 += 2;                          

      int N = sampleCounter - lastBeatTime;  

      檢測設置高低();

      如果(N > 250

        if ( ((信號 > 閾值) && (Pulse == false) && (N > (IBI / 5) * 3) )

          脈沖檢測();

      }

      如果(信號<閾值&&脈沖==真)

        脈沖=假;

        安培 = P - T;

        閾值 = amp / 2 + T; 

        P = 閾值;

        T = 閾值;

      }

      如果(N > 2500{

        閾值 = 512;

        P = 512;

        T = 512;

        lastBeatTime = 采樣計數器;

        firstBeat = 真;           

        secondBeat = 真;   

    }

    }

    無(wú)效檢測集高低(){

      如果(信號<閾值&& N>IBI / 5* 3{

        如果(信號 < T{                      

          T = 信號;                        

        }

      }

      如果(信號 > 閾值 && 信號 > P{   

        P = 信號;                          

      }                                      

    }

    // 此校準是在檢測到脈沖時(shí)

    無(wú)效脈沖檢測(){

      脈沖 = 真;                          

      IBI = sampleCounter - lastBeatTime;    

      lastBeatTime = 采樣計數器;          

      如果(firstBeat{       

    firstBeat = 假;                

        返回;                           

      }

      如果(第二次節拍){                   

        secondBeat = 假;               

        for (int i = 0; i <= 9; i++) {  

          [i] = IBI;

        }

      }

      單詞 runningTotal = 0;                  

      for (int i = 0; i <= 8; i++) {         

        比率[i] = 比率[i + 1];           

        runningTotal += rate[i];         

      }

      [9] = IBI;                     

      runningTotal += rate[9];           

      運行總計 /= 10;                

      BPM = 60000 / runningTotal;

    QS = 真;

    }                          

    //要知道blynk中的開(kāi)始按鈕是開(kāi)/關(guān)

    BLYNK_WRITE(V9)

    {

      start_button = param.asInt();

      if(start_button==1 && time_noted==false){

        開(kāi)始時(shí)間=毫秒();

        郵件發(fā)送=假;

        do_mail_send=0;

        time_noted = true;

      }

      否則 if(start_button==0 && time_noted==true){

        郵件發(fā)送 = 真;

        時(shí)間注意=假;

      }

    }

    // 改變性別時(shí)更新性別

    BLYNK_WRITE(V2){

    開(kāi)關(guān)(參數.asInt()){

        情況 1:{ =;

                 休息;

               }

        情況2{男性=假;

                休息;     

               }

      }

    }

    // Blynk 中更改權重時(shí)更新權重

    BLYNK_WRITE(V3){

      重量 = param.asInt();

    }

    // Blynk 中更改年齡時(shí)更新年齡

    BLYNK_WRITE(V4){

      年齡=param.asInt();

    }

    請輸入搜索關(guān)鍵字

    確定
    色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
  • <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>