動作
Feature #43
已結束Feature #57: 壓力感測器(FSR)連接ESP32
壓力感測器(FSR)連接ESP32_壓力計設計
是由 Chifu Chung 於 約 1 年 前加入. 於 12 個月 前更新.
開始日期:
2023-09-25
完成日期:
2023-10-31
完成百分比:
100%
預估工時:
檔案
clipboard-202310061420-8cgz7.png (36.1 KB) clipboard-202310061420-8cgz7.png | 宏益 廖, 2023-10-06 06:20 | ||
clipboard-202310061429-jbrpu.png (1.59 MB) clipboard-202310061429-jbrpu.png | 宏益 廖, 2023-10-06 06:29 | ||
clipboard-202310061434-menw9.jpg (668 KB) clipboard-202310061434-menw9.jpg | 宏益 廖, 2023-10-06 06:34 | ||
clipboard-202310061435-fp1wv.png (38.8 KB) clipboard-202310061435-fp1wv.png | 宏益 廖, 2023-10-06 06:35 | ||
clipboard-202310061449-jdcsi.png (73.6 KB) clipboard-202310061449-jdcsi.png | 宏益 廖, 2023-10-06 06:49 | ||
clipboard-202310071702-24uud.png (194 KB) clipboard-202310071702-24uud.png | 宏益 廖, 2023-10-07 09:02 |
是由 宏益 廖 於 約 1 年 前更新
*採集數據&繪製曲線¶
實際拿裝置與電子秤來測(如圖)
紀錄FSR值與壓力大小(g)
(裝置盡量放電子秤正中央,記得歸零)¶
------------------------------------------------------------------------------------------------------------------------------------------------¶
按照紀錄的數值可於excel中繪製曲線圖
PRESSURE = [250, 500, 1000, 1500, 2000]
FSR = [50, 250, 400, 480, 600]¶
============================================================================================¶
*Curve fitting¶
自行Google "python curve fitting教學"
參考資料: https://www.796t.com/content/1546862273.html¶
#encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt
#定義x、y散點座標
num = [0, 250, 500, 1000, 1500, 2000]
x = [0, 50, 250, 400, 480, 600]
y = np.array(num)
#用5次多項式擬合
f1 = np.polyfit(x, y, 5)
p1 = np.poly1d(f1)
print(p1)
#也可使用yvals=np.polyval(f1, x)
yvals = p1(x) #擬合y值
#繪圖
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('polyfitting')
plt.show()
plt.savefig('test.png')
執行完程式會得到類似下面的效果:
x-axis:FSR value
y-axis:壓力(g)¶
============================================================================================¶
*壓力計設計(韌體)¶
int fsr = 0;
double pressure = 0;
fsr = analogRead(FSR_pin);
pressure = 0.0000009 * pow(x, 3) + 0.003137 * pow(x, 2) + 1.05 * x + 76.28;
//Serial.printf("FSR = %d\n",fsr);
//Serial.printf("PRESSURE = %.6f\n",pressure );
for(int d = 0; d < 10; d++){
tft.fillRect((DISP_X + 60) + (d * 11), DISP_Y + 185, 10, 10, TFT_SILVER);
if(pressure > d * 100){
tft.fillRect((DISP_X + 60) + (d * 11), DISP_Y + 185, 10, 10, TFT_GREEN);
}
}
動作