I. 摘要:解碼應用
電壓感測器輸出值為16進位代碼, 由於沒有轉換公式, 無法正確得知量測電壓, 我們嘗試以數據建模方式來推導可能的公式.
在了解該感測器相關規格, 以及用途後, 考慮了需要的量測準確度 (例如實驗儀器的選擇), 量測次數, 需要的感測器數量, 來進行收集數據的實驗規劃.
最終產生了有效的電壓轉換公式 (R square > 0.9999), 並且找出各感測器可能的操作電流, 後者是非預期的發現.
工作流程示意圖
資料概述
sensor_id: 感測器ID
sensor_mac: 與sensor_id同功能
volt_code: 感測器輸出的電壓代碼
volt_set: 感測器連結的已知電壓源
| sensor_id | sensor_mac | volt_code | volt_set |
|---|---|---|---|
| 0114 | 84:DD:20:E0:B3:E4 | 5100268602E1 | 9.005 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100268302E1 | 9.005 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100268802E2 | 9.005 |
| 0115 | 84:DD:20:E0:BB:65 | 510026630310 | 9.005 |
| 0115 | 84:DD:20:E0:BB:65 | 5100265F030E | 9.005 |
| 0115 | 84:DD:20:E0:BB:65 | 5100265E0310 | 9.005 |
| 0148 | 84:DD:20:E0:B0:FA | 5100267302F6 | 9.005 |
| 0148 | 84:DD:20:E0:B0:FA | 5100267102F9 | 9.005 |
| 0148 | 84:DD:20:E0:B0:FA | 5100266C02F8 | 9.005 |
| 0149 | 84:DD:20:E0:B6:45 | 5100266C02EA | 9.005 |
| 0149 | 84:DD:20:E0:B6:45 | 5100265C02EC | 9.005 |
| 0149 | 84:DD:20:E0:B6:45 | 5100266402EC | 9.005 |
| 0170 | 84:DD:20:E0:B1:9D | 510026610302 | 9.005 |
| 0170 | 84:DD:20:E0:B1:9D | 510026670308 | 9.005 |
| 0170 | 84:DD:20:E0:B1:9D | 5100266D0308 | 9.005 |
| 0171 | 84:DD:20:E0:BB:21 | 5100264C02FA | 9.005 |
| 0171 | 84:DD:20:E0:BB:21 | 5100264702F8 | 9.005 |
| 0171 | 84:DD:20:E0:BB:21 | 5100265602FC | 9.005 |
| 0172 | 84:DD:20:E0:B1:8C | 5100265802FE | 9.005 |
| 0172 | 84:DD:20:E0:B1:8C | 5100265002FD | 9.005 |
| 0172 | 84:DD:20:E0:B1:8C | 5100265002FC | 9.005 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100266B033C | 9.005 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100266C033C | 9.005 |
| 0173 | 84:DD:20:E0:B4:E9 | 51002667033E | 9.005 |
| 0174 | 84:DD:20:E0:B6:06 | 5100265D02F9 | 9.005 |
| 0174 | 84:DD:20:E0:B6:06 | 5100265D02F8 | 9.005 |
| 0174 | 84:DD:20:E0:B6:06 | 5100265402F6 | 9.005 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100276002E2 | 9.205 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100276202E6 | 9.205 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100276C02E2 | 9.205 |
| 0115 | 84:DD:20:E0:BB:65 | 510027400310 | 9.205 |
| 0115 | 84:DD:20:E0:BB:65 | 5100273E030E | 9.205 |
| 0115 | 84:DD:20:E0:BB:65 | 51002744030E | 9.205 |
| 0148 | 84:DD:20:E0:B0:FA | 5100274402F8 | 9.205 |
| 0148 | 84:DD:20:E0:B0:FA | 5100275502F9 | 9.205 |
| 0148 | 84:DD:20:E0:B0:FA | 5100273F02F8 | 9.205 |
| 0149 | 84:DD:20:E0:B6:45 | 5100274C02ED | 9.205 |
| 0149 | 84:DD:20:E0:B6:45 | 5100273C02EA | 9.205 |
| 0149 | 84:DD:20:E0:B6:45 | 5100275B02EC | 9.205 |
| 0170 | 84:DD:20:E0:B1:9D | 510027510305 | 9.205 |
| 0170 | 84:DD:20:E0:B1:9D | 510027540305 | 9.205 |
| 0170 | 84:DD:20:E0:B1:9D | 5100274C0306 | 9.205 |
| 0171 | 84:DD:20:E0:BB:21 | 5100273A02FA | 9.205 |
| 0171 | 84:DD:20:E0:BB:21 | 5100273002FA | 9.205 |
| 0171 | 84:DD:20:E0:BB:21 | 5100273202F9 | 9.205 |
| 0172 | 84:DD:20:E0:B1:8C | 5100273A02FC | 9.205 |
| 0172 | 84:DD:20:E0:B1:8C | 5100273D02FE | 9.205 |
| 0172 | 84:DD:20:E0:B1:8C | 5100273802FE | 9.205 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100274E033D | 9.205 |
| 0173 | 84:DD:20:E0:B4:E9 | 51002747033A | 9.205 |
| 0173 | 84:DD:20:E0:B4:E9 | 51002744033C | 9.205 |
| 0174 | 84:DD:20:E0:B6:06 | 5100274C02F8 | 9.205 |
| 0174 | 84:DD:20:E0:B6:06 | 5100274602F6 | 9.205 |
| 0174 | 84:DD:20:E0:B6:06 | 5100273E02F9 | 9.205 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100284B02E2 | 9.405 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100284802E4 | 9.405 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100284E02E5 | 9.405 |
| 0115 | 84:DD:20:E0:BB:65 | 51002827030E | 9.405 |
| 0115 | 84:DD:20:E0:BB:65 | 510028240310 | 9.405 |
| 0115 | 84:DD:20:E0:BB:65 | 51002822030D | 9.405 |
| 0148 | 84:DD:20:E0:B0:FA | 5100283402F9 | 9.405 |
| 0148 | 84:DD:20:E0:B0:FA | 5100283802F9 | 9.405 |
| 0148 | 84:DD:20:E0:B0:FA | 5100284702F8 | 9.405 |
| 0149 | 84:DD:20:E0:B6:45 | 5100283002EC | 9.405 |
| 0149 | 84:DD:20:E0:B6:45 | 5100283702E9 | 9.405 |
| 0149 | 84:DD:20:E0:B6:45 | 5100283302EA | 9.405 |
| 0170 | 84:DD:20:E0:B1:9D | 510028340308 | 9.405 |
| 0170 | 84:DD:20:E0:B1:9D | 510028310305 | 9.405 |
| 0170 | 84:DD:20:E0:B1:9D | 510028340305 | 9.405 |
| 0171 | 84:DD:20:E0:BB:21 | 5100282002F9 | 9.405 |
| 0171 | 84:DD:20:E0:BB:21 | 5100281A02FA | 9.405 |
| 0171 | 84:DD:20:E0:BB:21 | 5100282802FA | 9.405 |
| 0172 | 84:DD:20:E0:B1:8C | 5100281902FD | 9.405 |
| 0172 | 84:DD:20:E0:B1:8C | 5100282402FC | 9.405 |
| 0172 | 84:DD:20:E0:B1:8C | 5100282402FC | 9.405 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100282B0338 | 9.405 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100282F0339 | 9.405 |
| 0173 | 84:DD:20:E0:B4:E9 | 5100282E033C | 9.405 |
| 0174 | 84:DD:20:E0:B6:06 | 5100282102F9 | 9.405 |
| 0174 | 84:DD:20:E0:B6:06 | 5100282C02FA | 9.405 |
| 0174 | 84:DD:20:E0:B6:06 | 5100282202F8 | 9.405 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100292E02E4 | 9.605 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100292F02E4 | 9.605 |
| 0114 | 84:DD:20:E0:B3:E4 | 5100293402E5 | 9.605 |
| 0115 | 84:DD:20:E0:BB:65 | 510029120311 | 9.605 |
| 0115 | 84:DD:20:E0:BB:65 | 5100290A030C | 9.605 |
| 0115 | 84:DD:20:E0:BB:65 | 5100290B0310 | 9.605 |
| 0148 | 84:DD:20:E0:B0:FA | 5100291802F8 | 9.605 |
| 0148 | 84:DD:20:E0:B0:FA | 5100291902F8 | 9.605 |
| 0148 | 84:DD:20:E0:B0:FA | 5100291F02F8 | 9.605 |
| 0149 | 84:DD:20:E0:B6:45 | 5100291F02ED | 9.605 |
| 0149 | 84:DD:20:E0:B6:45 | 5100291A02EA | 9.605 |
| 0149 | 84:DD:20:E0:B6:45 | 5100291B02EC | 9.605 |
| 0170 | 84:DD:20:E0:B1:9D | 510029130309 | 9.605 |
| 0170 | 84:DD:20:E0:B1:9D | 510029180306 | 9.605 |
| 0170 | 84:DD:20:E0:B1:9D | 510029170308 | 9.605 |
| 0171 | 84:DD:20:E0:BB:21 | 510028FB02F9 | 9.605 |
| 0171 | 84:DD:20:E0:BB:21 | 510028FB02FA | 9.605 |
| 0171 | 84:DD:20:E0:BB:21 | 5100290402FC | 9.605 |
| 0172 | 84:DD:20:E0:B1:8C | 5100290202FC | 9.605 |
II. 分析感測器變數與隨電壓分佈之關係
感測器回傳的代碼有12個 (例如5100268602E1), 我們可以將其1, 2, 4…個代碼做為一組來觀察, 最後發現以2個代碼為一組有較好的效果.
定義5100268602E1中的51, 00, 26, 86. 02, E1分別為變數V1, V2, V3, V4, V5, V6, 觀察各個變數轉為10進位後, 其值與量測電壓間的關係.
**V1與V2*: 只有單一值, 完全不隨電壓變化, 可能是類似型號的代碼.
- **V3與V4*: V3與電壓呈明顯的正相關, 而V4則呈現特殊的分布, 我們可以在某一個電壓範圍 (例如10~11 V), 隨著電壓升高, V4會變小, 而這個現象會持續重複.
- **V5與V6*: 與電壓無明顯的相關性, V5只有兩個值, V6一樣有特殊的分布. 後續研究發現它可能與感測器操作電流有關 (詳述於V小節).
進一步將V3, V4及電壓視覺化:
可以看出在同一個V3時 (例如49), 當V4越大, 電壓也越大; 此外, 我們也可以看到(V3, V4) = (48, 248) 與 (49, 4) 的電壓是相同的, 這可能指出V4可進位到V3.
此外, V4也隨著電壓有週期性的變化, 該週期長度約1.8 V.
III. 代碼說明與建模結果
感測器回傳的代碼, 以5100268602E1為例來進行說明:
前四碼5100可能是型號代碼
中四碼2686為測得電壓代碼, 轉10進位後, 再乘以特定係數, 代表量測到的電壓 (單位V).
V = (hextodec(26) + hextodec(86)/256)*alpha
末四碼02E1為測得電流代碼, 轉10進位後代表感測器測得的電流 (單位A), 詳見後續感測器分析.
A = hextodec(02) + hextodec(E1)/256
轉換公式如下:
\[ V = V3 + V42/256 \] \[ Vsqr = V**2 \] \[ Vroot = V**0.5 \] \[ Volt = V*0.3161134 + Vsqr*-3.1363203\times 10^{-4} + Vroot*-0.8342468 + 2.4996032\]
Vsqr: V平方, Vroot: V平方根
模型分析:
3.1 R square與MAE:
在< 0.1%的顯著水準之下, volt與V呈正相關, 但與V_sqr及V_root呈負相關.
決定係數 (R square) > 0.9999: 代表變數幾乎可完全可解釋電壓變化
在9V到15V的範圍內, 平均絕對誤差 (MAE) 0.008, 最大絕對誤差0.041: 可做為後續電池壽命分析中, sliding windows演算法中的誤差閾值之參考值.
誤差可能來自於感測器本身, 電源供應器, 三用電表, 或其它環境因子. 在後續感測器分析中, 會更進一步說明感測器的影響.
3.2 殘差分析可以看出殘差呈現隨機分佈, 代表有效處理遺漏變數或非線性關係.
3.3 再以四種診斷圖觀察模型, 可以發現殘差相當接近常態分布, 也具有好的同質變異性質.
## [1] "模型結果"
##
## Call:
## lm(formula = volt_set ~ BV + BV_sqr + BV_root, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.036941 -0.006006 -0.000305 0.006802 0.037763
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.500e+00 6.211e-01 4.025 6.19e-05 ***
## BV 3.161e-01 2.424e-02 13.042 < 2e-16 ***
## BV_sqr -3.136e-04 7.775e-05 -4.034 5.96e-05 ***
## BV_root -8.342e-01 2.318e-01 -3.600 0.000336 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01064 on 887 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 9.51e+06 on 3 and 887 DF, p-value: < 2.2e-16
## [1] "左: 模型預測值 (pred) 對實際值 (volt) 散佈圖; 右: 預測值對殘差的散佈圖"
## [1] "模型基本診斷"
IV. 感測器分析1: 殘差隨實際電壓之變化
觀察每個感測器殘差值隨實際電壓之變化.
可以發現0114 (感測器id) 在低電壓時預測值明顯較實際值低, 而0148則相反在高電壓值時有高估的預測值. 這可能導致模型為了最小化誤差值, 而傾向在低電壓時高估, 在高電壓時低估.
由於此類感測器出現的機率可能超過20%, 因此目前較好的做法是讓模型考慮這樣的變異去妥協, 避免它們產生更大的誤差影響後續電池壽命實驗的分析與判斷.
未來如果有考慮進行品管篩選感測器, 可再修改模型後, 評估各感測器於實際電壓9V及15V時之殘差, 若大於設定閾值則剔除.
## [1] "顏色代表不同的感測器, 點為實際誤差值, 線則是配適資料產生的趨勢線"
V. 感測器分析2: 16進位代值末四碼可能是感測器的操作電流
- 由V3和V4間的進位關係, 可以發現V5和V6間也有類似的關係, 但需要從感測器角度來觀察. 由圖可以看出, 當感測器V5 = 2時, V6範圍將介於225~250, 當V5 = 3時, V6範圍將介於0~62. 特別是觀察感測器id 0172, 可以看到其由(2,250) 及 (3,0).
而從V5和V6計算出來的A, 我們觀察到,對於每個感測器來說, A不隨volt變化,而是接近一個定值, 且其值與規格書操作電流相當 (~3mA), 因此我們可以推測它代表了感測器量測到的電流.
A也許可用來判斷感測器的品質或其他應用.
email: chtsai0108@gmail.com