从GY-906到智能测温枪:用STM32F103C8T6和MLX90614做一个低成本非接触测温项目(附完整源码)

张开发
2026/4/20 13:27:49 15 分钟阅读

分享文章

从GY-906到智能测温枪:用STM32F103C8T6和MLX90614做一个低成本非接触测温项目(附完整源码)
基于STM32F103C8T6与MLX90614的智能测温枪全流程开发指南在公共卫生需求与技术平民化的双重推动下非接触式测温设备正从专业医疗领域走向日常生活。本文将完整呈现如何以STM32F103C8T6为主控搭配MLX90614红外传感器打造具备OLED显示、声光报警功能的智能测温枪。不同于简单的模块驱动教程我们将从元器件选型、PCB设计、3D打印外壳到软件算法优化全景式解析产品化开发全流程。1. 硬件系统架构设计1.1 核心元器件选型对比组件类型候选型号关键参数本方案选择理由主控MCUSTM32F103C8T672MHz Cortex-M3, 64KB Flash性价比高生态完善GD32F103C8T6108MHz Cortex-M3, 64KB Flash缺货风险红外传感器MLX90614ESF-BAA±0.5℃精度90°视场角工业级精度AMG88338x8像素阵列±2.5℃精度适合热成像显示模块SSD1306 0.96 OLED128x64分辨率I2C接口低功耗高对比度LCD160216x2字符5V供电可视角度小传感器安装要点使用3D打印支架固定MLX90614确保测量光路无遮挡传感器与外壳开口保持5-8mm距离避免热传导影响推荐在光路中添加聚光透镜如25mm焦距非球面透镜1.2 电路设计关键点// 典型电源电路设计 #define POWER_CIRCUIT \ 3.7V锂电 - TP4056充电IC - \ LC滤波网络 - \ AMS1117-3.3V LDO - \ 10μF0.1μF去耦电容硬件设计需特别注意I2C总线保护在SCL/SDA线上串联100Ω电阻并添加2.2nF滤波电容蜂鸣器驱动采用S8050三极管驱动基极串联1kΩ电阻按键消抖硬件RC滤波10kΩ0.1μF配合软件消抖算法提示MLX90614的VDD引脚建议增加1μF钽电容可显著降低电源噪声导致的测温波动2. 嵌入式软件实现2.1 HAL库驱动开发创建多文件工程结构├── Drivers/ │ ├── MLX90614/ │ │ ├── mlx90614.c # 传感器底层驱动 │ │ └── mlx90614.h │ └── SSD1306/ # OLED显示驱动 ├── Middlewares/ │ └── Button/ # 按键状态机 └── Core/ └── Src/ └── main.c # 应用逻辑关键驱动代码优化// 改进的温度读取函数带CRC校验 float MLX90614_ReadObjectTemp(void) { uint8_t data[3]; HAL_I2C_Mem_Read(hi2c1, MLX90614_ADDR1, RAM_TOBJ1, I2C_MEMADD_SIZE_8BIT, data, 3, 100); // PEC校验 uint8_t crc PEC_Calculation(data, 2); if(crc ! data[2]) { return NAN; // 校验失败返回非数字 } uint16_t tempRaw (data[1] 8) | data[0]; return (tempRaw * 0.02) - 273.15; }2.2 用户界面设计实现分级菜单系统主界面实时温度显示电池图标设置菜单温度报警阈值32.0-42.0℃可调单位切换℃/℉设备校准模式# 伪代码菜单状态机示例 class MenuState: HOME 0 SETTINGS 1 CALIBRATION 2 current_state MenuState.HOME def handle_button(btn): if btn OK: if current_state HOME: enter_settings() elif current_state SETTINGS: save_settings() elif btn BACK: return_to_previous_state()3. 机械结构与工业设计3.1 3D打印外壳设计要点推荐使用PETG材料打印关键设计参数握持部位厚度≥2mm传感器腔体与外部留1mm空气隔热层按键开孔预留0.2mm装配间隙电池仓设计带卡扣的可拆卸后盖人体工学数据握把直径30-35mm扳机式按键倾斜15°重心位置靠近握把中部3.2 装配工艺流程电路板固定使用M2铜柱尼龙垫片传感器安装导热胶局部点粘OLED屏幕双面泡棉胶结构卡槽最终测试各按键手感测试测温距离校准5cm处对准黑体炉连续工作4小时温漂检测4. 产品化进阶优化4.1 温度补偿算法建立误差补偿模型实际温度 传感器读数 ΔT(环境) ΔT(供电) ΔT(角度)具体实现// 环境温度补偿示例 float compensated_temp raw_temp; if(env_temp 10.0f) { compensated_temp 0.3f; } else if(env_temp 30.0f) { compensated_temp - 0.2f; }4.2 低功耗策略模式电流消耗唤醒方式适用场景运行模式12mA-持续测量待机模式1.5mA按键触发间歇使用睡眠模式50μA定时器/外部中断运输存储实现代码片段void enter_sleep_mode(void) { HAL_GPIO_WritePin(OLED_PWR_GPIO_Port, OLED_PWR_Pin, GPIO_PIN_RESET); HAL_I2C_DeInit(hi2c1); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); SystemClock_Config(); // 唤醒后需重新初始化时钟 }在完成基础功能后可进一步考虑通过BLE模块实现数据无线传输增加温度数据存储功能使用SPI Flash开发PC端校准工具基于Qt或PyQt

更多文章