概述
STHS34PF80傳感器項(xiàng)目種修改 Arduino 腳本,重新移植到STM32的MCU中。
該項(xiàng)目基于STHS34PF80 IR溫度傳感器,能夠檢測(cè)環(huán)境和物體溫度,并且在最大4米范圍內(nèi)檢測(cè)存在和運(yùn)動(dòng)。有一個(gè)Arduino腳本,顯示如何為基本環(huán)境和物體溫度測(cè)量配置傳感器,并如何配置嵌入式功能算法,并使用它們檢測(cè)存在和運(yùn)動(dòng)。腳本允許連續(xù)或一次性模式,允許更改低通濾波器和檢測(cè)閾值以實(shí)現(xiàn)各種檢測(cè)行為。腳本利用內(nèi)嵌的中斷引擎來(lái)檢測(cè)溫度數(shù)據(jù)的就緒狀態(tài),以及通知存在和運(yùn)動(dòng)事件。
本節(jié)將在上節(jié)代碼中繼續(xù)配置,通過(guò)獲取模塊的狀態(tài)標(biāo)志位來(lái)檢測(cè)是否有人體存在。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請(qǐng):6_15061293 。
視頻教學(xué)
[https://www.bilibili.com/video/BV1dp4y1P7g9/]
樣品申請(qǐng)
[https://www.wjx.top/vm/OhcKxJk.aspx#](
參考Demo
[hthttps://github.com/kriswiner/STHS34PF80/tree/main](
完整代碼下載
[https://download.csdn.net/download/qq_24312945/88257572](
參考程序獲取數(shù)據(jù)
獲取數(shù)據(jù)標(biāo)志位
使用狀態(tài)寄存器(STATUS,地址為23h)來(lái)檢查何時(shí)有新的數(shù)據(jù)集可用。這里的數(shù)據(jù)集可能包括多種數(shù)據(jù)輸出:物體溫度、環(huán)境溫度,以及可能的其他幾個(gè)由嵌入式智能算法生成的輸出(如存在檢測(cè)、動(dòng)作檢測(cè)和環(huán)境溫度沖擊檢測(cè))。
參考文檔設(shè)置如下所示。
修改如下。
/**
* @brief 獲取DRDY
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
uint8_t STHS34PF80_getDataReadyStatus(uint8_t add)
{
uint8_t temp = 0;//STHS34PF80_STATUS- >0x23
sths34pf80_read_reg(add, STHS34PF80_STATUS, (uint8_t *)&temp, 1);
return temp;
}
使用數(shù)據(jù)準(zhǔn)備就緒信號(hào)
FUNC_STATUS 寄存器(地址為25h)是一個(gè)只讀寄存器,它包含了設(shè)備的嵌入式智能算法的狀態(tài)標(biāo)志。
PRES_FLAG: 這是一個(gè)存在檢測(cè)標(biāo)志。當(dāng)檢測(cè)到存在時(shí),此位變?yōu)?;當(dāng)沒(méi)有檢測(cè)到存在時(shí),此位變回0。默認(rèn)值為0。
(0: 沒(méi)有檢測(cè)到存在;1: 檢測(cè)到存在)
MOT_FLAG: 這是一個(gè)運(yùn)動(dòng)檢測(cè)標(biāo)志。當(dāng)檢測(cè)到運(yùn)動(dòng)時(shí),此位變?yōu)?;當(dāng)沒(méi)有檢測(cè)到運(yùn)動(dòng)時(shí),此位變回0。默認(rèn)值為0。
(0: 沒(méi)有檢測(cè)到運(yùn)動(dòng);1: 檢測(cè)到運(yùn)動(dòng))
TAMB_SHOCK_FLAG: 這是一個(gè)環(huán)境溫度沖擊檢測(cè)標(biāo)志。當(dāng)檢測(cè)到環(huán)境溫度沖擊時(shí),此位變?yōu)?;當(dāng)沒(méi)有檢測(cè)到環(huán)境溫度沖擊時(shí),此位變回0。默認(rèn)值為0。
(0: 沒(méi)有檢測(cè)到環(huán)境溫度沖擊;1: 檢測(cè)到環(huán)境溫度沖擊)
參考文檔設(shè)置如下所示。
獲取代碼如下所示。
/**
* @brief 清零DRDY
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
uint8_t STHS34PF80_getFuncStatus(uint8_t add)
{
uint8_t temp = 0;//STHS34PF80_FUNC_STATUS- >0x25
sths34pf80_read_reg(add, STHS34PF80_FUNC_STATUS, (uint8_t *)&temp, 1);
return temp;
}
嵌入式智能數(shù)字算法的輸出數(shù)據(jù)
在4.5.4節(jié)中,描述了嵌入式智能數(shù)字算法的輸出數(shù)據(jù)。這些數(shù)據(jù)包括存在檢測(cè)、運(yùn)動(dòng)檢測(cè)和環(huán)境沖擊檢測(cè)的輸出數(shù)據(jù),分別發(fā)送到TPRESENCE_H (3Bh) 和 TPRESENCE_L (3Ah) 寄存器,TMOTION_H (3Dh) 和 TMOTION_L (3Ch) 寄存器,以及 TAMB_SHOCK_H (3Fh) 和 TAMB_SHOCK_L (3Eh) 寄存器。
這些數(shù)據(jù)沒(méi)有內(nèi)在的物理意義,只是嵌入式智能數(shù)字算法用來(lái)斷言相應(yīng)的標(biāo)志。
獲取代碼如下所示。
/**
* @brief 嵌入式智能數(shù)字算法產(chǎn)生的存在檢測(cè)輸出數(shù)據(jù)
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readPresence(uint8_t add)
{
uint8_t rawData[2]; //STHS34PF80_TPRESENCE_L- >0x3A
sths34pf80_read_reg(add, STHS34PF80_TPRESENCE_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
/**
* @brief 嵌入式智能數(shù)字算法產(chǎn)生的運(yùn)動(dòng)檢測(cè)輸出數(shù)據(jù)
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readMotion(uint8_t add)
{
uint8_t rawData[2]; //STHS34PF80_TMOTION_L- >0x3C
sths34pf80_read_reg(add, STHS34PF80_TMOTION_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
/**
* @brief 嵌入式智能數(shù)字算法產(chǎn)生的環(huán)境沖擊輸出數(shù)據(jù)
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readAmbShock(uint8_t add)
{
uint8_t rawData[2]; //STHS34PF80_TAMB_SHOCK_L- >0x3E
sths34pf80_read_reg(add, STHS34PF80_TAMB_SHOCK_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
4.5.3節(jié)中提供了一個(gè)簡(jiǎn)單的例子,展示了如何從傳感器獲取物體溫度數(shù)據(jù)(以最低有效位LSB表示)并將其轉(zhuǎn)換為攝氏度°C。
該例子的過(guò)程也適用于獲取環(huán)境溫度數(shù)據(jù)。
代碼如下所示。
/**
* @brief
*
* @param add 視場(chǎng)內(nèi)對(duì)象發(fā)出的紅外輻射量(未補(bǔ)償)
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readObjTemp(uint8_t add)
{
uint8_t rawData[2]; //STHS34PF80_TOBJECT_L- >0x26
sths34pf80_read_reg(add, STHS34PF80_TOBJECT_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
4.5.2節(jié)描述了如何獲取環(huán)境溫度數(shù)據(jù),并在哪些寄存器中這些數(shù)據(jù)可以被找到。
寄存器存儲(chǔ):環(huán)境溫度數(shù)據(jù)被發(fā)送到TAMBIENT_H(29h)和TAMBIENT_L(28h)寄存器中。其中,TAMBIENT_H存儲(chǔ)了環(huán)境溫度值的最高有效字節(jié)(MSB),而TAMBIENT_L存儲(chǔ)了最低有效字節(jié)(LSB)。
數(shù)據(jù)格式:通過(guò)拼接TAMBIENT_H和TAMBIENT_L,可以得到完整的環(huán)境溫度輸出數(shù)據(jù)。這個(gè)值被表示為一個(gè)16位的有符號(hào)二進(jìn)制補(bǔ)碼數(shù)字。
單位轉(zhuǎn)換:每個(gè)環(huán)境溫度輸出樣本可以通過(guò)一個(gè)靈敏度值(在這個(gè)例子里是100 LSB/°C)來(lái)轉(zhuǎn)換成攝氏度。公式如下:
應(yīng)用場(chǎng)景:環(huán)境溫度數(shù)據(jù)代表了與設(shè)備熱耦合的環(huán)境的實(shí)際溫度。這些數(shù)據(jù)可用于校正由于與傳感器熱耦合的環(huán)境溫度變化而導(dǎo)致的物體溫度輸出數(shù)據(jù)的變化(詳見(jiàn)4.6節(jié))。
代碼如下所示。
/**
* @brief
*
* @param add 環(huán)境溫度數(shù)據(jù)
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readAmbTemp(uint8_t add)
{
uint8_t rawData[2];//STHS34PF80_TAMBIENT_L- >0x28
sths34pf80_read_reg(add, STHS34PF80_TAMBIENT_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
補(bǔ)償后的物體溫度數(shù)據(jù)存儲(chǔ)在TOBJ_COMP_L(38h)和TOBJ_COMP_H(39h)寄存器中。其中,TOBJ_COMP_H包含最高有效字節(jié)(MSB),TOBJ_COMP_L包含最低有效字節(jié)(LSB)。
需要注意的是,即使補(bǔ)償算法處于活動(dòng)狀態(tài),26h和27h寄存器中仍然包含原始物體溫度數(shù)據(jù)。如果補(bǔ)償沒(méi)有激活,38h和39h寄存器會(huì)與26h和27h寄存器對(duì)齊。
補(bǔ)償后的物體溫度數(shù)據(jù)(以LSB為單位)與使用的光學(xué)系統(tǒng)的透射率成比例。您可以通過(guò)實(shí)際的靈敏度值來(lái)轉(zhuǎn)換這些補(bǔ)償后的數(shù)據(jù),以獲得相應(yīng)的攝氏度值。不過(guò),這些補(bǔ)償后的數(shù)據(jù)并不實(shí)際代表視場(chǎng)內(nèi)物體的溫度。
如果啟用了增益減小功能(見(jiàn)第4.7節(jié)),則不能啟用嵌入式補(bǔ)償算法。
代碼如下所示。
/**
* @brief 嵌入式智能數(shù)字算法產(chǎn)生的視場(chǎng)內(nèi)物體發(fā)射的紅外輻射量輸出數(shù)據(jù)(已經(jīng)經(jīng)過(guò)環(huán)境溫度補(bǔ)償)
*
* @param add 設(shè)備地址
* @param val 設(shè)備ID.
* @retval ret 正常返回HAL_OK
*
*/
int16_t STHS34PF80_readCompObjTemp(uint8_t add)
{
uint8_t rawData[2];//STHS34PF80_TOBJ_COMP_L- >0x38
sths34pf80_read_reg(add, STHS34PF80_TOBJ_COMP_L, (uint8_t *)&rawData[0], 2);
return (int16_t)(((int16_t)rawData[1]) < < 8 | rawData[0]);
}
主程序
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// printf("PA7=%d",HAL_GPIO_ReadPin ( GPIOA, GPIO_PIN_7));
// if(HAL_GPIO_ReadPin ( GPIOA, GPIO_PIN_7))
// {
status = STHS34PF80_getDataReadyStatus(STHS34PF80_ADDRESS);
if(FUNCTIONS)
{
funcstatus = STHS34PF80_getFuncStatus(STHS34PF80_ADDRESS);
if(funcstatus & 0x04) printf("(存在)Presence detected !n");
if(funcstatus & 0x02) printf("(運(yùn)動(dòng))Motion detected !n");
if(funcstatus & 0x01) printf("(環(huán)境溫度沖擊)T Shock detected !n");
}
if(status & 0x04) // when data ready
{
Presence = STHS34PF80_readPresence(STHS34PF80_ADDRESS);//嵌入式智能數(shù)字算法產(chǎn)生的存在檢測(cè)輸出數(shù)據(jù)
Motion = STHS34PF80_readMotion(STHS34PF80_ADDRESS); // 嵌入式智能數(shù)字算法產(chǎn)生的運(yùn)動(dòng)檢測(cè)輸出數(shù)據(jù)
AmbTemp = STHS34PF80_readAmbTemp(STHS34PF80_ADDRESS);//環(huán)境溫度數(shù)據(jù)
ObjTemp = STHS34PF80_readObjTemp(STHS34PF80_ADDRESS);//視場(chǎng)內(nèi)對(duì)象發(fā)出的紅外輻射量(未補(bǔ)償)
CompObjTemp = STHS34PF80_readCompObjTemp(STHS34PF80_ADDRESS);//嵌入式智能數(shù)字算法產(chǎn)生的視場(chǎng)內(nèi)物體發(fā)射的紅外輻射量輸出數(shù)據(jù)(已經(jīng)經(jīng)過(guò)環(huán)境溫度補(bǔ)償)
AmbShock = STHS34PF80_readAmbShock(STHS34PF80_ADDRESS);//嵌入式智能數(shù)字算法產(chǎn)生的環(huán)境沖擊輸出數(shù)據(jù)
printf("(原始數(shù)據(jù))Raw countsn");
printf("(視場(chǎng)內(nèi)對(duì)象發(fā)出的紅外輻射量(未補(bǔ)償))STHS34PF80 ObjTemp = %dn",ObjTemp);
printf("(視場(chǎng)內(nèi)物體發(fā)射的紅外輻射量輸出(經(jīng)過(guò)環(huán)境溫度補(bǔ)償))STHS34PF80 Compensated ObjTemp = %dn",CompObjTemp);
printf("(環(huán)境溫度)STHS34PF80 AmbTemp = %dn",AmbTemp);
printf("(存在檢測(cè))STHS34PF80 Presence = %dn",Presence);
printf("(運(yùn)動(dòng)檢測(cè)輸出)STHS34PF80 Motion = %dn",Motion);
printf("(環(huán)境沖擊輸出)STHS34PF80 AmbShock = %dn",AmbShock);
printf("(環(huán)境溫度)STHS34PF80 Ambient Temperature = %.2fn",(float)(AmbTemp) / 100.0f); //環(huán)境溫度數(shù)據(jù)
printf("(對(duì)象溫度)STHS34PF80 Object Temperature = %.2fn",((float)(ObjTemp) / (float)(ObjSense) ) );
}
// }
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
-
模塊
+關(guān)注
關(guān)注
7文章
2736瀏覽量
47797 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7170瀏覽量
89711 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
284瀏覽量
15052
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(1)----獲取ID
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(1)----<b class='flag-5'>獲取</b>ID](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(2)----驅(qū)動(dòng)STHS34PF80進(jìn)行人體檢測(cè)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(2)----<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>STHS34PF80</b>進(jìn)行人體檢測(cè)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(3)----修改檢測(cè)閾值
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(3)----修改檢測(cè)閾值](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(4)----中斷獲取信號(hào)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(4)----中斷<b class='flag-5'>獲取</b>信號(hào)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(5)----配置嵌入式函數(shù)
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(5)----配置嵌入式函數(shù)](https://file1.elecfans.com/web2/M00/B3/F7/wKgZomVpitKAOpCFAAHJXcyTZPo348.png)
STHS34PF80高靈敏度紅外感應(yīng)器(2)----InfraredPD存在感應(yīng)檢測(cè)
![<b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(2)----InfraredPD存在感應(yīng)檢測(cè)](https://file1.elecfans.com/web2/M00/09/67/wKgZomcMgqyAQasOAAg3RW0akGo723.png)
通過(guò)STEVAL-MKI109V3在unico上識(shí)別不到STHS34PF80是為什么?怎么處理?
STM32CubeMX 窗口及工具介紹
![<b class='flag-5'>STM32CubeMX</b> 窗口及工具介紹](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用stm32cubemx的usb-host-cdc庫(kù)驅(qū)動(dòng)EC20模塊
![使用<b class='flag-5'>stm32cubemx</b>的usb-host-cdc庫(kù)<b class='flag-5'>驅(qū)動(dòng)</b>EC20<b class='flag-5'>模塊</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
意法半導(dǎo)發(fā)布了新型人體存在和移動(dòng)檢測(cè)芯片:STHS34PF80
ST TMOS熱敏紅外傳感器: 精準(zhǔn)檢測(cè)人員存在和移動(dòng)
STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)
![<b class='flag-5'>STHS34PF80</b>人體存在傳感器(1)----<b class='flag-5'>獲取</b>人體存在<b class='flag-5'>狀態(tài)</b>](https://file1.elecfans.com/web2/M00/BC/9E/wKgaomWc-seAG2mSAAXTNaJZ804747.png)
基于ST 紅外傳感器STHS34PF80 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案
![基于ST 紅外傳感器<b class='flag-5'>STHS34PF80</b> 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案](https://file1.elecfans.com/web2/M00/BF/D8/wKgaomW4lEOAMW3eAACv-pfXAFA539.png)
STHS34PF80高靈敏度紅外感應(yīng)器(1)----獲取人體存在狀態(tài)
![<b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(1)----<b class='flag-5'>獲取</b>人體存在<b class='flag-5'>狀態(tài)</b>](https://file1.elecfans.com/web2/M00/BC/9E/wKgaomWc-seAG2mSAAXTNaJZ804747.png)
評(píng)論