【单片机 TB作品】基于STM32F103C8T6单片机的甲醛监测与报警系统

news/2024/11/13 13:31:41/

文章目录

  • 原理图
  • ZE08-CH2O甲醛传感器
  • A9短信模块
  • 实物

原理图

在这里插入图片描述

ZE08-CH2O甲醛传感器

ZE08-CH2O是一种甲醛(甲醛)传感器,用于检测环境中的甲醛浓度。甲醛是一种有毒气体,广泛用于建筑材料、家具、地毯、化妆品和其他消费品的生产中。高浓度的甲醛对人体健康有害,可能导致呼吸道问题、眼痛、皮肤刺激甚至癌症。

ZE08-CH2O传感器采用电化学原理,能够测量环境中甲醛的浓度,并输出相应的电信号。它通常与微控制器或数据采集系统配合使用,以便监测甲醛浓度并采取适当的措施,如提醒用户开窗通风或触发警报。

这种传感器通常具有以下特点:

高灵敏度:能够检测到低浓度的甲醛。
高精度:提供准确的测量结果。
高稳定性:能够长时间稳定地工作。
快速响应:能够迅速检测到甲醛浓度的变化。
小型化设计:体积小,便于集成到不同的应用中。

在这里插入图片描述

在这里插入图片描述

采用5V供电,然后使用STM32F103C8T6单片机的串口3,波特率9600,与ZE08-CH2O甲醛传感器进行通信。ZE08-CH2O甲醛传感器的输出电平是3.3。

在这里插入图片描述
串口接收的代码:

u32 ch2o_high = 1000;//甲醛的最大值,高于就报警 1000就是0.1mg/m3
u32 ch2o;//甲醛浓度 mg/m3*10000u8 UART3_dat_ch2o[20];
u8 ch2o_cnt = 0;void USART3_IRQHandler(void) {u8 res;if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) /* 接收到数据 */{res = USART_ReceiveData(USART3);//回发//USART_SendData(USART3, res);                                          /* 发送数据到串口3 */UART3_dat_ch2o[ch2o_cnt]=res;switch (ch2o_cnt) {case 0:if (UART3_dat_ch2o[ch2o_cnt] == 0xFF) ch2o_cnt = 1;else ch2o_cnt = 0;break;case 1:if (UART3_dat_ch2o[ch2o_cnt] == 0x17) ch2o_cnt = 2;else ch2o_cnt = 0;break;case 2:if (UART3_dat_ch2o[ch2o_cnt] == 0x04) ch2o_cnt = 3;else ch2o_cnt = 0;break;case 3:if (UART3_dat_ch2o[ch2o_cnt] == 0x00) ch2o_cnt = 4;else ch2o_cnt = 0;break;case 4:ch2o_cnt = 5;break;case 5:ch2o_cnt = 6;break;case 6:if (UART3_dat_ch2o[ch2o_cnt] == 0x13) ch2o_cnt = 7;else ch2o_cnt = 0;break;case 7:if (UART3_dat_ch2o[ch2o_cnt] == 0x88) ch2o_cnt = 8;else ch2o_cnt = 0;break;case 8:  //校验接收的数据  正确则处理接收的数据if ((UART3_dat_ch2o[ch2o_cnt] + UART3_dat_ch2o[1] + UART3_dat_ch2o[2] + UART3_dat_ch2o[3] +UART3_dat_ch2o[4] + UART3_dat_ch2o[5] + UART3_dat_ch2o[6] + UART3_dat_ch2o[7]) % 256 == 0) {ch2o = UART3_dat_ch2o[4] * 256 + UART3_dat_ch2o[5];ch2o = ch2o * 13.392857;ch2o_cnt = 0;} else {ch2o_cnt = 0;}break;}}
}

显示的代码:

    //甲醛memset(xianshi, 0, sizeof(xianshi));sprintf(xianshi, "C:%d.%04d mg/m3 ", (int) ch2o / 10000, (int) ch2o % 10000);OLED_P8x16Str(16 * 0, 4, xianshi, 0);

A9短信模块

引脚图:
在这里插入图片描述

原理图:
在这里插入图片描述

初始化:

void init_A9(void) {OK = 0;printf("AT\r\n");delay_ms(500);printf("AT\r\n");delay_ms(500);while (1) {if (OK == 1)                  /* OK */{OK = 0;break;} else {delay_ms(500);printf("AT\r\n");     /* 再次测试AT */OLED_P8x16Str(16 * 0, 2, "SIM AT TEST ", 0);}}/* 检测卡SIM */OK = 0;printf("AT+CCID\r\n");delay_ms(500);while (OK == 0) {printf("AT+CCID\r\n");OLED_P8x16Str(16 * 0, 2, "SIM ERROR   ", 0);delay_ms(500);}
}
//A9模块
void USART1_IRQHandler(void)                                                                  /* 串口1中断服务程序 */
{u8 receiveData;static unsigned char over_flag = 0;                                                  /* 完成标志 */if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                              /* 接收中断(接收到的数据必须是0x0d 0x0a结尾) */{receiveData = USART_ReceiveData(USART1);                                      /* 读取接收到的数据 */if (receiveData == '>') {OKGSM = 1;}RX_BUF[LENGTH++] = receiveData;if (receiveData == '\r') {over_flag = 1;} else if (((receiveData == '\n') && (over_flag == 1)))      /* 收到\r\n */{RX_BUF[LENGTH] = '\0';LENGTH = 0;over_flag = 0;                                    /* 完成标志 */if (strstr(RX_BUF, "OK") != NULL) {OK = 1;} else {OK = 0;}}}
}

发送短信:

void send_once_GSM(void) {printf("AT+CMGF=1\r\n");OK = 0;delay_ms(500);while (OK == 0) {printf("AT+CMGF=1\r\n");delay_ms(500);}printf("AT+CMGS=\"13198256451\"\r\n");OKGSM = 0;delay_ms(500);while (OKGSM == 0) {printf("AT+CMGS=\"13198256451\"\r\n");delay_ms(500);}                                                       /* 等待 反应 */delay_ms(500);printf("message warining!!!!!!! ");while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);USART_SendData(USART1, 0x1a);                         /* 短信结尾字符 */while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
}

实物

最终搭载了SIM800C短信模块。
在这里插入图片描述


http://www.ppmy.cn/news/105410.html

相关文章

驱动开发:内核读写内存浮点数

如前所述,在前几章内容中笔者简单介绍了内存读写的基本实现方式,这其中包括了CR3切换读写,MDL映射读写,内存拷贝读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。内存浮…

Linux:虚拟网卡技术tun/tap

一、介绍 Linux中的TAP网络接口详解是Linux网络管理中的很重要的一部分,它可以用来建立虚拟网络,模拟网络,管理网络流量以及实现安全网络功能等。本文将介绍TAP网络接口的基本原理、如何使用它进行网络管理、与以太网的区别&#x…

docker 镜像/容器的打包、导出、导入

目录 一、将变动过的容器打包生成新的镜像 二、对镜像进行导出导入 1、将镜像导出为一个镜像img文件 2、将img镜像文件导入,复制出一个完全一样镜像 三、对容器进行导入导出 1、将容器导出为一个镜像tar文件 2、将镜像tar文件导入,生成一个新镜像…

盘点!Instruction Tuning 时代的大模型(下)

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/617302168 Alpaca,ChatGLM 6B 等模型的效果可以接受,下文总结部分笔记,为训练自定义小型化(7B)模型提供点知识储备。 之前我们分享了LaM…

【观察】浪潮信息:自研液环式真空CDU技术,将被动应对变为主动防御

毫无疑问,在“双碳”战略的大环境下,数据中心走向绿色低碳和可持续发展已成为“不可逆”的大趋势,特别是随着全国一体化大数据中心、新型数据中心等政策文件的出台、“东数西算”工程的正式启动,数据中心的建设规模和数量呈现出快…

我用低代码结合ChatGPT开发,每天多出1小时摸鱼

👉腾小云导读 GPT 出现之后,很多人推测大量的软件都会因为其出现而重写。本文主要是低代码平台与 ChatGPT 结合的一些思考以及实践。期望与各位读者一起搭上 AI 这列快车,为开发提提速~ 👉目录 1 背景 2 Demo 演示 3 思…

权限维持-SSP-DLL 加载

前言 继续学习中,今天是权限维持的东西,大家永远不要忘记初心,要一起奋斗哦! 注:单机环境和域环境都可以使用 复现 一.进程注入lsass.exe 使用mimikatz将伪造的SSP注入内存,这样用户在注销重新登录的时候就…

知识点滴 - POSIX vs SUS vs LSB

SUS扩展了POSIX;LSB扩展了POSIX和SUS,但有一些冲突。 只有经过SUS认证的操作系统才能被称为 "Unix"(因为SUS的所有者Open Group拥有Unix商标);并非所有的Linux发行版都符合LSB,例如Debian和Ubunt…