红外测温模块 :LU90614
下面, 通过发送测量物体温度命令之后,可以看到, 此时测量温度数据就比较正常了。下面看一下,读取温度的数值,总觉的有点奇怪。比如刚才黑色的热缩管, 输出的温度很高。一分钟之后, 获得测试电路板, 制作的非常完美。测温模块通过串口输出测量数据, 设计一个单片机, 通过串口读取测温数据, 使用 OLED 显示温度, 并通过 USB和上位机进行通讯。下面, 按照模块的通讯协议读取温度值。利用数
红外温度传感器
AD\Test\2024\April\TestLU90614.PcbDoc
D:\zhuoqing\window\ARM\Keil\STM32\Test\2024\April\TestUL90164F103\Core\Src\main.c
01 红外测温
看到一个红外测温模块, 型号为 LU90614 。 可以非接触测量 100摄氏度范围内物体温度。 网络购买的模块刚刚到货了。 下面对于它的性能进行测试一下。
一、模块特性
在测温模块正面有测温传感器以及处理芯片。 在上面有两个小芯片。 其中一个显示未 HK 02C2, 对应型号为 HK24C02, 这是一颗 2k bit 的 EEPROM。 另外一个丝印文字为 HT33 , 是一颗 3.3V 的稳压芯片。 对于 TSOP48封装的芯片, 表面没有任何丝印文字信息。 不知道是什么 芯片。 主要的测温组件, 是一个空心金属圆柱体。 对于它的原理, 现在我还不是太清楚。
▲ 图1.1.1 LU90614接口定义
二、测试电路
测温模块通过串口输出测量数据, 设计一个单片机, 通过串口读取测温数据, 使用 OLED 显示温度, 并通过 USB和上位机进行通讯。 设计单面PCB, 适合一分钟制版。
▲ 图1.2.1 测试电路原理图
AD\Test\2024\April\TestLU90614.SchDoc
▲ 图1.2.2 测试电路PCB
一分钟之后, 获得测试电路板, 制作的非常完美。 下面使用上午刚刚到货的镀锡液, 给电路板镀锡。 一分钟之后取出电路板, 可以看到它的表面已经均匀镀上一层锡。 线路表面呈现均匀的银色。 下面焊接电路。
三、焊接调试
焊接电路板, 对其进行清洗。 使用了超声震动器辅助芯片对正。 电路板上包括七个飞线, 利用 0 欧姆进行飞线。
通过探针夹子连接ST-LINK。 下载测试软件, 可以看到单片机已经可以正常运行了。 接下来编写传感器读取程序。
移植 OLED 程序, 用于显示测量温度数值。 将测温模块插在电路板上。 它通过 UART2 与 F103单片机相连。 下面, 按照模块的通讯协议读取温度值。
四、读取温度
在 OLED 上显示测量的结果。 令人感到奇怪的是 , 显示的数据不太稳定。 利用数据的校验位, 将错误的数据丢掉之后, 可以看到数据就比较稳定了。
▲ 图1.4.1 读取的温度
下面看一下, 读取温度的数值, 总觉的有点奇怪。 比如刚才黑色的热缩管, 输出的温度很高。 而使用手指, 则立即恢复到 36摄氏度。 那么这个传感器究竟应该读取什么样的物体表面呢? 这应该是传感器读取体温和物体温度功能不一样。
下面, 通过发送测量物体温度命令之后, 可以看到, 此时测量温度数据就比较正常了。 可以传感器在测量体温和物体温度的功能是不一样。 使用热风枪加热热缩管, 测量温度达到了 90 多度。 现在环境温度为 27.3 度。 和热电偶温度计读取的数值基本相同。 这儿也验证了该传感器的数值是在合理的范围之内。 手拿着温度传感器测量 LED 灯罩的温度。 可以达到 48 摄氏度。
※ 总 结 ※
本文测试了红外温度传感器。 通过串口可以读取测量的数值。 测量得到的数值在室温下比较合理。
通讯协议
//--------------------------------------------------------------------------
if(USBCDC_CANRECE) {
unsigned char ucChar;
USBCDCReceChar(&ucChar);
printf("%02x ", ucChar);
if(ucChar == 0x55) {
nUSBFlag = 1;
}
else if(ucChar == 0x0) {
g_nTempFlag = 0;
SetBodyTemp();
nUSBFlag = 1;
} else if(ucChar == 0x1) {
g_nTempFlag = 1;
SetObjectTemp();
nUSBFlag = 1;
}
}
//--------------------------------------------------------------------------
if(++nShowCount > 20) {
nShowCount = 0;
nMeasure ++;
char szString[32];
int i, nNumber;
nNumber = nMeasure % 0xf;
for(i = 0; i < 16; i ++) {
if(i <= nNumber) szString[i] = '*';
else szString[i] = ' ';
}
szString[16] = 0;
LCD_Print(0, 2, szString);
float fTemp = ReadTemp();
if(fTemp == 0) {
fTemp = ReadTemp();
if(fTemp == 0) fTemp = ReadTemp();
}
nNumber = (int)(fTemp * 100);
if(g_nTempFlag == 0) {
sprintf(szString, "Body :%6.2f", fTemp);
} else sprintf(szString, "Object:%6.2f", fTemp);
LCD_Print(0, 4, szString);
if(nUSBFlag != 0 ) {
int i;
unsigned char ucDim[4];
for(i = 0; i < 4; i ++) {
ucDim[3 - i] = (unsigned char)(nNumber & 0xff);
nNumber >>= 8;
}
ucDim[0] = (unsigned char) g_nTempFlag;
for(i = 0; i < 4; i ++) {
printf("%02x ", ucDim[i]);
USBCDCSendChar(ucDim[i]);
}
nUSBFlag = 0;
}
}
//--------------------------------------------------------------------------
if(VAL(BTN_PIN) == 0) {
WaitTime(25);
if(VAL(BTN_PIN) == 0) {
for(;;) {
if(VAL(BTN_PIN) != 0) break;
}
WaitTime(25);
if(g_nTempFlag == 0) {
g_nTempFlag = 1;
SetObjectTemp();
} else {
g_nTempFlag = 0;
SetBodyTemp();
}
}
}
■ 相关文献链接:
● 相关图表链接:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)