資料介紹
描述
壓力測量已經在各種情況下使用。它提供有關步態力學的信息并具有廣泛的應用,例如在臨床情況和運動中。在這個項目中,傳感器用于深入了解重量分布。還包含壓力映射的實時可視化,因為它使您更容易理解您的數據。
所需硬件
- Arduino MKR1000 - 大多數帶有 Wi-Fi 的 3.3V 或 5V 板都可以完成這項工作,但我不鼓勵為此使用 ESP。由于某種原因,多個 ESP 板在創建此項目時返回了不準確的測量值。
- 力敏電阻器 (3)。我使用了 Interlink 402 (100 N)。我還使用了更昂貴的 Interlink 406,但事后看來,402 也可以。使用更多 FSR 以獲得更好的準確性。
- 10K 電阻。更改電阻器以將讀數縮放到您想要的范圍內。電阻越高,增量越大。在此處查找更多信息。
- 加速度計,我用的是 16G ADXL345。使用它來測量腳的加速度和運動。
- 一個烙鐵把它們放在一起。由于顯而易見的原因,鱷魚夾在鞋子中不能很好地工作。
接線
關于電路的一些快速說明:
FSR:在開始焊接之前閱讀此內容:將電線焊接到 FSR 時要格外小心。如果您不確定自己是否具備技能,請不要嘗試這樣做。您需要非常快速地焊接它,否則塑料會熔化。相信我,我發現它很困難......
FSR 沒有正面或負面的一面,因此您不必擔心。
正如我之前提到的,您可以更改電阻以將讀數調整到您喜歡的范圍內。
接地/5V:如您所見,所有傳感器都焊接到 5V 線和公共端。
加速度計:如果您的項目不需要加速度計,您可以不使用它。如果您只是想測量壓力,則不必使用它,但如果您想測量加速度,或者需要分析步態周期,它可能會派上用場。然而,這對于本教程并不是絕對必要的。
將硬件連接到鞋墊
我建議先運行代碼后執行此操作,因為如果您犯了任何焊接錯誤,您會在那時發現它。如果您需要重新焊接任何東西,這可能會為您節省一些將硬件連接和重新連接到鞋墊的麻煩。
FSR 固定在鞋墊的三個點上。左上 FSR 測量外翻,右上 FSR 測量內翻,足跟處的 FSR 測量足跟壓力。為您的 FSR 找到合適的位置是一個嘗試的問題。安裝它們的最佳位置是行走時模擬值變化最大的位置。
膠帶用于將電線固定到位。如果它們移動,可能會干擾 FSR 讀數。我還在鞋底底部和鞋內側使用了魔術貼,以將鞋墊固定到位。
如果您使用加速度計,請將加速度計連接到鞋跟的后部。為此,我使用了雙面膠帶。
測量力
現在我們都準備好測量力了。注意:在接下來的兩節中,我假設您熟悉 Thinger.io 庫。有關這方面的更多信息,請參閱標題為“通過 Thinger.io 發送數據”的部分。
該程序有相當長的標題部分,包括設置所需的變量,如 WiFi 連接數據。這部分還包括程序中使用的全局變量,主要是數組。我做出的一個重要選擇是盡可能多地使用數組。這個想法是為每個 FSR 傳感器使用單獨的陣列元素。所以在這種情況下,數組的長度為 3。
不要養成使用太多全局變量的習慣,因為會有不必要的副作用。我們之所以使用它們,是因為在某些情況下,它們是通過Thinger.io發送數據所必需的。
代碼在評論中解釋。我們將逐步完成代碼。您可以下載下面的完整代碼。
#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);
如果您還不了解所有內容,請不要驚慌。一旦你看過其余的代碼,它就會更有意義。
我們想要可視化結果。為此,我們使用 Thinger.io Wi-Fi 庫。此連接通過以下行設置:
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
輸入參數是通過您在 Thinger.io 上的帳戶獲得的,因此您需要先進行設置。
在 setup() 函數中,首先建立串行連接。隨后調用創建 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庫中的一個關鍵概念。它的行為類似于函數,但具有特殊的結構。需要將結果數據發送到云端。有關此庫的更多詳細信息,請參閱“通過 Thinger.io 發送數據”部分。
稱為“壓力”的“事物”讀取三個 FSR 傳感器的值并將它們打印在串行控制臺上。相同的值也被發送到“out”通道。通過這種方式,我們可以很容易地驗證原始輸入數據。
在名為“電壓”的“事物”中,讀取電壓值并將其存儲在名為“fsrReading”的局部變量中。使用“map”函數,該值相對于支持的最小值和最大值進行縮放,并返回到數組“fsrVoltageArray”中。通過 for 循環,我們確保每個 FSR 在這個結果數組中都有自己的位置。
請注意,所有代碼都放在 setup 函數中。不要在循環中放任何東西(你可能已經習慣了)。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 循環完成后,這些值被發送到輸出通道“out”。每個傳感器都有一個唯一的字符串,例如“FSR1voltage”。
名為“newton”的“事物”是這個程序中最復雜的函數。它將電壓轉換為以牛頓為單位的力。再次使用 for 循環對每個 FSR 執行此操作。
計算相當復雜,因為我們需要區分幾個極端情況。如果電壓值太小或太大,我們為力分配一個固定值。如果電壓在截止值之間,則使用對數函數來計算力。選擇此功能是為了減小曲線的斜率。
請注意,這些公式只是近似值。每個傳感器可能有(有些)不同的曲線,但為簡單起見,我們在此不加以區分。
計算的結果值存儲在數組“fsrForceArray”中。同樣,每個 FSR 在此數組中都有自己的位置。三個最終值被發送到“out”輸出通道。
最后的“事物”函數稱為“權重”。應用直接轉換以將力返回為以克為單位的重量。
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 上設置儀表板。我假設你知道它是如何工作的。
提示:如果一切都按預期工作,您的儀表板應該如下所示:
測量加速度
這實際上比測量壓力要容易得多。我們需要先在標題部分添加一些代碼。我們首先包括庫“Wire.h”(為了與 SDA 和 SDL 引腳通信)、“Adafruit_Sensor.h”和“Adafruit_ADXL345_U.h”。我們還需要三個新的全局變量,這樣我們就可以測量和傳輸 x、y 和 z 軸上的加速度
不要刪除您之前添加的庫。您將需要這些來連接到Thinger.io。
在下一個代碼塊中,我們檢查加速度計是否響應。如果沒有,什么都不會發生。否則,定義范圍并執行稱為“加速度計”的“事物”。這會查詢設備并將 x、y 和 z 方向的三個加速度值發送到輸出“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
}
提示:運行上面的代碼后,您的輸出應該類似于下面顯示的示例
把它們放在一起
請在頁面底部找到完整代碼:)
通過 Thinger.io 發送數據
這個庫在這里有很好的文檔,但這里有一些重要信息可以使“事物”(不是雙關語)更容易編寫和使用。
Thinger.io是一個非常廣泛的庫。在本節中,我們只介紹我們的應用程序中需要和使用的功能。結構如下(注意右花括號“}”后面的分號“;”):
thing[ ] >> [](pson& out)
{
<your code>
};
這在 C++ 中稱為 lambda 函數。開始定義的強制性第一個詞是“事物”,整個功能也稱為“事物”。
字符串(例如 thing["myFirstThing"] )為函數命名。每個“事物”都需要有一個唯一的名稱。
“>>”符號表示這個“事物”只有輸出值。如果需要輸入,請將其更改為“<<”。如果需要輸入和輸出,則應使用“=”符號。在我們的例子中,我們只有輸出值。
參數“pson &out”意味著我們的輸出值是通過一個名為“out”的數據結構發送的。數據類型“pson”非常靈活,可以包含各種類型的變量,還支持JSON文檔。
在我們的代碼中,我們使用o 向與程序第一部分中的"out[
調用連接的可視化顯示發送值的形式。"ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL)"
您可能已經注意到,循環函數內通常沒有太多代碼。你只需要調用“thing.handle()”。您也可以在循環部分調用端點和流資源。所有其他代碼都在您定義的“事物”中處理。
“事物”中的代碼不斷循環。如果您的數據定期更新,就像我們的例子一樣,將您的計算放在“事物”中很重要。
常問問題
什么都沒發生!
檢查你的電線。有可能在這個級別出現了問題。如果串行監視器中沒有出現任何內容,請檢查“#define _DEBUG_”是否在代碼的第一行。TLS 也可能會產生干擾。您可以禁用它,但要小心。還要檢查您與Thinger.io的連接是否正常。
輸出不如預期
是否所有需要在“事物”中更新的代碼?如果它在“事物”之外,則不會更新。我還發現 ESP 設備無緣無故無法與 FSR 傳感器很好地配合使用。
輸出沒有定期更新_ _
您是否在代碼中添加了任何延遲?刪除它們 :) 您可以在Thinger.io本身上設置刷新率。
我希望將所有輸??出都放在一張圖中
將所有代碼添加到單個“事物”中
做得好!
我希望本教程能幫助您了解 FSR 傳感器、加速度計和 Thinger.io 的基礎知識。我很樂意閱讀任何改進此代碼的建議,請不要害羞并分享您的創作!
- 使用Arduino來閃爍LED
- Arduino壓力測量和記錄
- 使用Arduino來制造飛機
- Arduino Uno國內改版電路原理圖下載 0次下載
- Arduino Uno Rev.3開發板意大利原版電路圖 0次下載
- 實體飛行器表面沉積靜電分布仿真模型 18次下載
- Arduino編程基礎(一)——Arduino語言資料下載
- Arduino是什么?Arduino的詳細資料簡介
- Arduino 0016軟件免費下載 211次下載
- Arduino_1.0_軟件下載 219次下載
- Arduino_1.6.0_軟件下載 226次下載
- 壓接型IGBT器件內部壓力分布 2次下載
- Tekscan壓力分布測量系統
- Tekscan壓力分布測量系統
- 用壓力表檢查空調制冷系統
- 如何使用Python和PinPong庫控制Arduino 718次閱讀
- 這么漂亮的Arduino開發板你見過嗎? 1605次閱讀
- 如何使用Arduino來制作一個簡單的歐姆表 5565次閱讀
- 如何從網頁控制arduino? 3836次閱讀
- 智能壓力變送器故障及處理方法 2993次閱讀
- 智能壓力變送器校驗步驟 7643次閱讀
- 真空斷路器的日常檢查和維護 7493次閱讀
- 基于FF總線技術實現智能壓力變送器的測量系統設計 1714次閱讀
- 微雪電子智能車Arduino AlphaBot2簡介 2085次閱讀
- 常見顯示儀表零點檢查和調整方法 8774次閱讀
- 壓力分布傳感器標定測量裝置的原理及設計 3806次閱讀
- arduino連接顯示屏方法詳解 4.7w次閱讀
- iQ新設備可以讓你用智能手機進行超聲波檢查 7411次閱讀
- Arduino如何安裝驅動_Arduino安裝驅動步驟 5.8w次閱讀
- arduino是什么以及arduino能干什么 4.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 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開發指南
- 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數字電路基礎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次下載 | 免費
評論
查看更多