標(biāo)題: GY-906 MLX90614紅外測溫模塊單片機代碼及全部注釋 OLED顯示 非接觸式智能測溫系統(tǒng) [打印本頁]
作者: xxxx9357354 時間: 2020-10-22 10:36
標(biāo)題: GY-906 MLX90614紅外測溫模塊單片機代碼及全部注釋 OLED顯示 非接觸式智能測溫系統(tǒng)
本程序出自:http://www.torrancerestoration.com/bbs/dpj-181601-1.html
本作品大部分內(nèi)容來自于網(wǎng)上轉(zhuǎn)載,做出了一些修改,目前也不是很完善,望大家能繼續(xù)完善本開源作品,一起學(xué)習(xí),共同進(jìn)步,感謝開源作者,感謝大家:
非接觸式智能測溫系統(tǒng)
本系統(tǒng)以單片機STC89C51為核心,使用紅外傳感器作為感應(yīng)器,檢測是否有人要進(jìn)行溫度測量,將檢測的結(jié)果轉(zhuǎn)化為電信號傳輸至單片機中。單片機再進(jìn)行判斷是否啟用紅外測溫傳感器進(jìn)行溫度數(shù)據(jù)采集。將采集的數(shù)據(jù)送至單片機進(jìn)行計算、處理后傳輸?shù)?/font>OLED顯示屏進(jìn)行顯示,并且由MP3播放器進(jìn)行播報溫度是否正常。
隨著人們對自身安全和健康要求的不斷提高,原有接觸式水銀溫度腋測法的缺點不斷顯露。其接觸式的體溫測量方法可能直接導(dǎo)致發(fā)熱類的傳播。臨床上常用的水銀體溫計雖價格便宜,測量性能穩(wěn)定,但缺點明顯,測溫時間長,消毒繁瑣,易破損,造成水銀泄漏,增加護(hù)理工作量和潛在危險性,
不適用于人員流動較大的公共場所進(jìn)行體溫篩查。選擇一種快速、簡單、精確的體溫篩查器械尤為重要,紅外體溫測量裝置在大規(guī)模人群防控傳染病監(jiān)測中具有較好的應(yīng)用效果,具有適應(yīng)性高、響應(yīng)快、精度高、可動態(tài)監(jiān)測等優(yōu)勢。
因此許多國家紛紛采取措施,主要方法是采用手持式的紅外測溫儀檢測。該方式的優(yōu)點是不接觸皮膚,對人體無任何害處,而且速度快,在1秒鐘內(nèi)就能鑒別被檢測者是否發(fā)燒,缺點是增加了檢測者的感染幾率,給他們造成很大的心理負(fù)擔(dān)。在復(fù)學(xué)的同時,我們迎來了電子系統(tǒng)設(shè)計,借助這次設(shè)計作品的機會我們研發(fā)了一款具有自動感應(yīng)、自動測量、智能播報的非接觸式智能測溫系統(tǒng),該系統(tǒng)不僅可以提高測量效率,還可以有效地解決檢測者被感染的問題。
二、系統(tǒng)硬件的具體設(shè)計與實現(xiàn)
2.1系統(tǒng)原理和框圖
非接觸式智能測溫系統(tǒng)的硬件組成如下圖2-1所示。本系統(tǒng)主要由STC89C51單片機及其外圍電路、紅外檢測傳感器、紅外測溫傳感器、顯示裝置、MP3播放器等五部分組成。單片機循環(huán)檢測由紅外傳感器檢測傳輸來的電信號,據(jù)此產(chǎn)生的電信號來判斷是否有人,同時紅外測溫傳感器進(jìn)行相應(yīng)的工作方式。當(dāng)檢測到有人靠近時,紅外測溫傳感器開始運行,此時OLED顯示屏上將會顯示當(dāng)前檢測者的溫度,并且進(jìn)行語音播報溫度是否正常(體溫在36.2°—37.2°之間播放:體溫正常且綠燈亮起;否則,播報體溫異常且紅燈亮起)。如果沒有人靠近,OLED顯示屏將會在2秒之后進(jìn)行熄屏。此時紅外傳感器繼續(xù)檢測是否有人。
1.png (47.74 KB, 下載次數(shù): 86)
下載附件
2020-10-22 10:26 上傳
圖2-1系統(tǒng)設(shè)計框圖
2.2主控芯片
該作品采用了STC89C51作為控制核心,對每個模塊傳送過來的數(shù)據(jù)進(jìn)行處理并發(fā)送。該單片機是一種低功耗、高性能CMOS8位微控制器,具有8K字節(jié)系統(tǒng)可編程Flash存儲器,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。內(nèi)部看門狗定時器、低電壓復(fù)位和低電壓檢測等內(nèi)部保護(hù)特性。
2.3紅外測溫傳感器
2.3.1紅外測溫原理
紅外測溫系統(tǒng)是采用紅外測溫模塊接收不同光譜,經(jīng)過STC89C51單片機處理后在OLED顯示模塊上顯示不同數(shù)字來實現(xiàn)的。物體或人的不同溫度反應(yīng)出不同的光譜,紅外測溫系統(tǒng)發(fā)射一束光到物體或人的表面,然后反射到紅外測溫模塊中接收,其物體或人的溫度的光譜經(jīng)過紅外測溫模塊處理后,將以數(shù)字信號傳給單片機,再由OLED顯示模塊顯示出來。
2.3.2 GY-906 MLX90614的特點
(1)應(yīng)用范圍廣泛,適用于恒溫控制、工業(yè)系統(tǒng)、消費類產(chǎn)品、溫度計或任何熱敏系統(tǒng)。
(2)體積小巧,可安裝于狹小的空間范圍內(nèi),進(jìn)行溫度測量。
(3)易集成。
(4)3V和5V電源電壓。
(5)節(jié)能工作模式。
(6)車用級別標(biāo)準(zhǔn)。
2.4紅外感應(yīng)傳感器
該傳感器對環(huán)境光線適應(yīng)能力強,其具有一對紅外線發(fā)射與接收管,發(fā)射管發(fā)射出一定頻率的紅外線,當(dāng)檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收。經(jīng)過比較器電路處理之后綠色指示燈會亮起,同時信號輸出接口輸出數(shù)字信號(一個低電平)。該傳感器的探測距離可以通過電位器調(diào)節(jié)、具有干擾小、便于裝配、使用方便等特點。
2.5顯示裝置
OLED(Organic Light-Emitting Diode)有機發(fā)光二極管又稱為有機激光顯示、OLED顯示技術(shù)具有自發(fā)光的特性、采用非常薄的有機材料涂層和玻璃基板、當(dāng)有電流通過時、這些有機材料就會發(fā)光、而且OLED顯示屏幕可視角大、功耗低、OLED由于同時具備自發(fā)光、不需背光源、對比度高、厚度薄視角廣、反應(yīng)速度快、可用于撓曲面板、使用溫度范圍廣、結(jié)構(gòu)及制程等優(yōu)異之特性、先接觸的1286屏都是LCD的、需要背光、功耗較高,而OLED的功耗低、更加適合小系統(tǒng)、由于兩者發(fā)光材料的不同、在不同的環(huán)境中、OLED的顯示效果好、模塊供電可以是3.3v也可以是5v、不需要修改模塊電路、OLED屏具有多個控制指令、可以控制OLED的亮度、對比度、開關(guān)升壓電路等指令、操作方便、功能豐富、可顯示漢字、ASCII、圖案等、同時為了方便應(yīng)用在產(chǎn)品上、預(yù)留4個M3固定孔、方便用戶固在機殼上。
2.6 MP3播放器
YS-M3語音播放器的特點有:
(1)觸發(fā)一次播放一次。
(2)9個觸發(fā)端口,直接觸發(fā)播放。
(3)結(jié)合單片機IO口編碼觸發(fā)播放31首MP3。
(4)內(nèi)部帶3W功放,滿足大部分應(yīng)用要求。
三、系統(tǒng)軟件設(shè)計
3.1 程序描述
程序中主要用到的知識點有:單片機定時器、紅外測溫傳感器的I2C通信方式和溫度計算、OLED的顯示、延時函數(shù)的調(diào)用以及LED燈的亮滅等。其中,單片機中的定時器尤為重要,主要用于產(chǎn)生固定時間,也可以作為UART等外設(shè)的頻率發(fā)生器。
3.2 程序設(shè)計思路
紅外感應(yīng)傳感器一旦檢測到有人靠近,紅外測溫模塊開始采集溫度數(shù)據(jù)并送至單片機進(jìn)行計算,再將單片機計算出來的數(shù)據(jù)進(jìn)行比較,若在正常范圍值,則單片機發(fā)送一個低電平信號到MP3播放器進(jìn)行播報“體溫正!鼻揖G燈亮起。否則,播報“體溫異!鼻壹t燈亮起。同時,OLED顯示屏也將從單片機得到處理完的溫度數(shù)據(jù)進(jìn)行顯示當(dāng)前檢測溫度,若在兩秒后沒人檢測溫度,OLED顯示屏將會熄滅。此時紅外感應(yīng)傳感器持續(xù)檢測是否有人。
3.3 程序流程圖
作品的程序流程圖如下圖3-1所示,紅外感應(yīng)傳感器一旦檢測到有人,將會發(fā)送一個低電平信號到單片機中,單片機即發(fā)出開始信號START,緊接著在總線上發(fā)出尋址信號(AddressByte),其地址信息的讀/寫控制位為1時,表示對GY-906進(jìn)行讀操作。單片機接收到GY-906的應(yīng)答信號,通信建立起來,接著GY-906發(fā)送溫度數(shù)據(jù)的高8位。單片機則開始一位一位的接收GY-906發(fā)出的溫度數(shù)據(jù),然后保存,完成8位數(shù)據(jù)接收后,單片機便發(fā)送一個應(yīng)答信號。GY-906收到應(yīng)答信號后,再發(fā)送溫度數(shù)據(jù)的低8位。單片機收到并保存低8位數(shù)據(jù)后,單片機在緊隨的下一個周期拉高SDA,發(fā)送不應(yīng)答信號。由此單片機將得到十六位二進(jìn)制數(shù)并加以處理,變成十進(jìn)制的BCD碼,最后通過顯示屏顯示出來。
2.png (23.3 KB, 下載次數(shù): 90)
下載附件
2020-10-22 10:27 上傳
圖3-1系統(tǒng)程序流程圖
四、系統(tǒng)創(chuàng)新
1、相對于額溫槍而言,該作品采用了智能感應(yīng),實現(xiàn)了非接觸式紅外測溫,可以有效地解決檢測者被感染的問題。
2、在OLED顯示溫度的基礎(chǔ)上,增加了智能語音播報系統(tǒng),免去了人眼去獲取數(shù)據(jù)的步驟。
3、在GY-906紅外測溫的探頭上添加了菲涅爾光學(xué)透鏡,增加了紅外探頭的測試距離,也使整個測試系統(tǒng)更加穩(wěn)定。
五、相關(guān)調(diào)試
5.1 電前檢查
任何電子電路在組裝好之后,都必須要進(jìn)行線路檢查,以免出現(xiàn)短路。檢查的方法就是按照一定順序?qū)φ罩娐穲D進(jìn)行逐級檢查,其中要特別注意電源是否連接正確,電源與地是否有短接,集成電路和晶體管的引腳是否連接正確,用手輕輕觸動一下元器件看焊點是否焊牢等等。
5.2 通電檢查
將所需電源電壓數(shù)值先調(diào)試好之后,就可以接通電路電源。電源接通之后,先觀察電路是否出現(xiàn)異常現(xiàn)象,例如出現(xiàn)冒煙、異常氣味以及器件發(fā)燙等等。如果出現(xiàn)上述異,F(xiàn)象就應(yīng)該立即斷開電源,在確保 排除故障后才能再次接通電源。然后,測量每個集成塊的電源引腳電壓是否正常,確保集成電路已進(jìn)行正常的通電工作。
5.3 軟件調(diào)試
硬件調(diào)試完之后還要進(jìn)行軟件調(diào)試,就是將程序?qū)懭氲絾纹瑱C的存儲器中來實現(xiàn)整個實物的設(shè)計功能。
六、結(jié)論
體溫作為防控篩查的重要指標(biāo)之一,其數(shù)據(jù)需高度準(zhǔn)確,以利于醫(yī)護(hù)人員及時采取防控措施。在體溫篩查中,應(yīng)用非接觸式智能測溫系統(tǒng)進(jìn)行體溫初步篩查安全、有效,測量時間短,節(jié)約時間,降低感染風(fēng)險,節(jié)省工作人員勞動量等。
在此次非接觸式智能測溫控制系統(tǒng)的設(shè)計中,讓我感覺到了單片機應(yīng)用的廣泛性,它很貼切我們的日常生活,應(yīng)用無處不有,它并不是想象中的那么復(fù)雜。在設(shè)計中,要充分了解所用芯片的使用條件及輸入輸出的特性,這樣才能避免因使用錯誤而多走彎路。電路設(shè)計部分應(yīng)該有的精神就是廣集資料。只憑借自己頭腦中的知識是遠(yuǎn)遠(yuǎn)不夠的。哪里出現(xiàn)了問題,就要翻書本,或上網(wǎng)查資料。當(dāng)然也要開動自己的腦筋怎樣使系統(tǒng)電路更完美。例如我的設(shè)計是非接觸式智能測溫系統(tǒng)。有非接觸式測溫,自然會用到紅外測溫傳感器,每種紅外測溫傳感器都有不同的特性和功能,你就要進(jìn)行選擇了。例如對紅外測溫傳感器的選擇,你就要選擇你所熟悉的、所了解的。在電路設(shè)計時,應(yīng)充分發(fā)揮單片機的記憶運算、判斷控制能力,避免采用復(fù)雜的、穩(wěn)定性較差的模擬電路。為了使微機控制系統(tǒng)各種硬件設(shè)備能夠正常運行,有效地實現(xiàn)作品的相關(guān)功能,除了要設(shè)計合理的硬件電路,還必須要有高質(zhì)量的軟件支持,兩者相輔相成,共同維持系統(tǒng)的正常運作。
七、單片機+MLX90614代碼及作品圖
- #include "reg52.h"
- #include "stdio.h"
- #include "LQ12864.h"
- #include "GY906.h"
- #include "eepom.h"
- sbit hongwai=P1^5; //紅外感應(yīng)傳感器
- sbit MP3_1 = P2^4; //語音播放異常
- sbit MP3_2 = P2^5; //語音播放正常
- sbit LED1 = P1^2; //紅色LED燈
- sbit LED2 = P1^3; //綠色LED燈
- float wendu_change;
- unsigned int temp_int;
- unsigned int temp ;
- unsigned int ceshi ;
- uint temp_[3]={0};
- uint biaohao_num_[3]={0};
- uchar diaplay_5s = 0; //讀取顯示
- uchar flage_5s; //5s計時
- uint zhancun;
- uchar first_flage = 1;
- /*
- 紅外感應(yīng)傳感器 P1^5;
- 語音播放 P2^4/P2^5
- LED P1^2/P1^3
- oled 端口定義
- sbit SCL_OLED=P1^0; //串行時鐘
- sbit SDA_OLED=P1^1; //串行數(shù)據(jù)
- //GY-906 端口定義
- sbit SCL=P2^6;// 時鐘線
- sbit SDA=P2^7;// 數(shù)據(jù)線
- */
- void oled_gd_diaplay()
- {
-
- OLED_P16x16Ch(70,0,0); //溫
- OLED_P16x16Ch(90,0,1); //度
- OLED_P16x16Ch(110,0,2); //:
- // dxzm('.',70,0); //.
-
- }
- void oled_wendu()
- {
- char i;
- if(temp > 0)
- {
- if (0 == diaplay_5s)
- {
-
- OLED_P16x16Ch(0,0,3); // 閩
- OLED_P16x16Ch(20,0,4); // 南
- OLED_P16x16Ch(40,0,5); // 科
- OLED_P16x16Ch(60,0,6); // 技
- OLED_P16x16Ch(80,0,7); // 學(xué)
- OLED_P16x16Ch(100,0,8); // 院
- OLED_P16x16Ch(0,4,0); // 溫
- OLED_P16x16Ch(20,4,1); // 度
- OLED_P16x16Ch(40,4,2); // :
-
- //我們要達(dá)到的體溫精度是0.1,因此要有三位數(shù)
- // dxzm(((int)(temp)/100)+48,50,0);
- dxzm(((temp)/100)+48,60,4); //進(jìn)行顯示百位
- dxzm(((temp)/10%10)+48,70,4); //進(jìn)行顯示十位
- dxzm('.',80,4); //進(jìn)行顯示.
- dxzm(((temp)%10+48),90,4); //進(jìn)行顯示個位
- }
-
- else //讀取溫度標(biāo)志位等于 1
- {
- oled_gd_diaplay();
- TR0 =1; //打開定時器
-
- for(i = 0;i < 3;i++)
- {
-
- dxzm(0+48,70,i*2+2);
- dxzm((temp_[i]/100)+48,80,i*2+2);
- dxzm((temp_[i]/10%10)+48,90,i*2+2);
- dxzm('.',100,i*2+2); //.
- dxzm((temp_[i]%10)+48,110,i*2+2);
-
- }
-
- if(flage_5s >= 100) //顯示5s
- {
- TR0 = 0;
- diaplay_5s = 0;
- flage_5s = 0;
- OLED_Fill(00);
- }
-
- }
- }
-
- }
- /******************把數(shù)據(jù)保存到單片機內(nèi)部eepom中******************/
- void write_eepom(uchar num)
- { char num_num,i;
- if(1 == first_flage)
- {
- SectorErase(0x2000);
- first_flage = 0;
- }
-
- if(5 == num)
- {
- for(i=0;i<9;i++)
- {
- byte_write(0x2000+i,0);
- }
- }
- else if(num!=5)
- {
- num_num = num*3;
- byte_write(0x2000+num_num,(temp) % 256);
- byte_write(0x2001+num_num,(temp) / 256);
- byte_write(0x2002+num_num,num);
- }
- }
- /******************把數(shù)據(jù)從單片機內(nèi)部eepom中讀出來*****************/
- void read_eepom(uchar tem_num, uchar biao ,uchar num)
- {
- temp_[tem_num] = byte_read(0x2001+num*3);
- temp_[tem_num] <<= 8;
- temp_[tem_num] |= byte_read(0x2000+num*3);
- biaohao_num_[biao] = byte_read(0x2002+num*3);
- }
- void read_all_data()
- {
- uchar i;
- for(i =0;i<3;i++)
- {
- read_eepom(i,i,i);
- // delay(50);
- }
- }
- void Tim_init()
- {
- SCON = 0x50; /* 010 1 0000B,工作方式1, 8位UART,波特率可變,允許接收 */
- TMOD = 0x21; /* T1工作于方式2 T0工作在方式1*/
- TCON = 0x40; /* 定時器1開始計數(shù) */
- TH1 = 250; /* T1計數(shù)初值 */
- TL1 = 250;
- PCON = 0x80; /* SMOD置1,雙倍速率 */
- RI = 0;
- TI = 1; //串口打印必需為1
-
- TL0 = (65536-50000)%256; //reload timer0 low byte
- TH0 = (65536-50000)/256; //reload timer0 high byte
- // TR0 = 1; //timer0 start running
- ET0 = 1; //enable timer0 interrupt
- EA = 1; //open global interrupt switch
- }
-
- int main(void)
- {
- Tim_init(); //定時器和串口的初始化
- i2c_Init(); //屏幕通訊初始化
- OLED_Init(); //oled顯示初始
- while(1)
- {
- if(hongwai==0) //紅外感應(yīng)傳感器判斷是否有人
- {
- temp = (int)(memread()*10); // 讀取溫度,讀取小數(shù)點后一位所以*10
- oled_wendu(); // oled顯示當(dāng)前溫度
- if(temp>372) //判斷溫度是否大于37.2
- {
- MP3_1=0; //播放體溫異常
- LED1=0; // 同時紅色LED燈亮起
- delay(1000); // 給語音播放和紅色lED燈亮,留一點時間
- MP3_1=1; // 關(guān)閉語音播放
- LED1=1; //關(guān)閉紅色LED
- }
- else if(temp<361) //判斷溫度是否小于36.1
- {
- MP3_1=0; //播放體溫異常
- LED1=0; // 同時紅色LED燈亮起
- delay(1000); // 給語音播放和紅色lED燈亮留一點時間
- MP3_1=1; // 關(guān)閉語音播放
- LED1=1; //關(guān)閉紅色LED
- }
- else // 溫度在36.1-37.2之間
- {
- MP3_2=0; //播放體溫正常
- LED2=0; // 同時綠色LED燈亮起
- delay(1000); // 給語音播放和綠色lED燈亮,留一點時間
- MP3_2=1; // 關(guān)閉語音播放
- LED2=1; //關(guān)閉綠色LED
- }
- delay(1200); //使得一秒左右的時間,只采集一次,避免測量者再測溫的時候一下子采集了好幾組數(shù)據(jù)
-
- }
- else //紅外檢測沒人
- {
-
- MP3_1=1; // 關(guān)閉語音播放
- MP3_2=1; // 關(guān)閉語音播放
- LED1=1; //關(guān)閉紅色LED
- LED2=1; //關(guān)閉綠色LED
- delay(1200); //調(diào)用延時 ,讓最后一個的體溫數(shù)據(jù)顯示停留一段時間
- OLED_Fill(0x00); //進(jìn)行清屏,熄滅屏幕
- }
-
- }
- }
- /* Timer0 interrupt routine */
- void tm0_isr() interrupt 1 using 1 //50ms中斷計時
- {
- TL0 = (65536-50000)%256; //reload timer0 low byte
- TH0 = (65536-50000)/256; //reload timer0 high byte
- flage_5s++;
- }
-
復(fù)制代碼
SRGN0XWJ{KD_C`TE3}FJ{5C.png (118.03 KB, 下載次數(shù): 83)
下載附件
2020-10-22 10:32 上傳
測試圖2.jpg (1.45 MB, 下載次數(shù): 92)
下載附件
2020-10-22 10:30 上傳
51hei.png (5.54 KB, 下載次數(shù): 95)
下載附件
2020-10-22 16:29 上傳
本程序出自:http://www.torrancerestoration.com/bbs/dpj-181601-1.html
本作品大部分內(nèi)容來自于網(wǎng)上轉(zhuǎn)載,做出了一些修改,目前也不是很完善,望大家能繼續(xù)完善本開源作品,一起學(xué)習(xí),共同進(jìn)步,感謝開源作者,感謝大家:
上圖代碼的Keil工程文件51hei附件下載:
非接觸式智能測溫系統(tǒng)-程序.zip
(94.66 KB, 下載次數(shù): 239)
2020-10-22 10:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: 我叫小大打 時間: 2020-10-22 20:40
你好,這是我關(guān)注的博主發(fā)的,你抄別人的程序,然后原博主都不標(biāo)志名字。。。你有點那個。。。。拿別的博主程序加了個提醒。。。。
作者: jovew 時間: 2020-10-23 11:00
在哪里抄的?
說明一下!。
作者: 我叫小大打 時間: 2020-10-24 19:51
想看看原博主的東西嗎
作者: 海鷹zero 時間: 2021-1-15 17:36
請問MP3模塊怎么接線呢,試了下能測體溫,但是為什么每次測人體溫都是40多度了,求教
作者: 王然 時間: 2021-5-23 22:54
請問MP3模塊具體型號是什么
作者: 123單片機學(xué)習(xí) 時間: 2021-8-1 12:02
原理圖能分享一下嗎?
作者: 51hei團(tuán)團(tuán) 時間: 2021-8-1 17:12
直接看程序里面的引腳定義,如果和你的不同,根據(jù)自己的電路修改


作者: 王源01 時間: 2021-12-12 23:11
那些沒有的頭文件是怎么打出來的?
作者: 小白求大神 時間: 2022-4-23 23:48
你好,可以分享一下這個程序的全圖嗎?
作者: nb_y 時間: 2022-11-18 19:53
我也想知道,我翔咨詢點GY-906的問題
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |