MLX90614非接触式温度测量设备,广泛应用于公共场所的额头体温快速检测。你是否曾经在地铁入口、学校门口体验过被“枪”指着前额,迅速显示温度的情景?那支神秘的“测温枪”,背后或许隐藏着一颗低调但功能强大的芯片——MLX90614。
这颗芯片并非难以接近的军事科技,而是一款将复杂的红外物理和信号处理技术封装成“即插即用”模块的工业杰作。尤其是在疫情后,公共场所对无感知测温的需求激增:既要快速(不能让人等待5分钟),又要准确(避免误报或漏报),还需安全(防止交叉感染)。传统的水银温度计太慢,接触式电子设备又需要贴合皮肤……此时,非接触红外测温成为最佳选择。
在这一技术领域中,Melexis的MLX90614几乎成为了行业标准。为什么?因为它真正实现了“三好”:测量准确、连接快速、使用方便。
它是如何检测你的体温的呢?别误会,这并不是摄像头。MLX90614通过感知热量工作——所有温度高于绝对零度(-273.15°C)的物体都会向外发射红外辐射,温度越高,辐射越强。这一原理基于经典物理定律:斯特藩-玻尔兹曼定律。
简而言之:物体辐射的能量与温度的四次方成正比。MLX90614专门捕捉这种远红外能量(波长集中在8–14μm,正是人体辐射的主要范围)的专业设备。其核心是一颗微型热电堆传感器,能够将极其微弱的红外信号转换为电压变化。
整个过程如下图所示:
[额头发出红外光]
↓
[TO-39金属封装上的透镜聚焦光线]
↓
[热电堆 → 微伏级电压]
↓
[低噪声放大器放大信号]
↓
[17位高精度ADC数字化]
↓
[DSP芯片结合环境温度 + 出厂校准数据]
↓
[输出最终温度值]
最厉害的是最后一步——芯片上的嵌入式DSP已经完成了复杂的辐射计算、非线性补偿和发射率修正。你只需通过I2C发送指令,它就会提供干净的温度数据,并已将开尔文转换为摄氏度(尽管还需要减去273.15)。
为什么工程师见到它会笑?我们来看看这块芯片到底有多“贴心”。
| 参数 | 表现 |
| 通信接口 | 标准I2C/SMBus,默认地址,Arduino一接就能读取数据 |
| 供电电压 | 支持3.3V和5V,兼容性好 |
| 封装形式 | TO-39金属罐+光学滤光片,抗干扰性能强 |
| 测温速度 | <500ms,眨眼间完成一次测量 |
| 精度表现 | 在35–42°C区间内可达±0.5°C,满足初步筛查要求 |
| 分辨率 | 最高0.02°C,足以显示细微变化 |
| 是否需要标定 | 不需要!所有参数出厂时已写入OTP EEPROM |
0x5A
这意味着你无需自行设计光学系统、调整ADC增益或在实验室进行黑体校准……这些都由Melexis提前完成。
与传统方案相比:
- 普通NTC热敏电阻?需要贴合皮肤,测量的是接触温度,容易受风速影响。
- 自行搭建红外模块?需外接运放、ADC和MCU编程算法,调试复杂。
- 其他红外传感器?很多没有DSP,数据未经处理,误差可能达到±1°C。
而MLX90614提供了一种“温度即服务”的体验。
将它与Arduino结合,在5分钟内即可获得结果。以下是在Arduino上读取MLX90614的典型代码实现,你会发现操作非常简单:
#include <Wire.h>
#define MLX90614_I2C_ADDR 0x5A
#define MLX90614_TOBJ1 0x07 // 物体温度寄存器
float readTemperature(uint8_t reg) {
uint16_t val;
float temp;
Wire.beginTransmission(MLX90614_I2C_ADDR);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(MLX90614_I2C_ADDR, (uint8_t)3);
val = Wire.read(); // LSB
val |= Wire.read() << 8; // MSB
temp = (val * 0.02) - 273.15; // 转为摄氏度
return temp;
}
void setup() {
Serial.begin(9600);
Wire.begin();
Serial.println("MLX90614 启动...");
}
void loop() {
float objTemp = readTemperature(MLX90614_TOBJ1);
float ambTemp = readTemperature(0x06); // 环境温度
Serial.print("额头温度: ");
Serial.print(objTemp, 2);
Serial.print(" °C | 环境温度: ");
Serial.print(ambTemp, 2);
Serial.println(" °C");
delay(500);
}
只需几行代码,你就能获取实时温度流。这是否有点像“Hello World”级别的简易?
小提示:
- 数据以Kelvin×0.02的形式存储,因此乘以0.02再减去273.15才是摄氏度;
- 字节顺序是LSB在前,注意拼接方式;
- 实际使用中建议增加滑动平均滤波器,避免数据跳变。
例如,以下小函数可以让读数更加稳定:
float movingAverage(float newSample) {
static float buf[5] = {0};
static int idx = 0;
float sum = 0;
buf[idx++] = newSample;
if (idx >= 5) idx = 0;
for (int i = 0; i < 5; i++) sum += buf[i];
return sum / 5;
}
如何构建一个可靠的额温筛查系统?想象你要在公司门口安装一套智能测温仪,该如何设计这套系统?
系统架构一览:
[MLX90614] —— I?C ——→ [MCU] ——→ [OLED 显示屏]
↓
[蜂鸣器 + LED 报警]
↓
[ESP32 WiFi 上报云端]
↓
[电池 + LDO 稳压供电]
组件分工明确:
- MLX90614:负责精确采集红外能量;
- MCU(如STM32或ESP32):管理整体逻辑;
- 显示屏:显示温度和状态;
- 声光报警器:超过37.3°C时亮红灯并发出警报;
- 无线上传(可选):记录时间戳,对接后台管理系统;
- 电源管理模块:使用两节AA电池即可长时间运行,毕竟MLX90614的功耗仅为约1.5mA。
整个流程在一秒内完成:人靠近 → 自动触发 → 测温 → 判断 → 显示/报警 → 记录。真正实现了“即走即测”,完全不影响通行效率。
实战中常见的问题及解决策略:
- 距离和角度很关键:推荐测量距离为3–5cm,必须正对额头中心(眉心上方),倾斜照射会导致温度偏低。可以增加激光点或导向环辅助定位(但不要直接用激光照射眼睛)。
- 环境温度突变怎么办?刚从寒冷室外进入温暖室内的人,额头表面温度可能偏低。此时仅依赖物体温度可能会误判。
解决方法:
- 利用MLX90614自带的环境温度传感器(TA);
- 设备提前预热5–10分钟;
- 使用动态补偿算法,例如:
c
correctedTemp = objTemp + (37 - ambTemp) * 0.02; // 经验系数调整
发射率需要调整吗?人体皮肤的发射率大约为 0.98,非常接近黑体。MLX90614 出厂时就是按照这个值进行校准的。
???? 结论:除非你用它来测量金属、玻璃等反光材料,否则千万不要调整发射率寄存器!
4. 电源噪声干扰
热电堆输出的是微伏级别的信号,非常敏感。如果你使用了开关电源或共地不当,很容易引入干扰。
? 建议:
- 使用 LDO 提供纯净的 3.3V
- VDD 引脚旁加 10μF + 0.1μF 陶瓷电容
- PCB 布局时远离高频线路
5. 固件还能升级吗?
当然可以!特别是搭配 ESP32 这种带 Wi-Fi 的主控,支持 OTA 远程更新:
- 修改报警阈值
- 切换单位(°C / °F)
- 添加多语言界面
- 调整滤波强度
这才是真正的“智能设备”应有的样子 ????。
???? 它到底能不能当“医用级”使用?
严格来说,MLX90614 属于 临床初筛级别,不是诊断级设备。但它在 35–42°C 范围内的 ±0.5°C 精度,已经足够胜任大多数场景下的“异常体温预警”。
举个例子:
- 学校晨检:发现 37.8°C 的孩子,提醒家长带去医院复查;
- 办公楼入口:自动拦截发热员工,防止聚集传播;
- 商场/影院:配合健康码系统,实现无感通行。
只要不是用于医学诊断,这套系统的性价比和可靠性都非常高。
而且随着物联网的发展,这类设备正在进化成“健康哨兵”:
- 加个心率传感器 → 多参数监测
- 接入云平台 → 自动生成体温趋势图
- 结合人脸识别 → 实名追踪异常人员
未来的智慧园区、智能楼宇,少不了这样的边缘感知节点。
???? 最后一句话总结
MLX90614 并不是什么颠覆性的发明,但它完美诠释了什么叫“把复杂留给自己,把简单交给用户”。
从红外物理到数字输出,从出厂校准到抗干扰设计,它将一整套测温链条封装进了那个小小的金属罐里。
对于开发者来说,这意味着更快的产品迭代;
对于管理者来说,意味着更低的部署成本;
对于普通人来说,意味着更安全、更顺畅的公共生活。
也许有一天我们会忘记它的型号,但一定会记得:曾经有那么一支“枪”,默默守护着我们的每一次出入。?????