2026贸泽电子M-Design创意设计大赛参赛报告
2026 M-Design设计竞赛 - 基于CoreMP135与MLX90642实现红外矩阵火源监测预警系统
封面
大赛名称:2026贸泽电子M-Design创意设计大赛第二季
完成任务一:智能家居 ——
- 家庭安全与异常行为智能监测
作品名称:红外矩阵火源智能监测推送系统
参赛人员:Nyquest-unstable
提交日期:2026年5月
一、项目摘要
本系统以CoreMP135为主控核心,搭配MLX90642红外面阵测温传感器,完成全场温度矩阵数据周期性采样分析。系统设定100℃为预警阈值,检测到区域温度超出阈值时,直接驱动车载喇叭本地发声警报,同时自动采集热成像画面,通过网络调用企业微信Webhook接口,推送告警图文消息。系统精简硬件结构,省去指示灯电路,专注实现红外温度采样、本地喇叭报警、远程图片推送核心功能,适配机房、配电房、仓库等防火巡检场景。
二、项目背景与设计意义
传统消防探测设备响应滞后,单点测温无法判断热源范围。本方案采用32×24红外矩阵全域测温,精准捕捉高温火源,以100℃作为预警临界点,超标即刻喇叭鸣笛警示,同步上传热成像图片至企业微信,管理人员远程快速查看现场状态,实现无人值守自动安防预警,结构简单、稳定性强,具备极高实用价值。
三、总体方案设计
1.设计思路
CoreMP135通过I2C总线驱动MLX90642,持续采集红外矩阵温度数据,完成数据解析与运算比对;当测温数值高于100℃,立即触发喇叭发声报警,同步截取热成像图像,按照Webhook通信协议打包数据,联网推送至企业微信会话,完成本地告警加远程通知一体化功能。
2.系统框架

3.工作流程

四、硬件电路设计
1.主控芯片
CoreMP135
工业级高性能主控,内置完整通信外设,运算性能充足,可高效处理红外矩阵海量采样数据,支持网络协议栈,满足数据运算、喇叭驱动、网络推送全部需求,抗干扰能力强,适合长期稳定运行。
2.测温传感器
MLX90642
32×24像素红外阵列传感器,非接触式全域温度采样,抗环境光线干扰,测温精度高,可完整采集区域温度分布,精准识别高温火源区域。
3.硬件外设
- 报警器件:成品大功率喇叭,直接由主控GPIO驱动
- 通信模块:网络模组,实现以太网数据传输
- 电源模块:稳压供电,保障主控与传感器稳定工作
4.硬件接线
- MLX90642:SDA、SCL、VCC、GND接入CoreMP135硬件I2C引脚
- 喇叭正负引脚直接连接主控通用GPIO控制端口
- 网络模组与主控通信引脚对接,整机共地布线
五、软件程序设计
1.开发环境
嵌入式C语言开发,基于CoreMP135 Linux平台,搭载OpenSSL库实现HTTPS加密通信,使用libpng库进行热成像图像编码,配合tinyplay音频播放器实现报警音效输出。项目采用模块化架构,分为红外采样、温度分析、音频报警、网络推送四大核心模块。
2.程序运行流程

3.核心控制逻辑
3.1 主程序入口(main.c)
主程序采用事件循环架构,通过信号处理机制实现优雅退出:
volatile int g_running = 1;
static void sigint_handler(int sig) {
g_running = 0;
}
int main(int argc, char *argv[]) {
signal(SIGINT, sigint_handler);
signal(SIGTERM, sigint_handler);
return fire_detection_mode();
}
功能说明:注册SIGINT和SIGTERM信号处理函数,支持Ctrl+C或kill命令优雅终止程序,确保资源正确释放。
3.2 火灾检测主循环(fire_detection_mode函数)
核心检测流程包含以下关键步骤:
- 模块初始化:依次初始化Webhook、I2C总线、MLX90642传感器、热成像处理模块、LCD显示(可选)、音频输出(可选)
- 开机通知:系统启动后自动向企业微信发送设备上线通知
- 首帧采集:采集初始热成像数据并保存发送
- 循环检测:持续采集温度数据,判断是否触发报警条件
关键代码片段:
while (g_running) {
ret = mlx90642_read_temperatures(&sensor_data);
if (ret == 0) {
thermal_update(&thermal, sensor_data.temps);
if (thermal_check_alarm(&thermal)) {
float max_temp = thermal_get_max_temp(&thermal);
int x, y;
thermal_get_max_pos(&thermal, &x, &y);
// 触发音频报警和远程推送
audio_play_alarm();
wechat_webhook_send_alarm(max_temp, x, y, timestamp);
}
}
usleep(100000); // 100ms采样间隔
}
3.3 热成像数据处理(thermal.c)
温度色彩映射算法:采用彩虹色阶映射,低温显示蓝色,高温显示红色,通过分段线性插值实现平滑过渡:
static void temp_to_rgb(float temp, float min_temp, float max_temp,
unsigned char *r, unsigned char *g, unsigned char *b) {
float normalized = (temp - min_temp) / (max_temp - min_temp);
if (t < 0.1429f) { *r=0; *g=0; *b=255; } // 蓝色
else if (t < 0.2857f) { *r=0; *g=...; *b=255; } // 青蓝过渡
else if (t < 0.4286f) { *r=0; *g=255; *b=...; } // 青绿过渡
else if (t < 0.5714f) { *r=...; *g=255; *b=0; } // 绿黄过渡
else if (t < 0.7143f) { *r=255; *g=...; *b=0; } // 黄红过渡
else { *r=255; *g=255; *b=...; } // 红白色
}
报警判定机制:设置100℃预警阈值,并引入2秒冷却周期防止重复报警:
#define ALARM_THRESHOLD 100.0f
#define COOLDOWN_PERIOD 2
int thermal_check_alarm(thermal_t *thermal) {
if (thermal->max_temp < ALARM_THRESHOLD) return 0;
time_t now = time(NULL);
if (now - thermal->last_alarm_time < COOLDOWN_PERIOD) return 0;
thermal->last_alarm_time = now;
return 1;
}
热成像图像生成:支持PNG格式图像编码,通过10倍放大实现清晰的可视化效果:
int thermal_save_bmp(thermal_t *thermal, const char *filename) {
int scale_factor = 10;
int width = MLX90642_WIDTH * scale_factor; // 320像素
int height = MLX90642_HEIGHT * scale_factor; // 240像素
// 使用libpng创建RGB图像
png_structp png_ptr = png_create_write_struct(...);
png_infop info_ptr = png_create_info_struct(png_ptr);
png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, ...);
// 逐像素映射温度到RGB色彩
for (int y = 0; y < MLX90642_HEIGHT; y++) {
for (int x = 0; x < MLX90642_WIDTH; x++) {
temp_to_rgb(temps[idx], min_temp, max_temp, &r, &g, &b);
// 放大写入像素
}
}
}
3.4 MLX90642传感器驱动(mlx90642_api.c)
初始化流程:读取设备ID验证通信,设置16Hz刷新率:
int mlx90642_init(void) {
uint16_t id[4];
MLX90642_I2CRead(MLX90642_ADDR, 0x1230, 4, id);
printf("MLX90642 ID: %04X %04X %04X %04X\n", id[0], id[1], id[2], id[3]);
MLX90642_SetRefreshRate(MLX90642_ADDR, MLX90642_REF_RATE_16HZ);
return 0;
}
温度读取:从传感器读取768个像素原始数据和环境温度,进行数值转换:
int mlx90642_read_temperatures(sensor_data_t *data) {
uint16_t pixel_data[MLX90642_PIXEL_COUNT]; // 768个像素
uint16_t ta_raw;
MLX90642_I2CRead(MLX90642_ADDR, MLX90642_TO_DATA_ADDRESS,
MLX90642_PIXEL_COUNT, pixel_data);
MLX90642_I2CRead(MLX90642_ADDR, MLX90642_TA_DATA_ADDRESS, 1, &ta_raw);
data->ta = (float)ta_raw / 100.0f; // 环境温度
for (int i = 0; i < MLX90642_PIXEL_COUNT; i++) {
int16_t signed_val = (int16_t)pixel_data[i];
data->temps[i] = (float)signed_val / 50.0f; // 像素温度
}
return 0;
}
3.5 企业微信Webhook推送(wechat_webhook.c)
SSL/TLS加密通信:完整实现HTTPS协议栈,确保数据传输安全:
static int ssl_send_request(const char *host, int port, const char *request,
char *response, int response_size) {
// 初始化SSL上下文
SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
// 创建TCP连接
sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
// TLS握手
SSL *ssl = SSL_new(ctx);
SSL_set_fd(ssl, sockfd);
SSL_connect(ssl);
// 加密发送HTTP请求
SSL_write(ssl, request, strlen(request));
SSL_read(ssl, response, response_size);
// 资源清理
SSL_free(ssl);
close(sockfd);
SSL_CTX_free(ctx);
}
图片推送机制:支持Base64编码和MD5校验,符合企业微信API要求:
int wechat_webhook_send_image(const char *image_path) {
// 读取图片文件
fread(image_data, 1, file_size, fp);
// Base64编码
char *base64_data = base64_encode(image_data, file_size, &base64_len);
// MD5哈希计算
md5_hash(image_data, file_size, md5_hash_str);
// 组装JSON payload
snprintf(payload, payload_size,
"{\"msgtype\":\"image\",\"image\":{\"base64\":\"%s\",\"md5\":\"%s\"}}",
base64_data, md5_hash_str);
// HTTPS发送
ssl_send_request("qyapi.weixin.qq.com", 443, request, response, MAX_RESPONSE_SIZE);
}
3.6 音频报警模块(audio.c)
WAV音频生成:实时生成方波报警信号,支持频率和时长参数化配置:
static int generate_wav_file(const char *filename, int frequency, int duration_ms) {
unsigned int sample_rate = 44100;
int samples_count = (sample_rate * duration_ms) / 1000;
// 写入WAV文件头(44字节)
uint8_t header[44] = {
'R', 'I', 'F', 'F', ... // ChunkID
'W', 'A', 'V', 'E', ... // Format
'f', 'm', 't', ' ', ... // Subchunk1ID
0x01, 0x00, // AudioFormat: PCM
0x01, 0x00, // NumChannels: 1
...
};
// 生成正弦波采样数据
double period = (double)sample_rate / frequency;
for (int i = 0; i < samples_count; i++) {
int16_t sample = (int16_t)(32767.0 * sin(2.0 * PI * i / period));
fwrite(&sample, 1, 2, fp);
}
}
报警音效序列:采用800Hz/1000Hz交替鸣笛模式,增强警示效果:
int audio_play_alarm(void) {
audio_play_beep(800, 200); // 低音200ms
usleep(100000); // 间隔100ms
audio_play_beep(1000, 200); // 高音200ms
usleep(100000);
audio_play_beep(800, 200);
usleep(100000);
audio_play_beep(1000, 200);
}
4.软件模块架构
模块 | 职责 | 关键文件 |
|---|---|---|
主控模块 | 系统调度、流程控制 | main.c |
红外采样 | MLX90642驱动、温度读取 | mlx90642_api.c |
热成像处理 | 温度分析、报警判定、图像生成 | thermal.c |
网络通信 | HTTPS请求、Webhook推送 | wechat_webhook.c |
音频输出 | WAV生成、报警音效播放 | audio.c |
LCD显示 | 热成像可视化输出 | lcd.c |
六、功能测试与结果
1.功能测试
- 常态环境下设备稳定采样,无误报警、无无效推送
- 模拟高温热源测试,温度达到100℃以上,喇叭立刻鸣响
- 热成像图像采集正常,可清晰显示高温区域位置
- 网络通信稳定,预警图片与提示信息成功推送至企业微信
- 复杂光照环境下采样精准,无错误触发预警
测试结论:红外矩阵采样稳定,阈值判定精准,喇叭报警响应迅速,远程图片推送可靠,完全满足项目设计要求。
2.实际测试效果图
侧视图补充:




系统运行时,企业微信接收告警消息的实际效果如下:

效果说明:
- 顶部显示热成像图像,红色区域表示高温火源位置
- 系统启动时自动发送设备上线通知
- 检测到温度超过100℃时,自动推送告警消息,包含温度数值和位置坐标
- 告警消息包含实时时间戳,便于追溯
3.Webhook测试方法
在开发阶段使用 curl 工具验证 Webhook 接口连通性:
文本消息测试:
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"msgtype":"text","text":{"content":"[测试] 设备启动通知"}}'
图片消息测试:
BASE64=$(base64 -w 0 test_image.jpg)
MD5=$(md5sum test_image.jpg | awk '{print $1}')
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"image\",\"image\":{\"base64\":\"$BASE64\",\"md5\":\"$MD5\"}}"
3.HTTPS实现方案
系统采用 OpenSSL 库实现企业微信 Webhook 的 HTTPS 加密通信,核心流程如下:
- OpenSSL初始化:调用
SSL_library_init()、SSL_load_error_strings()、OpenSSL_add_all_algorithms()完成库初始化 - 创建SSL上下文:使用
TLS_client_method()创建客户端 TLS 上下文 - 建立TCP连接:通过 socket 连接企业微信服务器端口 443
- TLS握手:调用
SSL_connect()完成 SSL/TLS 握手协商 - 加密传输:使用
SSL_write()发送加密的 HTTP 请求,SSL_read()读取加密响应 - 资源清理:依次释放 SSL 对象、socket、SSL 上下文
关键代码结构:
SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
SSL *ssl = SSL_new(ctx);
SSL_set_fd(ssl, sockfd);
SSL_connect(ssl);
SSL_write(ssl, request, strlen(request));
SSL_read(ssl, response, sizeof(response));
SSL_free(ssl);
SSL_CTX_free(ctx);
该方案确保了告警信息在网络传输过程中的安全性,有效防止数据被窃取或篡改。
七、项目创新点
- 采用CoreMP135主控搭配MLX90642面阵红外采样,全域测温监测范围更广
- 设定100℃固定预警阈值,高温火源识别精准,预警时机合理
- 硬件极简设计,舍弃LED指示灯,仅保留成品喇叭,电路精简故障率低
- 本地喇叭声光告警+企业微信图片远程推送双重预警模式
- 自动采集热成像画面上传,直观展示热源位置,便于远程研判
- 设备功耗低,支持7×24小时无人值守自动监测
八、应用前景
本设备适用于配电室、仓储库房、工厂车间、工业园区等场所,针对高温起火隐患提前监测预警,超温自动鸣笛提醒现场人员,同步推送图像至管理端,实现智能化消防安全管控,安装便捷、成本低廉,具备良好市场推广前景。
九、总结与展望
项目总结
本项目基于CoreMP135与MLX90642完成设计,实现红外矩阵温度连续采样,温度超过100℃触发喇叭报警,同步通过企业微信Webhook推送预警图片。硬件结构简洁,功能贴合实际安防需求,运行稳定可靠,符合本次大赛参赛标准。
优化方向
后续可增设报警消控功能、多档位温度分级预警、历史告警数据存储,进一步提升系统智能化程度。
十、附录
BOM元器件清单
器件名称 | 型号 | 数量 | 用途 |
|---|---|---|---|
主控芯片 | CoreMP135 | 1 | 系统主控运算控制 |
红外测温传感器 | MLX90642 | 1 | 红外矩阵温度采样 |
发声警报装置 | 成品喇叭 | 1 | 本地高温报警 |
网络传输模组 | RTL8192EU | 1 | Webhook网络推送 |
稳压电源模块 | 配套 | 1 | 整机供电 |
阻容元件 | 通用 | 若干 | 电路辅助配件 |
附录资料
- CoreMP135全套工程源码
- MLX90642红外采样驱动程序
- 企业微信Webhook配置说明
- 硬件接线图、设备实物效果图
- 贸泽电子采购相关凭证