0 前言
?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? 基于單片機(jī)的遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng)
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
1 簡(jiǎn)介
基于STM32的紅外測(cè)溫測(cè)距實(shí)驗(yàn)箱,可實(shí)現(xiàn)紅外測(cè)溫,測(cè)距等功能。
2 主要器件
- STM32F103RCT6芯片
- MLX90614紅外測(cè)溫傳感器
- TOF10120激光測(cè)距傳感器
- ESP_WIFI模塊
- 1.77寸TFT屏幕
- DHT11溫濕度傳感器
- DS18B20傳感器
- 光敏電阻、蜂鳴器、按鍵等
3 實(shí)現(xiàn)效果
4 設(shè)計(jì)原理
4.1 MLX90614紅外測(cè)溫傳感器
MLX90614是一款紅外非接觸溫度計(jì)。TO-39金屬封裝里同時(shí)集成了紅外感應(yīng)熱電堆探測(cè)器芯片和信號(hào)處理專用集成芯片。由于集成了低噪聲放大器、17位模數(shù)轉(zhuǎn)換器和強(qiáng)大的數(shù)字信 號(hào)處理單元,使得高精度和高分辨度的溫度計(jì)得以實(shí)現(xiàn)。溫度計(jì)具備出廠校準(zhǔn)化,有數(shù)字 PWM和 SMBus(系統(tǒng)管理 總線)輸出模式。作為標(biāo)準(zhǔn),配置為 10 位的 PWM 輸出格式用于連續(xù)傳送溫 度范圍為-20…120 ?C 的物體溫度,其分辨率為 0.14 ?C。 POR 默認(rèn)模式是 SMBus 輸出格式。
實(shí)物
硬件電路圖如下:
4.2 TOF10120激光測(cè)距傳感器
簡(jiǎn)介
TOF10120激光模塊最大的優(yōu)勢(shì)在于測(cè)距遠(yuǎn)、操作簡(jiǎn)單,程序中僅僅需要通過(guò)單片機(jī)給模塊串口發(fā)送命令字符串,就可以向單片機(jī)發(fā)送回距離數(shù)據(jù)。如果發(fā)送自動(dòng)測(cè)距的字符串命令,則模塊會(huì)按照一定頻率自動(dòng)回送數(shù)據(jù),相關(guān)物理量都可以通過(guò)命令字符串設(shè)置。傳感器僅需要串口就可以實(shí)現(xiàn)。
TOF10120基于Sharp低成本標(biāo)準(zhǔn)CMOS工藝和SPAD技術(shù),可為自動(dòng)對(duì)焦(AF)提供精確、可重復(fù)的長(zhǎng)距離測(cè)量,測(cè)量結(jié)果不受物體反射的影響。主要特點(diǎn)包括:
- 采用940nm激光;
- 小型陶瓷封裝(20×13.2×2.0mm);
- 可在室內(nèi)測(cè)量長(zhǎng)達(dá)1.8m長(zhǎng)度,精度5%;
- 測(cè)量距離不受姆堡反射的影響;
- 先進(jìn)廣促俄串?dāng)_補(bǔ)償技術(shù);
- 30ms高速測(cè)量;
- 單電源供電;
- Txd接口用于設(shè)備控制和數(shù)據(jù)傳送;
- 無(wú)鉛,符合RoHS指令。
TOF10120典型測(cè)距范圍為100-1800mm,電源電壓3-5v,消耗電流35mA,兼容Arduino、ESP8266、ESP32等5V和3.3V控制板,適合-20°C to +70°C等室內(nèi)外環(huán)境。
TOF10120支持UART、I2C通訊,1#引腳、2#引腳、3#引腳、4#引腳、5#引腳、6#引腳分別為GND、VDD、RXD、TXD、SDA、SCL。在六個(gè)引腳中,本項(xiàng)目只使用了其中的GND, VDD, SDA, and SCL四個(gè)腳。
根據(jù)數(shù)據(jù)表,TOF10120的I2C地址為0xA4,但尋址采用高7bit即0x52,這相當(dāng)于82。
4.3 DS18B20傳感器
DS18B20數(shù)字溫度計(jì)提供9位溫度讀數(shù)。信息經(jīng)過(guò)單線接口送入或送出DS18B20傳感器,因此從中央處理器到DS18B20僅需要提供電源以及一根數(shù)據(jù)線,就可以工作。
DS18B20的ROM指令表
DS18B20的RAM指令表
DS18B20單總線協(xié)議
1、DS18B20初始化
(1) 數(shù)據(jù)線拉到低電平“0”。
(2) 延時(shí)480微妙(該時(shí)間的時(shí)間范圍可以從480到960微妙)。
(3) 數(shù)據(jù)線拉到高電平“1”。
(4) 延時(shí)等待80微妙。如果初始化成功則在15到60微妙時(shí)間內(nèi)產(chǎn)生一個(gè)由DS18B20所返回的低電平“0”.根據(jù)該狀態(tài)可以來(lái)確定它的存在,但是應(yīng)注意不能無(wú)限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。
(5) 若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第3步的時(shí)間算起)最少要480微妙。
2、讀時(shí)序
(1) 將數(shù)據(jù)線拉低“0”。
(2) 延時(shí)1微妙。
(3) 將數(shù)據(jù)線拉高“1”,釋放總線準(zhǔn)備讀數(shù)據(jù)。
(4) 延時(shí)10微妙?!?/等待數(shù)據(jù)穩(wěn)定
(5) 讀數(shù)據(jù)線的狀態(tài)得到1個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。
(6) 延時(shí)45微妙。
(7) 重復(fù)1~7步驟,直到讀完一個(gè)字節(jié)。
3、寫時(shí)序
(1) 數(shù)據(jù)線先置低電平“0”
(2) 延時(shí)15微妙。
(3) 按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。
(4) 延時(shí)60微妙。
(5) 將數(shù)據(jù)線拉到高電平。
(6) 重復(fù)1~5步驟,直到發(fā)送完整的字節(jié)。
(7) 最后將數(shù)據(jù)線拉高。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-828202.html
5 部分核心代碼
/* 紅外溫度傳感器對(duì)象初始化 */
void MLXInitialization(MLXObjectType *mlx, //MLX90614對(duì)象
uint8_t address, //設(shè)備地址
MLXRead read, //讀數(shù)據(jù)函數(shù)指針
MLXWrite write, //寫數(shù)據(jù)函數(shù)指針
MLXDelayus delayus //微秒巖石函數(shù)指針
)
{
if((mlx==NULL)||(read==NULL)||(write==NULL)||(delayus==NULL))
{
return;
}
mlx->Read=read;
mlx->Write=write;
mlx->Delayus=delayus;
mlx->tempAmbient=0.0;
mlx->tempObject1=0.0;
mlx->tempObject2=0.0;
if(address>0x00)
{
mlx->devAddress=address;
}
else
{
mlx->devAddress=MLXSlaveAddress;
}
mlx->Delayus(200);
GetIDFromMLX90614(mlx);
mlx->flags=(uint8_t)ReadFlagFromMLX(mlx);
mlx->pwmctrl=ReadDataFromMLX(mlx,EEPROMAccess|PWMCTRL);
mlx->ConfigRegister=ReadDataFromMLX(mlx,EEPROMAccess|ConfigRegister1);
}
/*******************************************************************************
* 函 數(shù) 名 : DS18B20_Check
* 函數(shù)功能 : 檢測(cè)DS18B20是否存在
* 輸 入 : 無(wú)
* 輸 出 : 1:未檢測(cè)到DS18B20的存在,0:存在
*******************************************************************************/
u8 DS18B20_Check(void)
{
u8 retry=0;
DS18B20_IO_IN();//SET PG11 INPUT
while (DS18B20_DQ_IN&&retry<200)
{
retry++;
delay_us(1);
};
if(retry>=200)
return 1;
else
retry=0;
while (!DS18B20_DQ_IN&&retry<240)
{
retry++;
delay_us(1);
};
if(retry>=240)
return 1;
return 0;
}
/*******************************************************************************
* 函 數(shù) 名 : DS18B20_Read_Bit
* 函數(shù)功能 : 從DS18B20讀取一個(gè)位
* 輸 入 : 無(wú)
* 輸 出 : 1/0
*******************************************************************************/
u8 DS18B20_Read_Bit(void) // read one bit
{
u8 data;
DS18B20_IO_OUT();//SET PG11 OUTPUT
DS18B20_DQ_OUT=0;
delay_us(2);
DS18B20_DQ_OUT=1;
DS18B20_IO_IN();//SET PG11 INPUT
delay_us(12);
if(DS18B20_DQ_IN)
data=1;
else
data=0;
delay_us(50);
return data;
}
/*******************************************************************************
* 函 數(shù) 名 : DS18B20_Read_Byte
* 函數(shù)功能 : 從DS18B20讀取一個(gè)字節(jié)
* 輸 入 : 無(wú)
* 輸 出 : 一個(gè)字節(jié)數(shù)據(jù)
*******************************************************************************/
u8 DS18B20_Read_Byte(void) // read one byte
{
u8 i,j,dat;
dat=0;
for (i=1;i<=8;i++)
{
j=DS18B20_Read_Bit();
dat=(j<<7)|(dat>>1);
}
return dat;
}
/*******************************************************************************
* 函 數(shù) 名 : DS18B20_Write_Byte
* 函數(shù)功能 : 寫一個(gè)字節(jié)到DS18B20
* 輸 入 : dat:要寫入的字節(jié)
* 輸 出 : 無(wú)
*******************************************************************************/
void DS18B20_Write_Byte(u8 dat)
{
u8 j;
u8 testb;
DS18B20_IO_OUT();//SET PG11 OUTPUT;
for (j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if (testb)
{
DS18B20_DQ_OUT=0;// Write 1
delay_us(2);
DS18B20_DQ_OUT=1;
delay_us(60);
}
else
{
DS18B20_DQ_OUT=0;// Write 0
delay_us(60);
DS18B20_DQ_OUT=1;
delay_us(2);
}
}
}
5 最后
?? 項(xiàng)目分享與指導(dǎo):https://gitee.com/sinonfin/sharing文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-828202.html
到了這里,關(guān)于嵌入式項(xiàng)目分享 單片機(jī)遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng) - 物聯(lián)網(wǎng) stm32的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!