基于STM32的非接触式红外测温系统采用vl53l1X进行测距,使用mlx90614进行测温,二者结合构成了一个简单的测温枪系统,数据使用OLED进行显示,系统设置有阈值,当温度高于阈值的时候,蜂鸣器会进行报警,表示温度过高,同时app可以显示温度、距离,并且集成了按键,可以实现无线修改阈值,由于App采取蓝牙和系统通信,数据时效性较高。
一、硬件设计
1、vl53l1X
VL53L1X,一款由全球领先的光学传感器制造商设计的高精度、长距离飞行时间(TOF)激光测距传感器。该传感器采用创新的SPAD(单光子雪崩二极管)技术,能够实现从30厘米到4米的精确测距,精度高达±3%。VL53L1x在各种光照条件下均表现出色,无论是室内还是室外,白天还是夜晚,都能提供稳定可靠的测量结果。相对于普通的超声波测距,VL53L1X的测量精度更高,测量更为稳定,vl53l1x使用IIC协议,利用IIC协议对vl53l1x进行读写,可以得到最终的距离数据,无需过多处理。
2、mlx90614
MLX90614,一款由Melexis公司精心研发的非接触式红外温度传感器,以其卓越的性能和广泛的工业应用而闻名。这款传感器采用先进的红外探测技术,能够在-70°C至+380°C的范围内进行非接触温度测量,精度高达±2°C。其核心优势在于能够快速、准确地测量目标物体的表面温度,无需物理接触,从而避免了传统接触式测量可能带来的热漂移或污染问题。MLX90614具备出色的响应速度,测量时间仅需0.5秒,适用于动态环境下的温度监控。这款传感器的集成度高,体积小巧,采用TO-92封装,易于集成到各种设备中,如工业自动化系统、医疗设备、智能家居产品等。其工作电压范围宽泛(2.7V至5.5V),功耗低,确保在多种供电条件下稳定运行。MLX90614还具备可配置的数字输出功能,支持PWM和数字温度信号输出,便于与微控制器接口,简化了系统设计和数据处理流程。无论是需要高精度温度测量的工业应用,还是追求小巧设计的消费电子产品,MLX90614都是理想的选择。mlx90614采取IIC通信,利用IIC协议读写mlx90614便可以完成温度的读取前不需要通过和物体接触。
二、软件设计
1、vl53l1X
vl53l1X的驱动程序比较复杂,一般而言,厂家在出厂的时候会提供他的驱动函数,如果自己书写驱动,则比较复杂,如下:
这些函数,如果细究起来是比较复杂的,作为一个应用开发者,我们只需要知道如何使用这些函数即可,如下:
#ifndef __VL53L1_H
#define __VL53L1_H
#include "stm32f10x.h"
#include "laser_def.h"
#include "VL53L1_register_map.h"
#include "VL53L1_api.h"
#include "VL53L1_platform.h"
//#include "VL53L1X_cali.h"
//#include "VL53L1_it.h"
//enable 2.8V IO mode
#define USE_I2C_2V8 1
//VL53L1X default I2C addr is 0x52 after power on
#define VL53L1_Addr0 0x52
#define VL53L1_Addr1 0x54
//detection mode
#define DEFAULT_MODE 0 //default,see manul 5.3.1
#define HIGH_ACCURACY 1
#define LONG_RANGE 2
#define HIGH_SPEED 3
//param struct for vl53l1x mode option, in manual 6.2
typedef __packed struct
{
FixPoint1616_t signalLimit; //Signal,related to reflected amplitude
FixPoint1616_t sigmaLimit; //Sigmal, related to distance mm
// FixPoint1616_t ignoreThres; //ignore threshold
uint32_t timingBudget; //When the ranging mode is set to timed ranging, user has to define the period of time
//between two consecutive measurements.
uint8_t preRangeVcselPeriod ; //VCSEL pulse cycle
uint8_t finalRangeVcselPeriod ;//VCSEL pulse cycle period
}mode_data;
extern mode_data Mode_data[];
extern uint8_t Ajusted[];
extern VL53L1_RangingMeasurementData_t VL53L1_data[];
extern uint16_t Distance_data[];//the detected distance;
extern short Distance;//保存测距数据
VL53L1_Error VL53L1_addr_set(VL53L1_Dev_t *dev, uint8_t newaddr);
VL53L1_Error VL53L1_reset(VL53L1_Dev_t *pDev);
VL53L1_Error VL53L1_init(VL53L1_Dev_t *pDev); //init vl53l1x
void VL53L1_test(void);//vl53l1x test
void VL53L1_info(void);//get vl53l1x ID info
void One_measurement(uint8_t mode);//获取一次测量距离数据
VL53L1_Error VL53L1_set_mode(VL53L1_Dev_t *dev,uint8_t mode);
VL53L1_Error VL53L1_single_test(VL53L1_Dev_t *dev,VL53L1_RangingMeasurementData_t *pdata);
void VL53L1_general_start(VL53L1_Dev_t *dev,uint8_t mode);
void VL53L1_general_test(VL53L1_Dev_t *dev);
#endif
2、mlx90614
mlx90614,相对简单一些,我们只需要知道它的从机地址、RAM存取命令、EEPROM存取命令和目标1温度地址即可,如下: