2024-09-01
售卖作品
00

目录

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

原理图

在这里插入图片描述

ZE08-CH2O甲醛传感器

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

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

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

高灵敏度:能够检测到低浓度的甲醛。

高精度:提供准确的测量结果。

高稳定性:能够长时间稳定地工作。

快速响应:能够迅速检测到甲醛浓度的变化。

小型化设计:体积小,便于集成到不同的应用中。

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

串口接收的代码:

c
u32 ch2o_high = 1000;//甲醛的最大值,高于就报警 1000就是0.1mg/m3 u32 ch2o;//甲醛浓度 mg/m3*10000 u8 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; } } }

显示的代码:

c
//甲醛 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短信模块

引脚图:

在这里插入图片描述

原理图:

在这里插入图片描述

初始化:

c
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; } } } }

发送短信:

c
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://dt4.8tupian.net/2/28880a8b9990.pg3

在这里插入图片描述

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!