陳誠,何錦清,孫華
(西華大學機械工程學院,四川成都,610039)
溫度這一參數無論是在工業生產還是日常起居方面都被廣泛測量和使用,在農業、軍事、電力、科學研究等多領域都被視為一個重要的參數。目前日常使用的測溫方式分為接觸式和非接觸式兩種,MLX90640探頭的熱成像測溫方式屬于非接觸式測溫。其又屬于紅外溫度傳感器,具有測量速度快、測溫范圍寬、不用直接接觸物體測溫的特點。對基于MLX90640探頭的熱成像圖進行區域劃分可實現一個探頭對多個設備的測溫監控,提高設備利用率,減少溫度監控成本。
系統主要由MLX90640紅外傳感器探頭、樹莓派等主要部分構成。MLX90640探頭將測得的數據通過串口通信傳給樹莓派,通過對幀頭幀尾的檢測,獲取中間的有效數據,并判斷數據的完整性和可用性,無誤后,樹莓派依照探頭模塊的數據溫度轉換公式進行處理后,將溫度數據存入一個列表進行畫圖,再將數據按照預劃分區域數據的大小,存入相應大小的多個數組中,對每一個區域內采用尋找最大值及最大溫度值位置的措施,在圖像上顯示三個區域溫度最大值的位置,以此完成區域劃分,便于對被測視場內所有物體溫度進行監測,尋找發熱點位置。

圖1 系統總體結構框圖
MLX90640模塊是一個24×32像素紅外陣列傳感器,共有768個測量像素點,尺寸小,功耗低。溫度測量范圍廣,在0℃~50℃的工作溫度范圍內可監測-40℃~300℃的被測物溫度,在0℃~100℃范圍內測量精度達到±2攝氏度。能直接顯示中心點以及最高最低溫度。本實驗使用的MLX90640探頭序列號為0AB1435207,其表示的含義為該MLX90640探頭無熱梯度補償,其場視角為35°x55°,后續編號表示生產批號及批號補充碼。探頭每個基本像元采集的數據經過相應公式轉換后得到的溫度值是其視場內物體溫度的平均值。本實驗使用MLX90640BAB,接入轉換芯片后采用串口輸出格式,每幀包含1544個字節(16進制),其中包含幀頭、幀尾各4位數據。使用時用Micro USB線,5V/1A電源供電,可以很方便地接在樹莓派上。MLX90640是一種由傳感器、模擬信號部分、數字部分和 I/O 電路組成的混合信號器件,為了保持低噪聲,需要對電源開關噪聲進行退耦。外部電路的高噪聲也會影響器件的噪聲性能。通常用一個 100nF+1μF 陶瓷電容器就近與 VDD 和 Vss 連接,而與 VDD 管腳和Vss 管腳的距離需要盡量短。MLX90640在啟動后需要一定的時間達到熱平衡,熱平衡后才具有相對穩定和高精度性能。除此之外,紅外傳感器天生易受熱梯度引起的誤差影響,所以使用時盡量避免使傳感器受熱以及瞬態溫度環境的影響。
主控芯片為:STM32F301。STM32F301x6/8系列是基于高性能ARM Cortex -M4 32-bit RISC核心操作的,頻率可達72 MHz,具有一個嵌入浮點單元(FPU)。該系列集成了高速嵌入式存儲器(高達64k字節的閃存,16k字節的SRAM),以及廣泛的增強I/O和連接到兩個APB總線的外設。設備提供了一個快速的12位ADC(5 Msps),三個比較器、一個運算放大器,多達18個電容感測通道,一個DAC通道,低功耗RTC,一個通用的32位定時器,三個通用的16位定時器,定時器驅動DAC。此外還具有標準和先進的通信接口:3個I2C,多達3個USARTs,多達2個具有多路全雙工I2S的spi和一個紅外發射機。STM32F301x6/8系列分別工作在-40 ~ +85°C和-40 ~ +105°C的溫度范圍,在2.0 ~ 3.6 V電源下使用。
340E910 USB轉TTL芯片:電腦端USB是USB電平,單片機的信號是TTL電平,兩者的電平不同是無法進行通訊的,需要通過轉換才能實現互相通訊。此芯片實現了USB電平與TTL電平的相互轉換。從而實現將輸出用micro USB-USB線與樹莓派相連接。
除此之外,該模塊上還有一個標稱中心頻率為8.00MHz的晶振。
本設計使用樹莓派3B作為CPU系統,Linux系統版本為Linux raspberrypi 5.4.51-v7,可以在樹莓派官網https://www.raspberrypi.org/software/operatingsystems/ 下載樹莓派OS,如帶有樹莓派操作系統與桌面和推薦的軟件的最新系統版本下載鏈接為:https://downloads.raspberrypi.org/raspios_full_armhf/images/raspios_full_armhf-2021-01-12/2021-01-11-raspios-buster-armhf-full.zip ,本鏈接所下載系統兼容所有樹莓派型號。樹莓派是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內存硬盤,卡片主板周圍有1/2/4個USB接口和一個10/100 以太網接口(A型沒有網口),可連接鍵盤、鼠標和網線,同時擁有視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一塊很小的主板上,具備所有PC的基本功能只需接通電視機和鍵盤,就能執行如電子表格、文字處理、玩游戲、播放高清視頻等諸多功能。樹莓派以其低能耗、移動便攜性、GPIO等特性,可以用來控制硬件、電機,加載傳感器實現環境監控,還能涉足物聯網。樹莓派上自帶有Thonny軟件,它是基于python內置圖形庫tkinter開發出來的支持多平臺(windows,Mac,Linux)的python IDE,支持語法著色、代碼自動補全、debug等功能,是一種“輕量級”的python IDE。實驗的代碼編寫和調試在此軟件內進行。
本實驗需要額外添加的類庫及其安裝命令如下:
(1)serial是關于串口通信的類庫,pyserial模塊封裝了對串口的訪問,用戶調用就能實現對串口的訪問和數據的讀取。python里面使用serial庫來操作串口,serial的使用流程跟平常的類似,具有打開、關閉串口,設置端口和波特率等串行口狀態,讀、寫數據等功能。在樹莓派中,其安裝命令為:
sudo apt-get install python3-serial
(2)matplotlib是關于python繪圖工具的類庫,在樹莓派中使用以下兩行命令完成對numpy和scipy庫的安裝:
sudo apt-get install python-numpy
sudo apt-get install python-scipy
在安裝好前兩個庫的前提下再安裝matplotlib類庫,安裝命令為:
import matplotlib: sudo apt-get python-matplotlib
本實驗使用代碼:draw_data = np.array(list_768).reshape(24,32),即可對熱成像探頭采集并經過轉換后的768個溫度數據,繪制生成24×32分辨率的整張熱成像圖。使用代碼imax,jmax = np.unravel_index(draw_data.argmax(), draw_data.shape)可以在整幅圖像中尋找溫度最大值的位置。
本文將對一瓶熱水、正在加熱的電烙鐵、正在運行的樹莓派三個物體進行測溫,并繪制劃分區域后的熱成像圖,以此為例,對各功能模塊運行結果情況進行展示。測溫場景如圖2所示。

圖2 對三個物體的溫度監測
正常情況下,MLX90640模塊每一次測量被測物溫度信息后將發送給樹莓派一幀共有1544位的數據,其中有效的包含完整溫度信息的數據個數是1536個,本實驗中使用list_1536裝有效數據。MLX90640模塊將測得的數據通過串口通信傳給樹莓派,樹莓派先獲取系統當前時間,為了保證無論數據從當前幀的哪一位開始傳輸,樹莓派都能接收到至少一幀完整數據,待一切就緒后一次接收3200個來自傳感器的數據。
本實驗的幀頭為[90,90,2,6],判斷樹莓派是否完整接收到一幀數據的方法如下所述:在接受到的3200個數據中開始幀頭檢測,從第一個幀頭到第二個幀頭之間包含了一幀想要獲取的數據信息,將這一段數據減去首位各兩位的兩幀數據的幀頭后,再減去剩余數據最末的四位幀尾,由此可以從這3200個數據中獲取來自探頭模塊發送的與溫度信息相關的完整數據。而串口數據的發送不可能保證不存在數據的丟失問題,因此可以自己設置一個幀的數據用于檢測數據是否完整,其具體思路如下所述:本實驗檢驗數據完整性的思路是判斷接收到的數據個數是否符合要求,即實際接受到的數據個數是否等于理論接收數據1544個,由此判斷數據的完整性。例如自己設置一幀數據list_2=[自設幀頭1,自設幀頭2,理論接收數據個數,有效數據開始的位數,有效位數截止的位數,自設幀尾1~3],共計八位數據,list_1裝入接收到的一幀數據中不包含幀頭幀尾的數據,用list_2+list_1作為返回值裝到list_1536。
在溫度轉換處理時,先判斷list_1536中第三個數據是否為1544,即判斷數據接收是否完整,滿足條件則視為樹莓派接受的數據完整性好,可以用于熱成像圖的繪制。然后再忽略list_1536的前八個數據,即忽略用于校驗數據完整性的list_2里面的數據,只對list_1中的數據進行溫度轉換。在這1536個有效溫度數據中,每兩個數據可以轉換成一個溫度值,根據溫度轉換公式將數據轉化為768個溫度數據存入list_768中,再將這768個溫度數據分別存入到三個不同的數組中去,以便于在繪制的整張熱成像圖中求得每個區域最高溫度的大小以及整張圖片最大溫度值的位置。
3.2.1 溫度的獲取
例如一幀數據
<5A5A-0206-6EOE-690E-5AOE-XXXX-050E-8DOE-D540>
Byte0~Byte 1---0x5A0x5A表示幀頭;
Byte2~Byte3---0x0206 表示數據量 =0x06*256+0x02=1538個溫度數據(包括目標數據和MLX90640自身溫度數據);
Byte4~ Byte1539---表示圖中768個點的溫度數據,輸出順序一次為:
(Col 1,Row 1) →(Col 32,Row 1) →(Col 1,Row 2) →(Col 32,Row 2)
→ (C o l 1,R o w XX)→(Col 32,Row XX)→(Col 1,Row 24) →(Col 32,Row 24)
注:(Col 1,Row 1)為上圖中右上角開始,轉換后所得溫度均為放大100倍后輸出。

圖3 數據采集示意圖
3.2.2 溫度的轉化
從數據到溫度的轉換通過以下公式進行:

其中Tnum轉化后的768個溫度數據,列表list_1536表示接收到探頭發送的完整的1536個數據,開始時num=0,num0=0,每次轉換后num=num+1,num0=num0+2。
Byte1540~ Byte1541表示MLX90640自身溫度數據,也由轉換公式計算得到。
Byte1542~ Byte1543表示前771個字的累加和,每個字為16bit。
Word1=0x5A5A,Word2=0x0602( 即 數 據 量 ),Word3=0x0E6E(即點1的溫度數據),……,Word770=0x0E05(即點768的溫度數據),Word771=0x0E8D(即MLX 90640的溫度數據),校驗和=Word1+Word2+Word3+…+Word700+Word771= Byte 1543*256+Byte1542。
本實驗由于原本設定輸出圖像尺寸為24×32,由于圖片在水平方向長度更長,固采用縱向區域劃分,縱向區域劃分適用于對左右排列的物體或設備的溫度監控,其具體步驟如下:將一幀去掉幀頭幀尾的有效數據進行溫度轉化后的768個溫度數據,先進行整體繪圖,得到一個24×32分辨率的圖像。然后將其分別裝入大小為24×11、24×11、24×10的A、B、C三個數組中, 從而實現每十一列(最后一個區域是十列)劃分一個區域得到三個有效監控區。將每個區域的數組A、B、C分別使用函數統計出最大值max1、max2、max3,找出最大值點的位置并顯示在圖片上,即可對三個區域的最大值進行監控。最后將最大溫度值位置標注在圖片上,以便對整體進行監控管理。
若希望對圖像區域進行橫向劃分,例如,將32×24的圖像從上至下劃分三個區域,設計思路為將溫度轉換后的數據分別裝入大小為32×8的三個數組D、E、F中,后續步驟類似,通過對D、E、F三個區域的獨立最大值監測以實現疊放式設備或物體的溫度監測工作。
從圖4可以看到,圖片被縱向分割為左、中、右三個區域。左邊裝有熱水的瓶子最高溫度為60.0℃,正在加熱的電烙鐵最高溫度為77.09℃,正在運行的樹莓派圖像邊緣被掩蓋,最高溫度為19.89℃。并標記出整張熱成像圖最大溫度點的位置在正在加熱的電烙鐵頭部。

圖4 縱向劃分區域后的熱成像圖
本文基于MLX90640探頭的熱成像圖劃分區域的研究過程進行闡述。紅外溫度探頭MLX90640將測得數據用串口通信方式發送給樹莓派,樹莓派首先將接收到的數據進行完整性判斷后,再對接收到的完整數據進行數據到溫度值的轉換,然后將所得的768個溫度數據進行圖像繪制,再將其分為三個數組,針對每個數組求取其最大溫度點的位置和大小,標記整幅圖像中的最大溫度點位置。相比于傳統測溫系統一對一的監控模式,本設計在此方面有所提升,以一個探頭同時監控多個設備,提高了資源利用率,也為用戶節省成本,便于用戶進行整體監控和管理。除此之外,還可以在生成的熱成像圖中直接明了地發現探頭檢測到最大溫度點的位置,便于人工復查尋找到發熱點。