之前一直有一個想法想做一個熱成像儀,正好最近有一個項目需要用到熱成像,于是在琢磨如何制作使用一款具有無線功能的熱成像裝置。
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,期待以后的文章吧!