基于STM32的水质检测系统Proteus仿真毕业论文

摘要

随着水资源污染问题日益突出,水质实时检测成为保障饮水安全、保护生态环境的重要手段。传统水质检测设备存在体积庞大、操作复杂、成本高昂、便携性差等弊端,难以满足家庭、小型水厂及野外应急检测的需求。本文设计并实现了一款基于STM32微控制器的便携式水质检测系统,并通过Proteus软件完成全流程仿真验证,旨在提供一种低成本、高精度、操作便捷的水质检测解决方案。

该系统以STM32F103C8T6为核心控制单元,整合DS18B20温度传感器、模拟PH传感器(滑动变阻器模拟)、模拟浑浊度传感器(滑动变阻器模拟)、模拟TDS电导率传感器(滑动变阻器模拟)、OLED显示屏、声光报警模块、4个功能按键(设置、加、减、返回)、电源降压模块及WiFi模块,实现水质多参数检测、参数阈值设置、超标声光报警、检测数据显示及无线数据传输等核心功能。

通过Proteus仿真测试表明,系统运行稳定、响应迅速,各功能模块协同工作正常:电源开关可有效控制系统供电,降压模块能提供稳定的工作电压;各模拟传感器可精准模拟水质参数采集,DS18B20传感器可实时检测水温;OLED显示屏可清晰显示系统界面及检测数据,通过按键可灵活设置各参数阈值;当检测参数超出预设阈值时,声光报警模块能及时触发报警;WiFi模块可稳定读取并上传各项检测数据。本设计结构简单、成本低廉、实用性强,既满足了便携式水质检测的需求,也通过Proteus仿真完成了毕业论文的工程实践要求,为水质检测系统的实际开发与应用提供了理论参考与仿真依据,具有一定的实际应用价值与推广前景。

关键词:STM32;水质检测;Proteus仿真;传感器;阈值设置;WiFi传输;声光报警

第一章 绪论

1.1 研究背景与意义

水资源是人类生存与发展的不可或缺的物质基础,随着工业化、城市化进程的加快,工业废水、生活污水的无序排放,导致地表水资源、地下水资源受到不同程度的污染,水质恶化问题日益严峻,直接威胁着人类的饮水安全与生态环境平衡。水质检测作为水资源保护、污染治理的前提,能够实时掌握水质状况,为水资源管理、污染防控提供科学依据。

目前,主流的水质检测设备多为实验室级检测仪器,具备检测精度高、参数全面等优点,但存在体积庞大、操作复杂、成本高昂、依赖专业人员操作、无法实现现场实时检测等不足,难以应用于家庭、小型水厂、农村饮水工程及野外应急检测等场景。因此,开发一款低成本、便携式、操作便捷、性能稳定的水质检测系统,实现水温、PH值、浑浊度、TDS电导率等核心水质参数的实时检测,具有重要的现实意义。

本次研究基于STM32微控制器,结合模拟传感器与数字传感器,设计便携式水质检测系统,并通过Proteus软件进行仿真验证。Proteus仿真作为嵌入式系统开发的重要工具,可在实物搭建前完成系统功能验证,降低开发成本、缩短开发周期,同时满足毕业论文对工程实践能力与仿真设计能力的培养要求。本研究的开展,不仅能掌握STM32微控制器的应用、传感器数据采集与处理方法,还能为便携式水质检测系统的实际开发提供仿真参考,助力水资源保护与水质监测的普及。

1.2 国内外研究现状

国外水质检测技术起步较早,相关产品与研究较为成熟,多注重检测精度、智能化与便携性的结合。国外便携式水质检测设备普遍集成多种传感器,可实现多参数同步检测,具备数据存储、无线传输、阈值报警等功能,部分高端产品还融入了智能算法,提升检测精度与稳定性,但其核心技术封闭、价格高昂,难以在发展中国家广泛普及。

国内水质检测领域近年来快速发展,各类便携式检测设备与研究不断涌现,多数产品实现了水温、PH值、TDS电导率等基础参数的检测,但普遍存在智能化程度不高、检测精度不足、功能单一、仿真验证不完善等问题。部分研究仅完成实物搭建,未通过仿真工具进行前期验证,导致开发过程中出现较多问题,增加了开发成本与难度。此外,现有部分设计未考虑参数阈值的灵活设置,适用性较差。综合现有研究短板,本文设计一款功能全面、成本低廉、操作便捷的水质检测系统,通过Proteus软件完成仿真验证,涵盖题目要求的所有功能,弥补现有研究中仿真设计不足、参数设置不灵活的问题,同时完成毕业论文的研发与撰写任务。

1.3 研究主要内容与目标

1.3.1 研究主要内容

本文围绕基于STM32的水质检测系统Proteus仿真展开研究,完成从方案设计、元器件选型、电路设计、软件编程、Proteus仿真调试到论文撰写的全流程工作,具体研究内容如下:

  1. 明确系统核心功能需求,结合题目要求,确定各模块的工作逻辑,完成系统整体方案设计与硬件架构搭建;
  1. 根据功能需求,完成各模块元器件选型,重点选择适配Proteus仿真的元器件,设计系统硬件电路,包括STM32最小系统、传感器采集电路、声光报警电路、OLED显示电路、按键电路、电源降压电路及WiFi通信电路;
  1. 基于Keil MDK5开发环境,采用模块化编程思想,编写主程序、传感器数据采集子程序、按键处理子程序、阈值设置子程序、声光报警子程序、OLED显示子程序及WiFi数据传输子程序;
  1. 在Proteus软件中搭建系统仿真电路,导入编写的程序,完成各功能模块的仿真测试,验证系统功能的正确性与稳定性;
  1. 优化系统设计与仿真参数,解决仿真过程中出现的问题,确保系统各项功能达到题目要求,完成毕业论文的撰写。

1.3.2 研究目标

本研究旨在设计一款基于STM32的水质检测系统Proteus仿真系统,实现以下核心目标,满足题目要求:

  1. 电源控制功能:通过电源开关控制系统供电,电源降压模块将输入电压转换为系统所需稳定电压,保障系统正常运行;
  1. 数据显示功能:OLED显示屏实现双界面显示,界面一显示水质检测系统相关信息及实时检测数据(水温、PH值、浑浊度、TDS电导率);界面二显示参数阈值设置界面,支持阈值调整;
  1. 水质参数检测功能:通过DS18B20传感器检测水温,通过滑动变阻器模拟PH传感器、浑浊度传感器、TDS电导率传感器,采集相应水质参数,确保检测数据准确、稳定;
  1. 阈值设置功能:通过4个按键(设置、加、减、返回)实现参数阈值的灵活设置,可调整水温、PH值(上下限)、浑浊度、TDS电导率的报警阈值;
  1. 声光报警功能:当检测到的水温、浑浊度、TDS电导率超出预设阈值,或PH值不在预设上下限范围内时,自动触发声光报警,提醒用户;
  1. WiFi传输功能:通过WiFi模块读取各项检测数据(水温、PH值、浑浊度、TDS电导率),并实现数据的无线传输,模拟物联网数据监测过程;
  1. 仿真验证目标:通过Proteus软件完成系统仿真,确保各功能模块协同工作正常,系统运行稳定、响应迅速,满足毕业论文的仿真设计要求。

1.4 论文章节安排

本文共分为六章,具体章节安排如下:

  1. 绪论:阐述研究背景与意义、国内外研究现状、研究主要内容与目标、论文章节安排;
  1. 系统总体方案设计:明确系统功能需求、整体架构设计、控制逻辑设计及核心元器件选型;
  1. 系统硬件电路设计:分模块详解各单元电路的原理、接线与设计要点,绘制电路原理图,并说明Proteus仿真电路的搭建要点;
  1. 系统软件设计:讲解软件开发环境、主程序流程与各功能子程序的设计思路,给出核心代码片段;
  1. Proteus仿真调试与结果分析:搭建Proteus仿真环境,完成各功能模块的仿真测试,分析仿真结果,验证系统功能;
  1. 总结与展望:总结系统设计与仿真成果,指出现存不足并提出未来优化方向。

第二章 系统总体方案设计

2.1 系统功能需求分析

结合题目要求与便携式水质检测的实际应用场景,本系统核心功能需求覆盖电源控制、数据采集、参数设置、声光报警、数据显示、WiFi传输六大核心模块,确保系统的实用性与针对性,具体功能需求如下:

  1. 电源控制功能:电源开关可手动控制系统的通电与断电,电源降压模块将外部输入电压(如9V)转换为3.3V和5V稳定电压,分别为STM32芯片、传感器、OLED显示屏、WiFi模块等提供适配电压,保障系统稳定运行;
  1. 水质参数检测功能:DS18B20数字温度传感器实时检测水温,测量范围-55℃~+125℃,精度±0.5℃;采用滑动变阻器分别模拟PH传感器、浑浊度传感器、TDS电导率传感器,通过调节滑动变阻器阻值,模拟不同水质条件下的参数变化,通过STM32的ADC接口采集模拟信号并转换为数字数据;
  1. 参数阈值设置功能:通过4个独立按键(设置、加、减、返回)实现阈值设置,按下“设置”键进入阈值设置界面,按下“加”“减”键调整阈值大小,按下“返回”键退出设置界面,返回主显示界面;可设置的阈值包括:水温上下限、PH值上下限、浑浊度阈值、TDS电导率阈值;
  1. 声光报警功能:设置声光报警模块(LED灯+蜂鸣器),当检测到的水温超出预设上下限、PH值不在预设上下限范围内、浑浊度超出预设阈值、TDS电导率超出预设阈值时,LED灯亮起,蜂鸣器发出持续报警声;参数恢复正常后,报警自动停止;
  1. 数据显示功能:采用OLED显示屏实现双界面显示,界面一(主界面)显示系统名称、检测参数名称及实时检测数据(水温、PH值、浑浊度、TDS电导率);界面二(设置界面)显示当前可设置的参数及对应阈值,清晰直观,数据刷新频率不低于1次/秒;
  1. WiFi传输功能:通过WiFi模块(如ESP8266仿真模型)读取STM32处理后的各项水质检测数据,模拟无线数据传输过程,实现数据的远程监测,可在仿真中通过串口调试窗口查看传输的数据。

2.2 系统整体架构设计

本系统采用模块化设计思想,以STM32F103C8T6微控制器为核心,将整个系统分为七大功能模块,各模块相互独立、协同工作,确保系统结构清晰、便于调试与仿真。系统整体架构如图2-1所示(此处可插入架构图),具体模块如下:

  1. 核心控制模块:以STM32F103C8T6为核心,负责接收各传感器采集的数据,进行数据处理、逻辑判断,响应按键操作,发送控制指令给声光报警模块、OLED显示模块,对接WiFi通信模块,协调各模块有序工作;
  1. 电源模块:由电源开关、电源降压模块(AMS1117-3.3V)组成,负责为整个系统提供稳定的供电,实现系统电源的通断控制与电压转换;
  1. 传感器采集模块:由DS18B20温度传感器、三个滑动变阻器(分别模拟PH、浑浊度、TDS电导率传感器)组成,负责实时采集水温及各项模拟水质参数,并将采集到的信号传输给核心控制模块;
  1. 按键控制模块:由4个独立按键(设置、加、减、返回)组成,负责接收用户操作指令,实现阈值设置、界面切换等功能,将操作信号传输给核心控制模块;
  1. 声光报警模块:由LED灯、蜂鸣器组成,接收核心控制模块的控制指令,当检测参数超标时,执行声光报警动作;
  1. 显示模块:采用OLED屏幕,接收核心控制模块发送的数据,实现主界面与设置界面的切换显示,实时展示检测数据与阈值参数;
  1. WiFi通信模块:采用ESP8266仿真模块,负责读取核心控制模块处理后的水质检测数据,模拟无线数据传输功能,实现数据的远程监测。

2.3 系统控制逻辑设计

本系统采用“电源控制-初始化-数据采集-数据处理-逻辑判断-指令执行”的控制逻辑,各模块协同工作,确保各项功能有序实现,具体控制逻辑如下:

  1. 打开电源开关,系统上电,电源降压模块开始工作,将输入电压转换为3.3V和5V稳定电压,为各模块供电;
  1. 系统进行初始化操作,包括STM32系统时钟初始化、GPIO初始化、ADC初始化、OLED初始化、WiFi模块初始化、DS18B20传感器初始化等,初始化完成后,OLED屏幕显示主界面(界面一),展示系统名称及各项初始检测数据;
  1. 传感器采集模块实时采集各项参数:DS18B20采集水温数据,三个滑动变阻器分别采集模拟PH值、浑浊度、TDS电导率数据,通过ADC接口转换为数字信号,传输给核心控制模块;
  1. 核心控制模块对采集到的数据进行处理与逻辑判断:
            
  • 数据处理:对采集到的模拟参数进行滤波处理,去除异常值,将模拟信号转换为对应的物理量(如PH值0~14、浑浊度0~100NTU、TDS电导率0~1000ppm);
  • 阈值判断:将处理后的检测数据与预设阈值进行对比,若水温超出上下限、PH值不在上下限范围内、浑浊度或TDS电导率超出阈值,触发声光报警模块工作;若参数正常,报警模块处于关闭状态;
  • 按键判断:实时检测按键操作,若按下“设置”键,切换至设置界面(界面二);在设置界面,按下“加”“减”键调整对应参数的阈值;按下“返回”键,退出设置界面,返回主界面;
  1. 核心控制模块将处理后的检测数据、阈值参数发送给OLED显示屏,实时更新显示内容,实现界面切换与数据刷新;
  1. WiFi模块实时读取核心控制模块处理后的各项检测数据,模拟无线数据传输过程,完成数据上传;
  1. 系统持续循环运行,实时采集、处理、显示数据,响应按键操作,执行报警指令,确保各项功能实时实现;关闭电源开关,系统断电,停止工作。

2.4 核心元器件选型(适配Proteus仿真)

根据系统功能需求与控制逻辑,结合Proteus仿真的兼容性、元器件的性价比与稳定性,对各模块核心元器件进行选型,确保系统仿真顺利实现,具体选型如下:

2.4.1 核心控制器选型

选用STM32F103C8T6作为系统核心控制器,该芯片基于ARM Cortex-M3内核,工作频率最高可达72MHz,具备高性能、低功耗、丰富的外设接口(GPIO、ADC、UART、TIM等),能够满足传感器数据采集、按键处理、声光报警控制、OLED显示、WiFi通信等多种功能需求。同时,该芯片在Proteus软件中具有完善的仿真模型,兼容性好,体积小、成本低廉,适合嵌入式便携式设备的仿真与开发,完全符合本系统的设计要求。

2.4.2 电源模块选型

  1. 电源开关:选用普通单刀单掷开关,工作电压5~12V,体积小、操作便捷,用于控制系统电源的通断,在Proteus中可直接调用仿真模型;
  1. 降压模块:选用AMS1117-3.3V稳压芯片,输入电压4.5~12V,输出电压3.3V,输出电流可达1A,能够稳定为STM32芯片、传感器、OLED显示屏、WiFi模块等提供3.3V电压;同时搭配100μF电解电容和0.1μF陶瓷电容,用于滤波,减少电压波动,Proteus中可直接仿真。

2.4.3 传感器选型

  1. 温度传感器:选用DS18B20数字温度传感器,工作电压3.3~5V,采用单总线通信协议,测量范围-55℃~+125℃,精度±0.5℃,响应速度快,接线简单,无需复杂的外围电路,在Proteus中具有成熟的仿真模型,适合水温检测;
  1. 模拟PH传感器:采用10K滑动变阻器模拟,工作电压3.3V,通过调节滑动变阻器的阻值,模拟不同PH值(0~14)对应的模拟信号,通过STM32的ADC接口采集,Proteus中可直接仿真,成本低廉、操作便捷;
  1. 模拟浑浊度传感器:采用10K滑动变阻器模拟,工作电压3.3V,通过调节滑动变阻器的阻值,模拟不同浑浊度(0~100NTU)对应的模拟信号,通过STM32的ADC接口采集,适配Proteus仿真;
  1. 模拟TDS电导率传感器:采用10K滑动变阻器模拟,工作电压3.3V,通过调节滑动变阻器的阻值,模拟不同TDS电导率(0~1000ppm)对应的模拟信号,通过STM32的ADC接口采集,仿真兼容性好。

2.4.4 按键与声光报警模块选型

  1. 按键:选用4个普通轻触按键,工作电压3.3V,按下时导通,松开时断开,分别对应“设置”“加”“减”“返回”功能,接线简单,在Proteus中可直接仿真,响应灵敏;
  1. LED灯:选用普通红色LED灯,工作电压3.3V,通过GPIO引脚控制其亮灭,用于声光报警中的灯光提示,Proteus中仿真简单,成本低廉;
  1. 蜂鸣器:选用有源蜂鸣器,工作电压5V,通过GPIO引脚控制其启停,用于声光报警中的声音提示,Proteus中可直接仿真,发声效果明显,无需额外驱动电路。

2.4.5 显示模块选型

选用12864 OLED屏幕(I2C接口),分辨率为128×64,工作电压3.3V,具有自发光、功耗低、对比度高、显示清晰、响应速度快等优点,无需背光,适合便携式设备使用。I2C接口接线简单,可有效节省STM32的GPIO引脚资源,在Proteus中具有完善的仿真模型,能够实现主界面与设置界面的切换显示,清晰展示各项检测数据与阈值参数。

2.4.6 WiFi通信模块选型

选用ESP8266 WIFI模块(ESP-01)的仿真模型,工作电压3.3V,支持UART通信,可在Proteus中模拟无线网络连接,实现数据读取与上传功能。该模块配置简单,与STM32的UART接口对接便捷,能够实时读取水温、PH值、浑浊度、TDS电导率等检测数据,模拟无线数据传输,满足题目要求的WiFi模块读取相关信息的功能。

2.4.7 其他元器件

包括10K电阻、220Ω电阻、电容、面包板、杜邦线等,用于搭建各模块接口电路、分压电路与滤波电路,确保电路连接可靠、系统稳定运行,所有元器件均选用Proteus中可正常仿真的型号。

第三章 系统硬件电路设计

3.1 硬件电路设计原则

本系统硬件电路设计遵循以下原则,兼顾实用性、兼容性与仿真可行性:一是可靠性,选用性能稳定、Proteus兼容的元器件,设计合理的电路结构,避免信号干扰,确保系统仿真时稳定运行;二是实用性,结合便携式水质检测的实际应用场景,简化电路设计,降低成本,便于仿真搭建与调试;三是兼容性,所有元器件均选用Proteus中可直接调用的模型,确保仿真顺利实现;四是扩展性,预留一定的接口,便于后续增加功能(如数据存储、蓝牙传输等)。

3.2 核心控制模块电路设计

核心控制模块以STM32F103C8T6为核心,主要包括最小系统电路、电源接口电路,是整个系统的“大脑”,负责协调各模块工作,同时确保在Proteus中可正常仿真。

3.2.1 STM32最小系统电路

STM32F103C8T6最小系统电路主要由芯片、晶振电路、复位电路组成,在Proteus中搭建时需确保接线正确,仿真无报错:

  1. 晶振电路:选用8MHz外部晶振,搭配两个22pF电容,连接至芯片的OSC_IN(PA1)和OSC_OUT(PA2)引脚,为芯片提供稳定的时钟信号,通过倍频电路可将时钟频率提升至72MHz,满足系统高速运行需求;在Proteus中,晶振与电容的参数需设置正确,确保时钟信号稳定;
  1. 复位电路:采用上电复位与手动复位相结合的方式,复位引脚(NRST)通过10K电阻接VCC(3.3V),通过0.1μF电容接地,同时并联一个手动复位按键,按下按键时,复位引脚接地,实现芯片复位,确保系统出现异常时可手动重启;Proteus中按键选用普通轻触按键,仿真时可正常触发复位功能。

3.2.2 电源接口电路

STM32F103C8T6芯片的VCC引脚(3.3V)连接至AMS1117-3.3V降压模块的输出端,GND引脚接地,确保芯片获得稳定的3.3V供电。同时,在芯片的VCC与GND引脚之间并联一个0.1μF陶瓷电容,用于滤波,减少电压波动,保护芯片。

3.3 电源模块电路设计

电源模块由电源开关、AMS1117-3.3V降压模块、滤波电容组成,负责为整个系统提供稳定的供电,电路设计如下:

  1. 输入电源:采用9V直流电源作为输入,通过电源接口接入电路,电源开关串联在输入电源与降压模块之间,用于控制系统电源的通断;
  1. 降压电路:AMS1117-3.3V降压芯片的IN引脚接输入电源(9V),OUT引脚输出3.3V稳定电压,GND引脚接地;在IN引脚与GND之间并联一个100μF电解电容和一个0.1μF陶瓷电容,用于滤除输入电压的纹波;在OUT引脚与GND之间并联一个100μF电解电容和一个0.1μF陶瓷电容,用于滤除输出电压的纹波,确保输出电压稳定;
  1. 供电分配:降压模块输出的3.3V电压为STM32芯片、DS18B20传感器、OLED屏幕、WiFi模块、滑动变阻器提供供电;蜂鸣器采用5V供电,直接接入输入电源(经电源开关控制),通过GPIO引脚控制其启停。

在Proteus中,需确保电源开关动作正常,降压模块输出电压稳定,无电压波动,为各模块提供可靠供电。

3.4 传感器采集模块电路设计

传感器采集模块负责采集水温及各项模拟水质参数,根据传感器类型的不同,设计相应的接口电路,确保数据采集准确、稳定,同时适配Proteus仿真,各传感器电路设计如下:

3.4.1 DS18B20温度传感器电路

DS18B20传感器采用单总线通信,电路设计简单,传感器的VCC引脚接3.3V电源,GND引脚接地,DQ(数据引脚)通过10K上拉电阻连接至STM32的GPIO引脚(如PA0),确保通信稳定。STM32通过GPIO引脚模拟单总线时序,发送起始信号、接收传感器响应信号,进而读取水温数据,无需复杂的外围电路。在Proteus中,DS18B20模块可直接调用,接线正确后即可正常采集水温数据。

3.4.2 模拟PH传感器电路(滑动变阻器模拟)

采用10K滑动变阻器模拟PH传感器,电路中,滑动变阻器一端接3.3V电源,另一端通过10K电阻接地,中间节点(信号输出端)连接至STM32的ADC输入引脚(如PA1)。通过调节滑动变阻器的阻值,改变信号输出端的电压,模拟不同PH值对应的模拟信号(电压范围0~3.3V),STM32通过ADC外设将模拟信号转换为数字信号,进而转换为对应的PH值(0~14)。为减少信号干扰,在信号输出端与GND之间并联一个0.1μF电容,用于滤波。在Proteus中,滑动变阻器的阻值可手动调节,模拟不同水质的PH值变化。

3.4.3 模拟浑浊度传感器电路(滑动变阻器模拟)

采用10K滑动变阻器模拟浑浊度传感器,电路设计与模拟PH传感器电路一致:滑动变阻器一端接3.3V电源,另一端通过10K电阻接地,中间节点(信号输出端)连接至STM32的ADC输入引脚(如PA2)。通过调节滑动变阻器的阻值,改变信号输出端的电压(0~3.3V),模拟不同浑浊度(0~100NTU)对应的模拟信号,STM32通过ADC外设将模拟信号转换为数字信号,进而转换为对应的浑浊度值。同样并联0.1μF电容滤波,确保信号稳定,Proteus中可正常仿真。

3.4.4 模拟TDS电导率传感器电路(滑动变阻器模拟)

采用10K滑动变阻器模拟TDS电导率传感器,电路设计与上述两个模拟传感器一致:滑动变阻器一端接3.3V电源,另一端通过10K电阻接地,中间节点(信号输出端)连接至STM32的ADC输入引脚(如PA3)。通过调节滑动变阻器的阻值,改变信号输出端的电压(0~3.3V),模拟不同TDS电导率(0~1000ppm)对应的模拟信号,STM32通过ADC外设将模拟信号转换为数字信号,进而转换为对应的TDS电导率值。并联0.1μF电容滤波,确保数据采集准确,适配Proteus仿真。

3.5 按键控制模块电路设计

按键控制模块由4个普通轻触按键组成,分别对应“设置”“加”“减”“返回”功能,电路设计采用独立按键设计,接线简单,响应灵敏,具体设计如下:

4个按键的一端分别连接至STM32的GPIO引脚(如PB0~PB3),另一端共同接地;同时,每个按键对应的GPIO引脚通过10K上拉电阻连接至3.3V电源,确保按键未按下时,GPIO引脚为高电平;按下按键时,GPIO引脚接地,变为低电平。STM32通过检测GPIO引脚的电平变化,判断按键是否被按下及按下的按键类型,进而执行相应的操作(界面切换、阈值调整)。在Proteus中,轻触按键可正常仿真,按下时导通,松开时断开,响应灵敏。

3.6 声光报警模块电路设计

声光报警模块由红色LED灯和有源蜂鸣器组成,电路设计如下,确保报警功能正常实现,同时适配Proteus仿真:

3.6.1 LED灯控制电路

LED灯采用3.3V供电,电路设计中,LED灯的阳极通过220Ω电阻连接至STM32的GPIO引脚(如PB4),阴极接地。当STM32的GPIO引脚输出高电平时,LED灯亮起;输出低电平时,LED灯熄灭。电路设计简单,在Proteus中可直接仿真,无需额外驱动电路,用于报警时的灯光提示。

3.6.2 蜂鸣器控制电路

有源蜂鸣器采用5V供电,电路设计中,蜂鸣器的VCC引脚接5V电源(经电源开关控制),GND引脚通过NPN三极管(如PNP8550)接地,三极管的基极通过1K电阻连接至STM32的GPIO引脚(如PB5)。当STM32的GPIO引脚输出高电平时,三极管导通,蜂鸣器通电发声;输出低电平时,三极管截止,蜂鸣器停止发声。采用三极管驱动可增大输出电流,确保蜂鸣器正常发声,在Proteus中,三极管与蜂鸣器的仿真模型可正常配合工作,实现报警时的声音提示。

3.7 显示模块电路设计

OLED屏幕采用I2C接口,电路设计简单,屏幕的VCC引脚接3.3V电源,GND引脚接地,SCL引脚连接至STM32的I2C_SCL引脚(如PB6),SDA引脚连接至STM32的I2C_SDA引脚(如PB7)。STM32通过I2C总线向OLED屏幕发送控制指令与显示数据,实现主界面与设置界面的切换显示,实时展示各项检测数据与阈值参数,无需额外的驱动芯片,简化了电路设计。在Proteus中,OLED屏幕的I2C通信需确保接线正确,初始化指令配置合理,方可正常显示数据,实现界面切换。

3.8 WiFi通信模块电路设计

模拟WiFi通信模块采用ESP8266 WIFI模块(ESP-01)的仿真模型,电路设计中,ESP8266模块的VCC引脚接3.3V电源(注意:模块不能直接接5V电源,否则会烧毁),GND引脚接地,TX引脚连接至STM32的USART_RX引脚(如PA4),RX引脚连接至STM32的USART_TX引脚(如PA5),实现STM32与ESP8266模块的UART通信。模块的CH_PD引脚接3.3V电源,确保模块正常工作;RST引脚可连接至STM32的GPIO引脚(如PA6),实现模块的手动复位与重启。在Proteus中,ESP8266模块可模拟无线网络连接,通过UART接口接收STM32发送的水质检测数据,模拟数据上传功能,满足题目要求的WiFi模块读取相关信息的功能。

3.9 整体硬件电路原理图与Proteus仿真搭建要点

结合上述各模块电路设计,绘制系统整体硬件电路原理图(此处可插入原理图),明确各模块之间的接线关系,确保电路连接正确、合理。原理图中包含STM32最小系统、电源模块、传感器采集模块、按键控制模块、声光报警模块、显示模块、WiFi通信模块,各模块通过GPIO、ADC、I2C、UART等接口实现数据交互与控制,整体电路结构清晰、接线简单,便于Proteus仿真搭建。

Proteus仿真搭建要点:一是选用与选型一致的元器件模型,确保所有元器件在Proteus中可正常仿真;二是按照电路原理图正确接线,重点检查电源引脚、通信引脚的接线,避免接反或短路,尤其是ESP8266模块的电源引脚,严禁接5V;三是设置电源参数,确保输入电源为9V,降压模块输出3.3V稳定电压;四是添加仿真探针,便于查看各引脚的电平变化与数据传输情况,方便调试;五是设置滑动变阻器的初始阻值,模拟初始水质参数,确保仿真启动后可正常采集数据。

第四章 系统软件设计

4.1 软件开发环境

本系统软件设计采用Keil MDK5作为开发环境,该环境支持STM32系列微控制器的编程、编译、调试,集成了丰富的库函数与开发工具,能够大幅提高开发效率;编程语言采用C语言,具有可读性强、可移植性好、执行效率高的特点,适合嵌入式系统开发。同时,需要安装STM32F103系列芯片的固件库,用于调用GPIO、ADC、I2C、UART、TIM等外设的库函数,简化编程流程。

此外,Proteus软件用于系统仿真,将Keil MDK5中编译生成的.hex文件导入Proteus仿真电路,即可实现系统功能仿真,验证软件程序的正确性。

4.2 软件设计思想与整体流程

4.2.1 软件设计思想

系统软件采用模块化编程思想,将不同功能模块的代码分开编写,形成独立的子程序,如系统初始化子程序、传感器数据采集子程序、按键处理子程序、阈值设置子程序、声光报警子程序、OLED显示子程序、WiFi数据传输子程序等。这种设计方式使得代码结构清晰、便于调试与维护,同时提高了代码的可复用性,后续可根据需求灵活增加或修改功能模块。

4.2.2 系统整体软件流程

系统上电后,首先进行初始化操作,包括STM32系统时钟初始化、GPIO初始化、ADC初始化、I2C初始化、UART初始化、DS18B20传感器初始化、OLED初始化、WiFi模块初始化等;初始化完成后,OLED屏幕显示主界面(界面一),展示系统名称、各项检测参数名称及初始检测数据;随后系统进入主循环,在主循环中,依次完成传感器数据采集、数据处理、按键检测与处理、阈值判断、声光报警控制、OLED数据显示、WiFi数据传输等操作;系统持续循环运行,确保各项功能实时实现;关闭电源开关,系统断电,程序停止运行。系统主程序流程图如图4-1所示(此处可插入流程图)。

4.3 各功能模块子程序设计

4.3.1 系统初始化子程序

系统初始化子程序是软件运行的基础,负责对系统各外设与模块进行初始化配置,确保各模块能够正常工作,具体初始化内容如下:

  1. 系统时钟初始化:配置STM32的系统时钟为72MHz,为各外设提供稳定的时钟信号;
  1. GPIO初始化:配置各传感器、按键、LED灯、蜂鸣器对应的GPIO引脚为输入或输出模式,设置引脚电平初始状态(如LED灯初始熄灭、蜂鸣器初始停止);
  1. ADC初始化:配置ADC外设,用于采集三个滑动变阻器(模拟PH、浑浊度、TDS电导率传感器)的模拟信号,设置采样频率与精度;
  1. I2C初始化:配置I2C总线通信参数(如通信速率100kHz),用于OLED屏幕的数据交互;
  1. UART初始化:配置USART通信参数(波特率9600bps,数据位8位,停止位1位,无校验位),用于WiFi模块(ESP8266)的数据交互;
  1. DS18B20初始化:初始化DS18B20传感器,确保传感器能够正常采集水温数据;
  1. OLED初始化:发送控制指令,设置OLED屏幕的显示模式、对比度、显示方向等参数,清空屏幕,显示主界面初始内容;
  1. WiFi模块初始化:通过AT指令配置ESP8266模块,使其模拟接入无线网络,准备接收与上传数据;
  1. 阈值初始化:设置各项参数的默认阈值(如水温默认上下限为0℃~50℃、PH值默认上下限为6.5~8.5、浑浊度默认阈值为50NTU、TDS电导率默认阈值为500ppm),存储到对应的变量中。

4.3.2 传感器数据采集子程序

传感器数据采集子程序负责实时采集各传感器的参数,进行数据滤波、转换处理,确保数据准确可靠,然后将处理后的数据存储到相应的变量中,供后续显示、阈值判断与WiFi传输使用。各传感器数据采集流程如下:

  1. DS18B20水温采集:STM32通过GPIO引脚模拟单总线时序,发送起始信号,等待传感器响应,然后读取传感器返回的16位数据,解析出水温值(保留1位小数),进行滤波处理,去除异常数据;
  1. 模拟PH值采集:STM32通过ADC外设采集滑动变阻器(模拟PH传感器)的模拟信号,将模拟信号(0~4095)转换为电压值(0~3.3V),再根据校准参数转换为PH值(0~14,保留1位小数),进行滤波处理;
  1. 模拟浑浊度采集:STM32通过ADC外设采集滑动变阻器(模拟浑浊度传感器)的模拟信号,将模拟信号(0~4095)转换为电压值(0~3.3V),再转换为浑浊度值(0~100NTU,保留整数),进行滤波处理;
  1. 模拟TDS电导率采集:STM32通过ADC外设采集滑动变阻器(模拟TDS电导率传感器)的模拟信号,将模拟信号(0~4095)转换为电压值(0~3.3V),再转换为TDS电导率值(0~1000ppm,保留整数),进行滤波处理。

数据采集采用定时采集方式,每隔1秒采集一次数据,确保数据的实时性与稳定性,采集完成后,将数据更新到对应的全局变量中。

4.3.3 按键处理与阈值设置子程序

按键处理子程序负责实时检测按键操作,根据按键类型执行相应的操作,配合阈值设置子程序实现参数阈值的灵活调整,具体设计如下:

  1. 按键检测:实时检测4个按键(设置、加、减、返回)的电平变化,采用消抖处理(延时10ms),避免误触发,判断按键是否被按下及按下的按键类型;
  1. 界面切换:按下“设置”键,OLED屏幕从主界面(界面一)切换至设置界面(界面二),默认选中第一个设置参数(水温上限);再次按下“设置”键,切换至下一个设置参数(水温下限、PH上限、PH下限、浑浊度阈值、TDS阈值),循环切换;
  1. 阈值调整:在设置界面,按下“加”键,当前选中的参数阈值增加(步长可设置,如水温±1℃、PH±0.1、浑浊度±1NTU、TDS±10ppm);按下“减”键,当前选中的参数阈值减少,同时设置阈值范围限制(如水温0~100℃、PH0~14),避免超出合理范围;
  1. 界面返回:按下“返回”键,退出设置界面,返回主界面,保存当前设置的阈值参数,更新主界面显示的阈值信息。

4.3.4 声光报警子程序

声光报警子程序根据阈值判断结果,控制LED灯与蜂鸣器的运行状态,实现超标报警功能,具体设计如下:

  1. 阈值判断:将传感器采集的实时数据与预设阈值进行对比,判断是否超标:
            
  • 水温超标:水温>水温上限 或 水温<水温下限;
  • PH值超标:PH值>PH上限 或 PH值<PH下限;
  • 浑浊度超标:浑浊度>浑浊度阈值;
  • TDS电导率超标:TDS电导率>TDS阈值;
  1. 报警控制:若任意一项参数超标,控制LED灯亮起、蜂鸣器持续发声;若所有参数均恢复正常,控制LED灯熄灭、蜂鸣器停止发声;报警过程中,可正常进行按键操作与参数设置。

4.3.5 OLED显示子程序

OLED显示子程序负责实现主界面与设置界面的切换显示,实时展示检测数据与阈值参数,显示流程如下:

4.3.5.1 主界面(界面一)显示

  1. 清空OLED屏幕显示缓存,避免数据叠加;
  1. 在屏幕顶部显示系统名称“水质检测系统”;
  1. 在屏幕中部依次显示各项检测参数的名称、实时数据及单位,如“水温:25.5℃”“PH值:7.2”“浑浊度:30NTU”“TDS:200ppm”;
  1. 在屏幕底部显示当前各项参数的阈值,如“水温阈值:0~50℃”“PH阈值:6.5~8.5”;
  1. 刷新屏幕显示,确保数据实时更新,刷新频率与数据采集频率一致(1次/秒)。

4.3.5.2 设置界面(界面二)显示

  1. 清空OLED屏幕显示缓存,在屏幕顶部显示“参数设置”;
  1. 在屏幕中部依次显示可设置的参数名称及当前阈值,如“水温上限:50℃”“水温下限:0℃”“PH上限:8.5”“PH下限:6.5”“浑浊度阈值:50NTU”“TDS阈值:500ppm”;
  1. 用闪烁光标或下划线标记当前选中的设置参数,提示用户当前可调整的参数;
  1. 在屏幕底部显示操作提示,如“设置:切换参数 加/减:调整 返回:退出”;
  1. 实时刷新屏幕,显示调整后的阈值变化,确保设置操作实时反馈。

4.3.6 WiFi数据传输子程序

该子程序负责实现STM32与模拟WiFi模块(ESP8266)的通信,将采集到的各项水质检测数据与阈值参数实时读取并模拟上传,具体功能包括:ESP8266模块配置、数据封装、数据上传。

  1. ESP8266模块配置:STM32通过UART接口向ESP8266发送AT指令,配置模块的模拟无线网络参数(如接入点名称、密码),确保模块处于数据传输状态;
  1. 数据封装:STM32将采集到的水温、PH值、浑浊度、TDS电导率等实时检测数据,以及当前设置的各项阈值参数,按照预设格式(如“水温:25.5℃,PH:7.2,浑浊度:30NTU,TDS:200ppm”)进行封装,便于模拟上传与接收;
  1. 数据上传:STM32通过UART接口将封装后的数据发送给ESP8266模块,模块模拟将数据上传至无线网络,完成模拟WiFi数据传输功能,在Proteus仿真中,可通过串口调试窗口查看上传的数据,验证WiFi模块的功能。

4.4 关键代码片段

为清晰展示系统软件的核心实现逻辑,以下给出部分关键代码片段(简化版),涵盖传感器数据采集、按键处理、阈值设置、OLED显示、WiFi数据传输等核心功能,代码可直接在Keil MDK5中编译,适配Proteus仿真:

4.4.1 传感器数据采集代码

c
#include "ds18b20.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"

// 全局变量存储传感器数据与阈值
float water_temp;       // 水温(℃)
float ph_value;         // PH值
uint16_t turbidity;     // 浑浊度(NTU)
uint16_t tds_value;     // TDS电导率(ppm)
// 阈值变量
float temp_max = 50.0, temp_min = 0.0;    // 水温上下限
float ph_max = 8.5, ph_min = 6.5;        // PH值上下限
uint16_t turbidity_th = 50;              // 浑浊度阈值
uint16_t tds_th = 500;                   // TDS电导率阈值

// 传感器数据采集函数
void Sensor_Collect(void)
{
    // 1. DS18B20水温采集
    water_temp = DS18B20_ReadTemp();  // 读取水温,返回值保留1位小数
    
   

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐