APP下载

基于STM32单片机的水质监测与处理系统

2024-12-19肖宇涛白伟华张博林煜杰陈潮彬

中国新技术新产品 2024年23期
关键词:STM32单片机水质监测物联网

摘 要:目前,小区生活污水的二次处理存在监测效率低、处理不及时等问题。针对以上问题,本文提出了一种基于STM32单片机的水质监测与处理系统,系统集成水质监测传感器、实时操作系统RTOS、ESP8266模块以及C++应用程序设计等技术,实现对小区生活污水的监测。与传统方法相比,系统具有更高的监测准确度和响应能力,可以提升水质处理的效率。结果表明,系统在水质监测与处理方面具备显著的改进效果,能够有效提高小区生活污水的处理水平。

关键词:物联网;水质监测;STM32单片机;ESP8266模块;FreeRTOS

中图分类号:X 832 文献标志码:A

在老旧小区的污水处理改造或新楼宇设计中,智慧化和就近处理生活污水的需求日益增长。对生活污水进行收集,经过处理使水质达到再生水水质标准,用于冲厕、绿化用水、道理浇洒,从而实现水资源的循环利用[1]。综合上述问题,本文利用STM32单片机,通过水质监测传感器采集小区生活污水水质,依靠实时操作系统RTOS实现多任务处理,利用ESP8266模块将数据上传至云服务器,通过客户端实现水质数据的可视化展示和设备的远程控制[2]。

1 系统整体设计

系统通过超声波传感器、温度传感器、PH传感器、浊度传感器和TDS传感器等多种水质监测传感器来实现对水源参数的监测。其中,STM32单片机作为数据处理的核心,负责对传感器采集的数据进行初步分析和处理。ESP8266模块作为数据传输的桥梁,确保数据能够通过无线网络发送到阿里云服务器。在服务器端,数据存储和数据管理功能保证了数据的持久化和可查询性,同时,数据分析模块对传感器采集的数据进行深入挖掘,为决策提供依据。数据可视化工具通过客户端软件将水质数据转换为直观的图表和指示。远程控制功能允许用户通过客户端对水泵、步进电机、继电器等设备进行操作,实现设备的自动化管理[3]。此外,系统还包括了蜂鸣器和LED指示灯等报警和状态指示设备以及电源模块,确保整个系统的稳定运行。系统整体设计结构如图1所示。

2 系统硬件结构设计

系统基于STM32F103系列单片机作为核心控制系统,通过水质监测传感器监测小区生活污水情况。采集的数据经过单片机处理后,系统控制处理设备的执行,同时通过UART串口通信,将数据发送到ESP8266模块,再由ESP8266模块将数据发送到阿里云服务器上,实现对水质的监测与处理。

2.1 STM32F103主控模块

STM32F103系列单片机采用ARM32位的Cortex-M3内核,运行频率高达72MHz,具有低功耗设计等优点,单片机内部集成128KB的Flash存储空间,可用于记录水质指标的基本信息。单片机含有21个AD转换的GPIO引脚接口,可同时采集水质监测传感器的数据。同时,STM32F103还有丰富的GPIO口资源,可用于控制投药装置、报警装置等多个执行单元,保证了系统控制的灵活性和多样性。

2.2 传感器模块

温度传感器采用DS18B20数字温度传感器,它具有低功耗设计、强大的抗干扰能力等特点。单片机读取温度传感器测量的数据后,需要将数据变换为数字温度。当数据低8位全部为0 时,取温度为正,否则取负。数字温度计算形式为16乘以数据的高8位,加上0.0625乘以数据的低8位来得到。在本系统中,用于检测其水质温度和设备运行环境温度。电路原理图如图2所示。电路的核心是DS18B20传感器,它通过VCC和GND引脚连接到电源和地线。电路中包括2个电阻:1个10kΩ的上拉电阻R1和1个1kΩ的电阻R2。R1用于为DS18B20的数据线提供上拉电压,当数据线空闲时保持高电平状态。R2用于限制LED指示灯的电流。LED指示灯通过1kΩ的限流电阻连接到VCC,以提供操作状态的反馈。

PH传感器通过测量溶液中的氢离子浓度来检测pH值。它将PH值转换为模拟电压信号,单片机通过ADC模块读取模拟电压信号,将其转换为数字值。利用校准曲线公式y=-5.7541x+16.654(R2=1),将数字值转换为pH值。在本系统中用于监测水质的pH浓度。

浊度传感器利用光学原理,通过溶液中的透光率和散射率来综合判断水的浊度。单片机通过ADC模块读取模拟电压信号,根据传感器特性和校准曲线将数字值转换为浊度值,其浊度值与模块输出电压满足以下关系:TU=-865.68×U+K(TU为当前浊度值,U为当前温度条件下模块的输出电压值,K为截距值)。温度校正公式为ΔU=-0.0192×(T-25)(ΔU为温度变化引起的电压差,T为当前测量温度值)。在本系统中用于检测其水质浑浊度状况[4]。

TDS电导率传感器采用电极法测定水溶液的电导率。将TDS传感器输出引脚连接到STM32单片机的模拟输入引脚,接收传感器输出的模拟电压信号,使用ADC模块转换为数字值,再根据传感器特性和校准曲线将数字值转换为TDS值,TDS标准曲线公式和温度修正系数分别如公式(1)~公式(4)所示。在本系统中用于检测其水质的TDS溶解性固体总量。

T修正=1+0.02×(T测试-25) (1)

V修正=T修正×V测试 (2)

TDS测试值=(66.71×V 3修正-127.93×V2修正+428.7×V修正)×K

(3)

K=TDS标准值/TDS测量值 (4)

式中:T修正为温度校正系数;T测试为待测溶液测量温度;V修正为修正后的传感器模块AO口输出电压值;V测试为传感器模块AO口输出电压值;K为修正系数。

HC-SR04超声波测距传感器采用IO口TRIG 触发测距。将超声波传感器的Trig和Echo引脚连接到STM32单片机的GPIO输出和输入引脚,用于向Trig引脚发送高电平信号,以触发超声波发射。然后,等待Echo引脚输出高电平信号,记录计数器值并通过公式(距离= 高电平时间×声速(340m/s)/2)计算距离。在本系统中用于测量其水位高度。

2.3 数据通信模块

ESP8266模块通过串行通信与STM32单片机进行连接,使用AT指令集来进行配置和控制。在本系统中,ESP-01S 模组的VCC管脚连接3.3V电压,ESP-01S的TXD、RXD、RST引脚分别连接单片机的PA3、PA2、PA4引脚,实现UART通信,剩余管脚悬空。

3 系统软件结构设计

3.1 系统整体设计及流程图

从系统启动开始,依次进行设备初始化、网络连接、服务器通信、数据采集与处理、决策与控制、用户交互、数据存储、异常处理和系统监控。系统通过ESP8266模块,发送AT指令连接到云服务器,利用MQTT协议进行数据可靠传输,确保与云服务器的实时通信,同时各个传感器进行数据采集,通过单总线读取温度、A/D转换获取浊度、pH值和TDS值。单片机对数据进行实时处理,判断是否超出预设阈值[5]。一旦检测到异常,系统会计算加药量并执行控制命令,通过蜂鸣器、加药泵和继电器进行预警和控制,同时客户端软件连接服务器获取数据显示,使用户能够实时监控并手动干预。所有数据均保存至数据库,系统持续监控设备状态和水质数据,确保稳定运行,并在设备温度异常或停机时通知用户,采取安全措施。软件设计整体流程如图3所示。

3.2 数据采集与控制系统设计

数据采集部分由水质监测传感器和STM32单片机组成,通过ADC模块将传感器的模拟电压信号转换为数字值,并根据传感器特性和校准曲线将数字值转换为测量值,然后通过串口发送至上层系统。ADC模块的初始化包括定义数组、配置GPIO、设置DMA参数、配置ADC工作模式和复位校准寄存器。串口程序负责初始化通信参数、配置数据格式和中断优先级。

控制处理部分包括继电器、蜂鸣器和LED指示灯模块,通过客户端发送控制命令至服务器,服务器接收并下发指令至硬件终端。ESP8266模块接收到指令后通过串口发送1条包括控制命令相关信息的报文,串口利用DMA中断将数据存储至缓冲区。DMA发出空闲中断表示数据接收完成,随后将缓冲区中完整的数据复制到接收缓冲区。接着,对数据进行剥离MQTT 封装、提取关键命令等操作,根据关键词控制继电器、蜂鸣器等设备的开启和关闭,从而实现对终端设备的远程控制。具体代码如下。

void ESP8266_GetIPD()

{

char *ptrIPD=NULL ;

char *data =NULL;

int result = 0;

Char*IPD=\"+MQTTSUBRECV:0,\\"/sys/k0c599npYF6/water_manage/thing/service/property/set\\",\";

if(ESP8266_WaitRecive() == REV_OK)

{

ptrIPD = strstr((char *)esp8266_buf, IPD);

if(ptrIPD == NULL)

{

return;

}

else

{

ptrIPD=strstr((char*)ptrIPD,\"items\");

char PUB_TOPIC3[128]; if(strstr((char *)ptrIPD, “Pump1_state”)!=NULL

{

ptrIPD = strstr(ptrIPD, \"value\");

if(ptrIPD != NULL)

{

ptrIPD = strchr((char*)ptrIPD, ':');

data = ptrIPD+1; //1}}}

if(data[0] == '0')

{

GPIO_ResetBits(GPIOE, GPIO_Pin_7);

PUMP1LEDdata=0; }

if(data[0] == '1')

{ GPIO_SetBits(GPIOE, GPIO_Pin_7);

PUMP1LEDdata=1; }

}

}

ESP8266_SendCmd(PUB_TOPIC3, \"OK\");

delay_ms(200);

memset(PUB_TOPIC3,0,sizeof(PUB_TOPIC3));

ptrIPD=NULL;

data =NULL;

ESP8266_Clear();

}

}

}

3.3 RTOS操作系统多任务设计

FreeRTOS嵌入式实时操作系统的主要特点是支持多任务,允许多个任务同时存在,并根据一定的调度规则进行任务切换。多任务使CPU的利用率达到最大,可以将软件最大程度地模块化,便于编写。本系统将工作划分为3个任务,优先级从高到低依次是数据采集与发送任务、预警控制任务、命令下发任务。数据采集与发送任务通过STM32单片机与传感器的通信实现数据采集,并将数据通过ESP8266模块发送至阿里云服务器。预警控制任务监控水质数据,当检测到异常时,通过单片机控制相关设备(例如加药泵、蜂鸣器和继电器)进行处理。命令下发任务通过客户端向阿里云服务器下发命令,使用串口和DMA中断实现数据的高效接收和处理,以实现对终端设备的远程控制[6]。部分关键代码如下。

//数据上传任务函数

void upload_data_task(void *pvParameters)

{

while (1)

{

ESP8266_GetIPD();

float TSWvalue = TSW30Monitor_function(); " " float TDSvalue = TDSMonitor_function(); float PHvalue = PHMonitor_function(); float TEMPvalue = DS18B20_Get_Temp()/10;

float Distance = HCSR04_GetDistance(TEMPvalue)/10;

float facilityvalue =DS18B201_Get_Temp()/10;

ESP8266_SendData(TEMPvalue,TSWvalue,TDSvalue,PHvalue,Distance,facilityvalue);

ESP8266_Clear(); vTaskDelay(4000);

}

}

//命令下发任务函数

void Order_issuance_task(void *pvParameters)

{

while(1)

{

ESP8266_GetIPD();

vTaskDelay(500);

}

}

//报警控制任务函数

void alarm_control_task(void *pvParameters)

{

while(1)

{

ESP8266_GetIPD();

float TSWvalue = TSW30Monitor_function(); float TDSvalue = TDSMonitor_function(); float

PHvalue = PHMonitor_function();

float TEMPvalue = DS18B20_Get_Temp()/10; float Distance = HCSR04_GetDistance(TEMPvalue)/10;

Alarm_function( TEMPvalue, TSWvalue, TDSvalue, PHvalue, Distance);

vTaskDelay(500);

}

}

//创建数据上传任务

xTaskCreate((TaskFunction_t )upload_data_task,

(const char* )\"upload_data_task\",

(uint16_t )upload_data_STK_SIZE,

(void* )NULL,

(UBaseType_t )upload_data_TASK_PRIO,

(TaskHandle_t* )amp;upload_data_Task_Handler);

vTaskStartScheduler(); //开启任务调度

}

3.4 服务器及客户端系统设计

系统采用阿里云物联网平台,确保了设备连接的安全性和数据的可靠传输。首先,在平台上创建设备,获取设备的三元组信息(ProductKey、DeviceName、DeviceSecret)。其次,在ESP8266模块上安装MQTT协议驱动,编写程序并通过ESP8266模块发送AT指令连接到阿里云服务器,并发布/订阅主题,实现设备与服务器之间的数据交换。

客户端终端采用C++语言编写,使用QT进行界面设计和开发。利用MQTT协议与阿里云服务器进行数据交换。通过获取云服务器的IP地址、端口号、设备的三元组信息以及MQTT版本号,实现与服务器的连接。通过订阅Topic主题来实时获取终端设备上的数据。客户端连接到阿里云服务器的部分关键代码如下。

void fun::ConnectAliyun()

{

m_client = new QMqttClient(this);

m_client-gt;setHostname(\"iot-06z00hu6v44x0d3.mqtt.iothub.aliyuncs.com\");

m_client-gt;setPort(1883);

m_client-gt;setClientId(\"k0c599npYF6.water_qtduan|securemode=2,signmethod=hmacsha256,timestamp=1710417924697|\");

m_client-gt;setUsername(\"water_qtduanamp;k0c599npYF6\");

m_client-gt;setPassword(\"3530f5474d68a3b0c1fea1d0b3c4953b927ce92ed00af91df4d19f6cde57ff8e\");

m_client-gt;setProtocolVersion(QMqttClient::MQTT_3_1_1);

m_client-gt;connectToHost();

QObject::connect(m_client, amp;QMqttClient::connected, this, amp;fun::onConnected);

m_client-gt;connectToHost();

QObject::connect(m_client,amp;QMqttClient::messageReceived,this,amp;fun::onMessageReceived);

}

4 系统综合测试

系统初始化与传感器监测:开启电源后,STM32单片机初始化外围设备,系统自动配置ESP8266模块,通过发送AT指令连接Wi-Fi,根据三元组信息,利用AT指令接入阿里云服务器,同时订阅主题,用于请求数据到服务器。系统初始化成功后,听到蜂鸣器发出一声鸣叫,LED绿灯亮起,表示设备准备就绪。

水质监测和数据传输:传感器开始监测水源,温度传感器、TDS传感器、浊度传感器、pH传感器均浸没在水源中,超声波传感器安装在水箱的顶部位置。STM32单片机通过USART串口将数据传输至电脑进行显示和调试[7]。利用RTOS操作系统的多任务处理机制,每5s采集水质数据并发送至阿里云服务器,客户端接收数据后,以数据和折线图的形式进行展示,经过观察,监测到的水质数据均在误差范围内。

温度阀值设置和控制:在客户端手动设定设备环境温度阈值为60℃,同时发送命令至单片机。利用打火机在温度传感器附近进行模拟热源。当模拟高温环境时,系统触发警报,LED指示灯变红。温度下降后,警报解除,LED指示灯变绿[8]。

远程控制加药泵:在数据采集和传输功能正常运行下,利用RTOS多任务处理机制,通过客户端远程控制加药泵。单击打开继电器,连接在继电器上的加药泵开始工作,自动添加药剂到测试水源中;单击关闭继电器,加药泵停止工作,表示加药完成。

5 结语

本文通过传感器模块实时监测小区生活污水水质,结合STM32单片机和RTOS操作系统进行数据采集与处理。通过MQTT协议,利用ESP8266模块将数据传输至阿里云服务器,实现数据的远程传输和硬件终端的远程控制,有效解决了传统监测手段中人力资源浪费和实时性不足的问题,通过试验验证了系统的可行性和稳定性。系统采用智能化和远程监控设计,使监测人员能够实时监控水资源质量。未来还可进一步扩展功能,例如增加水质大数据分析、智能决策支持等,进一步提升小区水质管理的智能化水平。

参考文献

[1]安芳莱.一体化生活污水处理装置在天竺空港小区工程中的应用[J].科技资讯,2011(24):38-39.

[2]冯远翔,潘小琴.基于物联网的水质实时在线监测系统[J].物联网技术,2019,9(7):69-71.

[3]史磊.基于单片机的水情监测系统的设计[J].电子制作,2022,30(15):30-33,25.

[4]廖东南. 一种在线实时水质监测系统的开发及其通讯机制的实现[D].北京:清华大学,2005.

[5]兰翔.自动化监测技术在水质检测中的应用与研究[J].能源与环保,2021,43(7):269-274.

[6]郭富恒,贺媛媛.基于FreeRTOS的物联网温度监测系统[J].智能物联技术,2022,5(2):48-52.

[7]杨晓芳,徐炜旻.基于单片机的水质检测系统[J].信息记录材料,2022,23(9):153-155.

[8]任丰兰,操政,姚星.基于单片机的水质检查系统设计[J].机电工程技术,2023,52(6):166-169,248.

通信作者:白伟华(1976-), 男,汉族,教授,硕士生导师,研究方向为资源调度优化、协同计算、深度学习。

猜你喜欢

STM32单片机水质监测物联网
2014—2016年北戴河近岸海域水质监测数据对比分析
基于STM32芯片的移动机器人的避障研究
基于单片机的灌装生产线成品率计算装置设计
基于STM32的两轮自平衡遥控小车设计
基于STM32单片机的智能手环设计与实现
基于生物传感器的饮用水有毒物质检测
浅谈重铬酸盐法与快速消解分光光度法的比较
基于物联网的煤矿智能仓储与物流运输管理系统设计与应用
基于高职院校物联网技术应用人才培养的思考分析
中国或成“物联网”领军者