電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino智能鞋墊來檢查你的壓力分布

Arduino智能鞋墊來檢查你的壓力分布

2022-10-26 | zip | 0.10 MB | 次下載 | 免費(fèi)

資料介紹

描述

壓力測量已經(jīng)在各種情況下使用。它提供有關(guān)步態(tài)力學(xué)的信息并具有廣泛的應(yīng)用,例如在臨床情況和運(yùn)動中。在這個項目中,傳感器用于深入了解重量分布。還包含壓力映射的實時可視化,因為它使您更容易理解您的數(shù)據(jù)。

所需硬件

  • Arduino MKR1000 - 大多數(shù)帶有 Wi-Fi 的 3.3V 或 5V 板都可以完成這項工作,但我不鼓勵為此使用 ESP。由于某種原因,多個 ESP 板在創(chuàng)建此項目時返回了不準(zhǔn)確的測量值。
  • 力敏電阻器 (3)。我使用了 Interlink 402 (100 N)。我還使用了更昂貴的 Interlink 406,但事后看來,402 也可以。使用更多 FSR 以獲得更好的準(zhǔn)確性。
  • 10K 電阻。更改電阻器以將讀數(shù)縮放到您想要的范圍內(nèi)。電阻越高,增量越大。在此處查找更多信息。
  • 加速度計,我用的是 16G ADXL345。使用它來測量腳的加速度和運(yùn)動。
  • 一個烙鐵把它們放在一起。由于顯而易見的原因,鱷魚夾在鞋子中不能很好地工作。

接線

?
pYYBAGNYjcKAXNpPAAFYV9al5ao801.png
我們的硬件示意圖
?

關(guān)于電路的一些快速說明:

FSR:在開始焊接之前閱讀內(nèi)容:將電線焊接到 FSR 時要格外小心。如果您不確定自己是否具備技能,請不要嘗試這樣做。您需要非常快速地焊接它,否則塑料會熔化。相信我,我發(fā)現(xiàn)它很困難......

FSR 沒有正面或負(fù)面的一面,因此您不必?fù)?dān)心。

正如我之前提到的,您可以更改電阻以將讀數(shù)調(diào)整到您喜歡的范圍內(nèi)。

接地/5V:如您所見,所有傳感器都焊接到 5V 線和公共端。

加速度計:如果您的項目不需要加速度計,您可以不使用它。如果您只是想測量壓力,則不必使用它,但如果您想測量加速度,或者需要分析步態(tài)周期,它可能會派上用場。然而,這對于本教程并不是絕對必要的。

將硬件連接到鞋墊

我建議先運(yùn)行代碼后執(zhí)行此操作,因為如果您犯了任何焊接錯誤,您會在那時發(fā)現(xiàn)它。如果您需要重新焊接任何東西,這可能會為您節(jié)省一些將硬件連接和重新連接到鞋墊的麻煩。

FSR 固定在鞋墊的三個點上。左上 FSR 測量外翻,右上 FSR 測量內(nèi)翻,足跟處的 FSR 測量足跟壓力。為您的 FSR 找到合適的位置是一個嘗試的問題。安裝它們的最佳位置是行走時模擬值變化最大的位置。

膠帶用于將電線固定到位。如果它們移動,可能會干擾 FSR 讀數(shù)。我還在鞋底底部和鞋內(nèi)側(cè)使用了魔術(shù)貼,以將鞋墊固定到位。

如果您使用加速度計,請將加速度計連接到鞋跟的后部。為此,我使用了雙面膠帶。

?
poYBAGNYjciAdwajAAjIoNdYEqA017.jpg
FSR的位置
?

測量力

現(xiàn)在我們都準(zhǔn)備好測量力了。注意:在接下來的兩節(jié)中,我假設(shè)您熟悉 Thinger.io 庫。有關(guān)這方面的更多信息,請參閱標(biāo)題為“通過 Thinger.io 發(fā)送數(shù)據(jù)”的部分。

該程序有相當(dāng)長的標(biāo)題部分,包括設(shè)置所需的變量,如 WiFi 連接數(shù)據(jù)。這部分還包括程序中使用的全局變量,主要是數(shù)組。我做出的一個重要選擇是盡可能多地使用數(shù)組。這個想法是為每個 FSR 傳感器使用單獨的陣列元素。所以在這種情況下,數(shù)組的長度為 3。

不要養(yǎng)成使用太多全局變量的習(xí)慣,因為會有不必要的副作用。我們之所以使用它們,是因為在某些情況下,它們是通過Thinger.io發(fā)送數(shù)據(jù)所必需的。

代碼在評論中解釋。我們將逐步完成代碼。您可以下載下面的完整代碼。

#define _DEBUG_ //enables us to use the Serial Monitor
#include 
#include 
#include  //Accelerometer
#include  //Accelerometer
#include  //Accelerometer
#include 
#define USERNAME "yourUsername"
#define DEVICE_ID "yourDeviceID"
#define DEVICE_CREDENTIAL "yourDeviceCredential"
#define SSID "yourSSID"
#define SSID_PASSWORD "yourSSIDPassword"
//*FSR sensors*/
#define noFSRs 3 // Number of FSRs connected
#define FSR1 A1 
#define FSR2 A2 
#define FSR3 A3 
float fsrVoltageArray[3];       // The analog reading converted and scaled to voltage as a floating point number
float fsrForceArray[3];         // The force in Newton
float fsrWeightInGramsArray[3]; // Weight converted to grams
int   pinArray[3]       = {FSR1, FSR2, FSR3};    // The pin ID for the three devices
float forceMaxArray[3]  = {100.0, 100.0, 100.0}; // Maximum forces supported
float million = 1000000.0; // Unit for "1/micro
float conversionToKgrams = 1.0/9.80665;
long K       = 1000;
long R       = 10*K;    // R in K Ohm
long Vcc     = 5000;    // 5V=5000mV, 3.3V = 3300 mV
float voltageMax = 0.98 * Vcc; // Maximum voltage set to 95% of Vcc. Set the force to the maximum beyond this value.
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

如果您還不了解所有內(nèi)容,請不要驚慌。一旦你看過其余的代碼,它就會更有意義。

我們想要可視化結(jié)果。為此,我們使用 Thinger.io Wi-Fi 庫。此連接通過以下行設(shè)置:

ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

輸入參數(shù)是通過您在 Thinger.io 上的帳戶獲得的,因此您需要先進(jìn)行設(shè)置。

在 setup() 函數(shù)中,首先建立串行連接。隨后調(diào)用創(chuàng)建 WiFi 連接。

void setup(void) {
 Serial.begin(115200); //Start Serial Communication
 thing.add_wifi(SSID, SSID_PASSWORD); //call to set up WiFi function
}
void loop(void) {
 thing.handle();
}

接下來,我們定義一個叫做“壓力”的“事物”。“事物”是Thinger.io庫中的一個關(guān)鍵概念。它的行為類似于函數(shù),但具有特殊的結(jié)構(gòu)。需要將結(jié)果數(shù)據(jù)發(fā)送到云端。有關(guān)此庫的更多詳細(xì)信息,請參閱“通過 Thinger.io 發(fā)送數(shù)據(jù)”部分。

稱為“壓力”的“事物”讀取三個 FSR 傳感器的值并將它們打印在串行控制臺上。相同的值也被發(fā)送到“out”通道。通過這種方式,我們可以很容易地驗證原始輸入數(shù)據(jù)。

在名為“電壓”的“事物”中,讀取電壓值并將其存儲在名為“fsrReading”的局部變量中。使用“map”函數(shù),該值相對于支持的最小值和最大值進(jìn)行縮放,并返回到數(shù)組“fsrVoltageArray”中。通過 for 循環(huán),我們確保每個 FSR 在這個結(jié)果數(shù)組中都有自己的位置。

請注意,所有代碼都放在 setup 函數(shù)中。不要在循環(huán)中放任何東西(你可能已經(jīng)習(xí)慣了)。Thinger.io庫無法處理...

void setup(void) {
 Serial.begin(115200); //Start Serial Communication
 thing.add_wifi(SSID, SSID_PASSWORD); //call to set up WiFi function
  /*FSR sensors*/  
 thing["pressure"] >> [](pson & out) {
   out["FSR1"] = analogRead(FSR1);
   Serial.print("FSR1:");
   Serial.println(analogRead(FSR1));
   out["FSR2"] = analogRead(FSR2);
   Serial.print("FSR2:");
   Serial.println(analogRead(FSR2));
   out["FSR3"] = analogRead(FSR3);
   Serial.print("FSR3:");
   Serial.println(analogRead(FSR3));      
 };
 thing["voltage"] >> [](pson & out) {
   for (int FSR = 0; FSR < noFSRs; FSR++) {   
     fsrVoltageArray[FSR] = 0.0; // Reset values upon entry
     fsrForceArray[FSR]   = 0.0;
     int fsrPin   = pinArray[FSR];     
     int fsrReading = analogRead(fsrPin); 
     fsrVoltageArray[FSR] = (float) map(fsrReading, 0, 1023, 0, 5000); //change the 5000 to another value if you don't use a 5V device
   } //end of loop over FSR's
   out["FSR1voltage"] = fsrVoltageArray[0];
   out["FSR2voltage"] = fsrVoltageArray[1];
   out["FSR3voltage"] = fsrVoltageArray[2];
 };
void loop(void) {
 thing.handle();
  //Don't put any code here because Thinger.io won't like that.
}

在 for 循環(huán)完成后,這些值被發(fā)送到輸出通道“out”。每個傳感器都有一個唯一的字符串,例如“FSR1voltage”。

名為“newton”的“事物”是這個程序中最復(fù)雜的函數(shù)。它將電壓轉(zhuǎn)換為以牛頓為單位的力。再次使用 for 循環(huán)對每個 FSR 執(zhí)行此操作。

計算相當(dāng)復(fù)雜,因為我們需要區(qū)分幾個極端情況。如果電壓值太小或太大,我們?yōu)榱Ψ峙湟粋€固定值。如果電壓在截止值之間,則使用對數(shù)函數(shù)來計算力。選擇此功能是為了減小曲線的斜率。

請注意,這些公式只是近似值。每個傳感器可能有(有些)不同的曲線,但為簡單起見,我們在此不加以區(qū)分。

計算的結(jié)果值存儲在數(shù)組“fsrForceArray”中。同樣,每個 FSR 在此數(shù)組中都有自己的位置。三個最終值被發(fā)送到“out”輸出通道。

最后的“事物”函數(shù)稱為“權(quán)重”。應(yīng)用直接轉(zhuǎn)換以將力返回為以克為單位的重量。

thing["newton"] >> [](pson & out) {
   for (int FSR = 0; FSR < noFSRs; FSR++) {  
        // The value of the force F as a function of the voltage V is computed as: F(V) = (Fmax/Vmax) * V
        float force_value = (forceMaxArray[FSR]/voltageMax) * fsrVoltageArray[FSR];
        // Three situations are distinguished:
       //
        // 1. If V is too close to the maximum (as defined by voltageMax), the 
        //
        // 2. If the computed force F is too small, we set it to zero to avoidnoise effects.
        //
        // 3. In all other cases, we take the logarithmic value to reduce the sloop and
        if ( fsrVoltageArray[FSR] < voltageMax ) {
          // V is not too high in this branch
          if ( force_value <= 1.00 ) {
             fsrForceArray[FSR] = 0.0; // Force is too small, set it to zero
          } else {
            fsrForceArray[FSR] = log10(force_value); // Value is okay, take the log of this
          }
       } else {
          // Cap the force if the voltage is too close to Vcc (for Vcc it would be infinity)
          fsrForceArray[FSR] = log10(forceMaxArray[FSR]);
          Serial.print("Cut off activated for FSR = "); Serial.println(FSR);
       }
  } // End of loop over FSRs
     out["FSR1newton"] = fsrForceArray[0];
     out["FSR2newton"] = fsrForceArray[1];
     out["FSR3newton"] = fsrForceArray[2];
 }; //end of thing 
   thing["weight"] >> [](pson & out) {
   // Straightforward computation to convert the force in Newton to the weight in grams
   for (int FSR = 0; FSR < noFSRs; FSR++) {  
     fsrWeightInGramsArray[FSR] = fsrForceArray[FSR] * conversionToKgrams * 1000.0;
   }
     out["FSR1weight"] = fsrWeightInGramsArray[0];
     out["FSR2weight"] = fsrWeightInGramsArray[1];
     out["FSR3weight"] = fsrWeightInGramsArray[2];
 }; //end of thing

不要忘記在 Thinger.io 上設(shè)置儀表板。我假設(shè)你知道它是如何工作的。

提示:如果一切都按預(yù)期工作,您的儀表板應(yīng)該如下所示:

?
poYBAGNYjcyAYkaRAAQzd1Ek0tM184.png
Thinger.io 儀表板
?

測量加速度

這實際上比測量壓力要容易得多。我們需要先在標(biāo)題部分添加一些代碼。我們首先包括庫“Wire.h”(為了與 SDA 和 SDL 引腳通信)、“Adafruit_Sensor.h”和“Adafruit_ADXL345_U.h”。我們還需要三個新的全局變量,這樣我們就可以測量和傳輸 x、y 和 z 軸上的加速度

不要刪除您之前添加的庫。您將需要這些來連接到Thinger.io。

在下一個代碼塊中,我們檢查加速度計是否響應(yīng)。如果沒有,什么都不會發(fā)生。否則,定義范圍并執(zhí)行稱為“加速度計”的“事物”。這會查詢設(shè)備并將 x、y 和 z 方向的三個加速度值發(fā)送到輸出“out”通道。

這部分代碼類似于 Adafruit 包含的示例代碼(文件 > 示例 > Adafruit ADXL345),但我省略了一些部分,因為我們不需要它們。

#include 
#include 
#include 
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
int x = 0;
int y = 0;
int z = 0;  
void setup(void) {
 Serial.begin(115200);
if(!accel.begin()) {   // Initialize the sensor
  Serial.println("No ADXL345 detected");
} else {
  // Range for this sensor - If you don't know the range run the
  // displayDataRate of the example code of the ADXL345 provided by Adafruit
  accel.setRange(ADXL345_RANGE_16_G);
 thing["accelerometer"] >> [](pson& out){ // A new "thing" function for Thinger.io
     sensors_event_t event;
     accel.getEvent(&event);  // Get a new sensor event
     out["x"] = event.acceleration.x;  // Display the results (acceleration is measured in m/s^2)
     out["y"] = event.acceleration.y;
     out["z"] = event.acceleration.z;
     Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");
     Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");
     Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");Serial.println("m/s^2 ");
 }; //end of thing
} //end of if/else statement
}

提示:運(yùn)行上面的代碼后,您的輸出應(yīng)該類似于下面顯示的示例

?
poYBAGNYjdCAISgDAALs38MwRBM534.png
Thinger.io 中加速度計的輸出
?

把它們放在一起

請在頁面底部找到完整代碼:)

通過 Thinger.io 發(fā)送數(shù)據(jù)

這個庫在這里有很好的文檔,但這里有一些重要信息可以使“事物”(不是雙關(guān)語)更容易編寫和使用。

Thinger.io是一個非常廣泛的庫。在本節(jié)中,我們只介紹我們的應(yīng)用程序中需要和使用的功能。結(jié)構(gòu)如下(注意右花括號“}”后面的分號“;”):

thing[] >> [](pson& out)
   {
       <your code>
   };

這在 C++ 中稱為 lambda 函數(shù)。開始定義的強(qiáng)制性第一個詞是“事物”,整個功能也稱為“事物”。

字符串(例如 thing["myFirstThing"] )為函數(shù)命名。每個“事物”都需要有一個唯一的名稱。

“>>”符號表示這個“事物”只有輸出值。如果需要輸入,請將其更改為“<<”。如果需要輸入和輸出,則應(yīng)使用“=”符號。在我們的例子中,我們只有輸出值。

參數(shù)“pson &out”意味著我們的輸出值是通過一個名為“out”的數(shù)據(jù)結(jié)構(gòu)發(fā)送的。數(shù)據(jù)類型“pson”非常靈活,可以包含各種類型的變量,還支持JSON文檔。

在我們的代碼中,我們使用o 向與程序第一部分中的"out[] = value" t調(diào)用連接的可視化顯示發(fā)送值的形式。"ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL)"

您可能已經(jīng)注意到,循環(huán)函數(shù)內(nèi)通常沒有太多代碼。你只需要調(diào)用“thing.handle()”。您也可以在循環(huán)部分調(diào)用端點和流資源。所有其他代碼都在您定義的“事物”中處理。

“事物”中的代碼不斷循環(huán)。如果您的數(shù)據(jù)定期更新,就像我們的例子一樣,將您的計算放在“事物”中很重要。

常問問題

什么都沒發(fā)生!

檢查你的電線。有可能在這個級別出現(xiàn)了問題。如果串行監(jiān)視器中沒有出現(xiàn)任何內(nèi)容,請檢查“#define _DEBUG_”是否在代碼的第一行。TLS 也可能會產(chǎn)生干擾。您可以禁用它,但要小心。還要檢查您與Thinger.io的連接是否正常。

輸出不如預(yù)期

是否所有需要在“事物”中更新的代碼?如果它在“事物”之外,則不會更新。我還發(fā)現(xiàn) ESP 設(shè)備無緣無故無法與 FSR 傳感器很好地配合使用。

輸出沒有定期更新_ _

您是否在代碼中添加了任何延遲?刪除它們 :) 您可以在Thinger.io本身上設(shè)置刷新率。

我希望將所有輸??出都放在一張圖中

將所有代碼添加到單個“事物”中

做得好!

我希望本教程能幫助您了解 FSR 傳感器、加速度計和 Thinger.io 的基礎(chǔ)知識。我很樂意閱讀任何改進(jìn)此代碼的建議,請不要害羞并分享您的創(chuàng)作!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)