2026 M-Design设计竞赛 - 基于CoreMP135与MLX90642实现红外矩阵火源监测预警系统
该项目使用了CoreMP135与MLX90642,实现了红外矩阵火源监测预警系统的设计,它的主要功能为:完成全场温度矩阵数据周期性采样分析。系统设定**100℃为预警阈值**,检测到区域温度超出阈值时,直接驱动车载喇叭本地发声警报,同时自动采集热成像画面,通过网络调用企业微信Webhook接口,推送告警图文消息。。
标签
嵌入式系统
M-Design
奈奎斯特不稳定
更新2026-06-11
64

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.硬件接线

  1. MLX90642:SDA、SCL、VCC、GND接入CoreMP135硬件I2C引脚
  2. 喇叭正负引脚直接连接主控通用GPIO控制端口
  3. 网络模组与主控通信引脚对接,整机共地布线

五、软件程序设计

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函数)

核心检测流程包含以下关键步骤:

  1. 模块初始化:依次初始化Webhook、I2C总线、MLX90642传感器、热成像处理模块、LCD显示(可选)、音频输出(可选)
  2. 开机通知:系统启动后自动向企业微信发送设备上线通知
  3. 首帧采集:采集初始热成像数据并保存发送
  4. 循环检测:持续采集温度数据,判断是否触发报警条件

关键代码片段

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.功能测试

  1. 常态环境下设备稳定采样,无误报警、无无效推送
  2. 模拟高温热源测试,温度达到100℃以上,喇叭立刻鸣响
  3. 热成像图像采集正常,可清晰显示高温区域位置
  4. 网络通信稳定,预警图片与提示信息成功推送至企业微信
  5. 复杂光照环境下采样精准,无错误触发预警

测试结论:红外矩阵采样稳定,阈值判定精准,喇叭报警响应迅速,远程图片推送可靠,完全满足项目设计要求。

2.实际测试效果图

侧视图补充:

70f6b6d89b93a272cf1626fbfb4ea155_compress.jpg

3.png2.png

1.png

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

效果说明

  • 顶部显示热成像图像,红色区域表示高温火源位置
  • 系统启动时自动发送设备上线通知
  • 检测到温度超过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 加密通信,核心流程如下:

  1. OpenSSL初始化:调用 SSL_library_init()SSL_load_error_strings()OpenSSL_add_all_algorithms() 完成库初始化
  2. 创建SSL上下文:使用 TLS_client_method() 创建客户端 TLS 上下文
  3. 建立TCP连接:通过 socket 连接企业微信服务器端口 443
  4. TLS握手:调用 SSL_connect() 完成 SSL/TLS 握手协商
  5. 加密传输:使用 SSL_write() 发送加密的 HTTP 请求,SSL_read() 读取加密响应
  6. 资源清理:依次释放 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);

该方案确保了告警信息在网络传输过程中的安全性,有效防止数据被窃取或篡改。

七、项目创新点

  1. 采用CoreMP135主控搭配MLX90642面阵红外采样,全域测温监测范围更广
  2. 设定100℃固定预警阈值,高温火源识别精准,预警时机合理
  3. 硬件极简设计,舍弃LED指示灯,仅保留成品喇叭,电路精简故障率低
  4. 本地喇叭声光告警+企业微信图片远程推送双重预警模式
  5. 自动采集热成像画面上传,直观展示热源位置,便于远程研判
  6. 设备功耗低,支持7×24小时无人值守自动监测

八、应用前景

本设备适用于配电室、仓储库房、工厂车间、工业园区等场所,针对高温起火隐患提前监测预警,超温自动鸣笛提醒现场人员,同步推送图像至管理端,实现智能化消防安全管控,安装便捷、成本低廉,具备良好市场推广前景。

九、总结与展望

项目总结

本项目基于CoreMP135与MLX90642完成设计,实现红外矩阵温度连续采样,温度超过100℃触发喇叭报警,同步通过企业微信Webhook推送预警图片。硬件结构简洁,功能贴合实际安防需求,运行稳定可靠,符合本次大赛参赛标准。

优化方向

后续可增设报警消控功能、多档位温度分级预警、历史告警数据存储,进一步提升系统智能化程度。

十、附录

BOM元器件清单

器件名称

型号

数量

用途

主控芯片

CoreMP135

1

系统主控运算控制

红外测温传感器

MLX90642

1

红外矩阵温度采样

发声警报装置

成品喇叭

1

本地高温报警

网络传输模组

RTL8192EU

1

Webhook网络推送

稳压电源模块

配套

1

整机供电

阻容元件

通用

若干

电路辅助配件

附录资料

  1. CoreMP135全套工程源码
  2. MLX90642红外采样驱动程序
  3. 企业微信Webhook配置说明
  4. 硬件接线图、设备实物效果图
  5. 贸泽电子采购相关凭证


附件下载
release.zip
团队介绍
Nyquest-unstable
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号