• 正文
    • 1、器件選型
    • 2、程序開發(fā)
    • 3、雙線性插值偽彩顯示
    • 4、后續(xù)安排
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

兩百元不到的熱成像裝置?DIY熱成像的絕佳方案!

04/21 09:25
671
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

之前一直有一個想法想做一個熱成像儀,正好最近有一個項目需要用到熱成像,于是在琢磨如何制作使用一款具有無線功能的熱成像裝置。

1、器件選型

由于需要涉及無線傳輸,還要求使用WIFI,那么主控就是優(yōu)先考慮ESP32作為主控。

但是關(guān)于熱成像傳感器的選擇就需要我頭疼了,如何在保證開發(fā)效率以及成本的情況下選擇合適的傳感器。

最開始我選擇的是MI0802這款熱成像傳感器:

它的分辨率達到80*62,比較滿足我的要求。不過MI0802居然是不開源的。于是只能選擇其他的傳感器了。

后來看到了MLX90640,百元級別的價格能實現(xiàn)32*24像素的分辨率,就先買了一塊模塊來試試開發(fā)難度。

2、程序開發(fā)

Arduino IDE有MLX90640的庫,因此開發(fā)起來很簡單,只需要調(diào)用相應(yīng)的庫。

Adafruit_MLX90640?mlx;float?frame[32*24]; ? ? ? ? ?// 原始溫度數(shù)據(jù)

創(chuàng)建90640的實例對象和幀緩存區(qū)

??// 讀取熱像儀數(shù)據(jù)??if(mlx.getFrame(frame) !=?0) {? ??//錯誤? ??return;? }

讀取攝像頭的原始數(shù)據(jù)

為了能夠顯示出來,這里使用一塊240*240的TFTLCD來顯示。

? tft.startWrite();??for(int?y=0; y<24; y++) {? ??for(int?x=0; x<32; x++) {? ? ??uint16_t?color =?tempToColor(frame[y*32?+ x]);? ? ? tft.fillRect(x*7, y*10,?7,?10, color);? ? }? }? tft.endWrite();

tempToColor是將溫度轉(zhuǎn)化為不同顏色來顯示。

可以看到也是能成功的顯示出來,不過由于分辨率問題,像素感太強,因此我對他進行雙線性插值偽彩顯示。

3、雙線性插值偽彩顯示

雙線性插值的原理不做過多贅述,總體而言就是根據(jù)已知的像素對中間的區(qū)域進行估計。

for(int?screenY =?0; screenY <?240; screenY++) {? ??// 計算對應(yīng)的原始數(shù)據(jù)行(保留右側(cè)16像素顯示信息)? ??for(int?screenX =?0; screenX <?224; screenX++) {?? ? ??// 將屏幕坐標(biāo)映射到原始數(shù)據(jù)坐標(biāo)(32x24 → 224x240)? ? ??float?srcX = (screenX *?31.0) /?223.0; ?// 0-31? ? ??float?srcY = (screenY *?23.0) /?239.0; ??// 0-23
? ? ??// 確定四個相鄰采樣點? ? ??int?x0 =?floor(srcX);? ? ??int?y0 =?floor(srcY);? ? ??int?x1 =?min(x0 +?1,?31);? ? ??int?y1 =?min(y0 +?1,?23);? ? ??? ? ??// 計算插值權(quán)重? ? ??float?xWeight = srcX - x0;? ? ??float?yWeight = srcY - y0;
? ? ??// 獲取四個點的溫度值? ? ??float?temp00 = frame[y0*32?+ x0];? ? ??float?temp01 = frame[y0*32?+ x1];? ? ??float?temp10 = frame[y1*32?+ x0];? ? ??float?temp11 = frame[y1*32?+ x1];
? ? ??// 雙線性插值計算? ? ??float?temp =?? ? ? ? temp00 * (1?- xWeight) * (1?- yWeight) +? ? ? ? temp01 * xWeight * (1?- yWeight) +? ? ? ? temp10 * (1?- xWeight) * yWeight +? ? ? ? temp11 * xWeight * yWeight;
? ? ??// 繪制像素? ? ? tft.drawPixel(screenX, screenY,?tempToColor(temp));? ? }? }

雙線性插值偽彩處理

接下來讓我們看看效果

4、后續(xù)安排

后面應(yīng)該會對這個項目繼續(xù)更近,打算將其制作成PCB,總成本大概不到200元并且設(shè)計相應(yīng)的手機APP,期待以后的文章吧!

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄