基于STM32F103C8T6的智能饮水机设计与实现

摘要

随着智能家居技术的快速发展和人们生活品质的提升,传统饮水机功能单一、操作繁琐、缺乏智能化管控的弊端日益凸显,无法满足现代用户对便捷、安全、精准的饮水需求。本文设计并实现了一款基于STM32F103C8T6单片机的智能饮水机系统,整合温度监测、水位控制、模式切换、蓝牙通信等多项功能,实现饮水过程的自动化、智能化管控。系统以STM32F103C8T6最小系统板为主控核心,采用防水式DS18B20传感器实时监测水温,通过非接触式液位传感器检测水位状态,结合继电器控制加热片和水泵的启停,搭配OLED显示屏实现参数可视化,并支持按键本地操作与蓝牙APP远程控制双重交互模式。本文详细阐述了系统的总体架构、硬件选型与设计、软件编程与实现,通过系统调试与测试验证了设计的可行性和稳定性。测试结果表明,该智能饮水机能够精准实现水温控制、自动加水、异常报警等功能,操作便捷、响应迅速,满足家庭及办公场景的智能化饮水需求,具有较高的实用价值和推广前景。

关键词:STM32F103C8T6;智能饮水机;温度控制;水位监测;蓝牙通信

Abstract

With the rapid development of smart home technology and the improvement of people's quality of life, the shortcomings of traditional water dispensers, such as single function, cumbersome operation and lack of intelligent management and control, have become increasingly prominent, which can not meet the modern users' demand for convenient, safe and accurate drinking water. This paper designs and implements an intelligent water dispenser system based on STM32F103C8T6 single-chip microcomputer, integrating multiple functions such as temperature monitoring, water level control, mode switching and Bluetooth communication, to realize automatic and intelligent management and control of the drinking water process. The system takes the STM32F103C8T6 minimum system board as the main control core, uses a waterproof DS18B20 sensor to monitor the water temperature in real time, detects the water level status through a non-contact liquid level sensor, controls the start and stop of the heating plate and water pump with a relay, matches the OLED display screen to realize parameter visualization, and supports dual interaction modes of local key operation and Bluetooth APP remote control. This paper elaborates on the overall architecture, hardware selection and design, software programming and implementation of the system, and verifies the feasibility and stability of the design through system debugging and testing. The test results show that the intelligent water dispenser can accurately realize functions such as water temperature control, automatic water addition and abnormal alarm, with convenient operation and rapid response, meeting the intelligent drinking water needs of home and office scenarios, and having high practical value and promotion prospects.

Key words: STM32F103C8T6; Intelligent Water Dispenser; Temperature Control; Water Level Monitoring; Bluetooth Communication

1 绪论

1.1 研究背景与意义

在现代生活中,饮水机作为不可或缺的生活家电,广泛应用于家庭、办公场所、学校等各类场景,为人们提供便捷的饮用水供应。传统饮水机多采用手动控制模式,需人工监测水位、手动开启加热,不仅操作繁琐,还存在水温控制不精准、缺水干烧隐患、能耗过高、无法远程管控等问题,难以适应智能化家居发展的趋势和用户对便捷、安全饮水的高品质需求。

随着嵌入式技术、传感器技术和无线通信技术的不断发展,智能家电逐渐成为市场主流,智能饮水机的研发与应用也成为行业热点。基于STM32系列单片机的智能控制系统,具有性价比高、功耗低、控制精准、扩展性强等优势,能够有效解决传统饮水机的弊端,实现水温、水位的自动监测与控制,以及本地与远程双重操作,提升用户使用体验,同时降低安全隐患和能耗。因此,开展基于STM32F103C8T6的智能饮水机设计研究,具有重要的理论价值和实际应用意义,能够为智能饮水设备的研发提供参考,推动家居设备的智能化升级。

1.2 国内外研究现状

国外智能饮水机技术起步较早,目前已形成较为成熟的产品体系,主要侧重于智能化、人性化和节能环保,部分高端产品集成了水质检测、语音控制、物联网远程管控等功能,能够实现饮水数据的实时上传与分析,满足用户多元化需求,但此类产品价格较高,难以在普通家庭中普及。

国内智能饮水机行业近年来发展迅速,随着STM32等单片机技术的普及,越来越多的企业和科研机构开始研发高性价比的智能饮水机产品。目前国内产品主要聚焦于水温控制、水位监测、自动加水等核心功能,部分产品集成了蓝牙或WiFi通信功能,实现手机APP远程控制,但在控制精度、系统稳定性和功能扩展性方面,与国外高端产品仍存在一定差距。同时,现有产品多针对特定场景设计,功能同质化严重,缺乏个性化定制能力。因此,研发一款功能全面、控制精准、性价比高、操作便捷的智能饮水机,具有广阔的市场空间。

1.3 研究内容与目标

1.3.1 研究内容

本文围绕基于STM32F103C8T6的智能饮水机设计展开研究,具体研究内容如下:

  • 系统总体架构设计:明确系统的核心功能的需求,划分系统模块,设计系统的工作流程和控制逻辑,搭建完整的智能饮水机系统架构。
  • 硬件设计:根据系统功能需求,选型合适的元器件,设计主控模块、温度监测模块、水位监测模块、执行模块、显示模块、按键模块和蓝牙通信模块的硬件电路,绘制电路原理图和PCB板。
  • 软件设计:基于Keil MDK开发环境,编写STM32单片机的控制程序,实现水温采集、水位采集、加热控制、加水控制、模式切换、OLED显示、按键交互和蓝牙通信等功能,优化程序逻辑,提升系统响应速度和稳定性。
  • 系统调试与测试:搭建硬件测试平台,对系统的各项功能进行调试,验证系统的可行性和稳定性,分析测试结果,优化系统性能。

1.3.2 研究目标

本文的研究目标是设计并实现一款功能完善、控制精准、操作便捷、性价比高的智能饮水机,具体目标如下:

  • 实现水温的实时监测与自动控制,温度控制精度达到±0.5℃,支持用户通过按键设置温度上下限,自动模式下实现恒温控制。
  • 实现水位的实时监测与自动加水,无水时触发蜂鸣器报警并自动启动水泵加水,水位达到设定值后自动停止,避免干烧和溢水隐患。
  • 支持自动模式与手动模式切换,手动模式下用户可通过按键直接控制加热和加水功能,满足用户个性化操作需求。
  • 实现OLED显示屏实时显示水温、水位、工作模式等参数,界面清晰、直观,便于用户查看。
  • 实现蓝牙APP通信,支持手机APP接收水温、水位等环境数据,同时可通过APP进行模式切换和手动控制加热、加水操作。
  • 系统运行稳定、响应迅速,按键操作灵敏,蓝牙通信稳定,满足长期使用需求。

1.4 论文结构安排

本文共分为6章,具体结构安排如下:

  • 第1章:绪论。阐述本文的研究背景与意义、国内外研究现状、研究内容与目标,以及论文的结构安排。
  • 第2章:系统总体方案设计。明确系统的功能需求,划分系统模块,设计系统总体架构和工作流程,论证方案的可行性。
  • 第3章:系统硬件设计。介绍系统各元器件的选型依据,设计各模块的硬件电路,绘制电路原理图和PCB板。
  • 第4章:系统软件设计。搭建软件开发环境,编写各模块的控制程序,设计系统主程序和各子程序的流程,实现系统各项功能。
  • 第5章:系统调试与测试。搭建测试平台,对系统的硬件和软件进行调试,测试系统各项功能的性能,分析测试结果。
  • 第6章:总结与展望。总结本文的研究成果,分析系统存在的不足,对未来的改进方向进行展望。

2 系统总体方案设计

2.1 系统功能需求分析

结合用户需求和智能饮水机的应用场景,本文设计的基于STM32F103C8T6的智能饮水机系统,需具备以下核心功能,确保系统的实用性和智能化水平:

  1. 主控功能:以STM32F103C8T6最小系统板作为主控单元,负责接收各传感器的检测数据,处理用户操作指令,控制各执行模块的运行,实现系统的整体管控。
  1. 温度监测与控制功能:采用防水式DS18B20温度传感器实时采集水温数据,自动模式下,当水温低于设定最小值时,自动启动加热片加热,直至水温达到设定最大值时停止加热,实现恒温控制;支持用户通过按键设置温度上下限,满足不同用户的饮水温度需求。
  1. 水位监测与加水控制功能:采用非接触式液位传感器检测水箱水位,自动模式下,当检测到无水状态时,蜂鸣器发出报警信号,同时启动水泵加水;当水位达到低水位时,蜂鸣器停止报警,水泵继续加水,直至水位达到高水位时,水泵停止加水,避免干烧和溢水。
  1. 模式切换功能:支持自动模式与手动模式的切换,用户可通过按键切换工作模式;手动模式下,用户可通过按键直接控制加热片的启停和水泵的加水操作,实现个性化控制。
  1. 显示功能:通过OLED显示屏实时显示当前水温、水位、温度上下限、工作模式等参数,界面清晰、直观,便于用户实时查看系统状态。
  1. 蓝牙通信功能:通过BT04A蓝牙模块与手机APP建立通信连接,手机APP可实时接收系统上传的水温、水位等环境数据,同时用户可通过APP进行模式切换、温度上下限设置,以及手动控制加热和加水操作,实现远程管控。
  1. 报警功能:当水箱无水时,蜂鸣器发出连续报警信号,提醒用户关注水位状态,同时启动自动加水功能,避免干烧隐患;若出现传感器故障、蓝牙通信异常等情况,可通过LED灯和蜂鸣器组合报警,便于用户排查故障。

2.2 系统总体架构设计

本文设计的智能饮水机系统采用模块化设计思想,以STM32F103C8T6单片机为主控核心,将系统划分为7个功能模块,各模块相互协作、各司其职,共同实现系统的各项智能功能。系统总体架构如图2-1所示(此处可插入架构图),具体模块划分如下:

  1. 主控模块:核心为STM32F103C8T6最小系统板,是系统的“大脑”,负责接收各模块的输入信号,进行数据处理和逻辑判断,向各执行模块发送控制指令,协调各模块的工作,确保系统稳定运行。
  1. 温度监测模块:由防水式DS18B20温度传感器组成,负责实时采集水箱内的水温数据,将模拟信号转换为数字信号后传输给主控模块,为水温控制提供数据支撑。
  1. 水位监测模块:由非接触式液位传感器组成,负责实时检测水箱内的水位状态,将水位信号转换为电信号传输给主控模块,实现无水报警和自动加水控制。
  1. 执行模块:由加热片、水泵、继电器、有源蜂鸣器和LED灯组成,其中加热片用于水温加热,水泵用于自动加水,继电器用于控制加热片和水泵的启停(隔离主控电路与大功率执行电路,保护主控芯片),有源蜂鸣器用于异常报警,LED灯用于显示系统工作状态。
  1. 显示模块:由OLED显示屏组成,负责接收主控模块发送的数据,实时显示水温、水位、温度上下限、工作模式等参数,实现系统状态的可视化。
  1. 按键模块:由若干独立按键组成,负责接收用户的操作指令(如模式切换、温度上下限设置、手动加热/加水控制等),将指令传输给主控模块,实现用户与系统的本地交互。
  1. 蓝牙通信模块:由BT04A蓝牙模块组成,负责建立系统与手机APP之间的无线通信连接,实现数据的双向传输(系统向APP上传环境数据,APP向系统下发控制指令),实现远程管控。

2.3 系统工作流程设计

系统上电后,首先进行初始化操作,包括主控模块初始化、传感器初始化、OLED显示屏初始化、蓝牙模块初始化、按键模块初始化等,初始化完成后,系统默认进入自动模式,OLED显示屏显示当前水温、水位、温度上下限等初始参数。系统工作流程如下:

  1. 初始化阶段:系统上电后,STM32F103C8T6单片机对各模块进行初始化,检测各传感器和执行模块是否正常工作,若出现故障,LED灯闪烁,蜂鸣器报警;若正常,进入自动模式,OLED显示屏显示初始参数。
  1. 数据采集阶段:温度传感器和液位传感器实时采集水温、水位数据,将数据传输给主控模块,主控模块对数据进行处理和分析,判断水温、水位是否处于正常范围。
  1. 自动模式控制阶段:
            
  • 水温控制:主控模块将采集到的水温与用户设定的温度上下限进行对比,若水温低于设定最小值,主控模块控制继电器吸合,启动加热片加热;若水温达到设定最大值,主控模块控制继电器断开,停止加热,实现恒温控制。
  • 水位控制:主控模块根据液位传感器采集的水位数据,判断水箱是否无水,若无水,蜂鸣器报警,同时主控模块控制继电器吸合,启动水泵加水;当水位达到低水位时,蜂鸣器停止报警,水泵继续加水;当水位达到高水位时,主控模块控制继电器断开,停止加水。
  1. 模式切换与手动控制阶段:用户可通过按键切换工作模式,当切换至手动模式时,OLED显示屏显示手动模式标识,用户可通过按键控制加热片的启停和水泵的加水操作;再次按下模式切换键,可切换回自动模式。
  1. 蓝牙通信阶段:BT04A蓝牙模块实时与手机APP保持通信,主控模块将采集到的水温、水位、工作模式等数据通过蓝牙传输给手机APP,用户可通过APP查看相关数据;同时,用户可通过APP发送模式切换、温度设置、手动加热/加水等指令,蓝牙模块接收指令后传输给主控模块,主控模块执行相应操作。
  1. 异常处理阶段:当检测到传感器故障、蓝牙通信异常、水位异常(如溢水)等情况时,主控模块控制蜂鸣器报警,LED灯闪烁,同时OLED显示屏显示故障信息,提醒用户排查故障;若故障排除,系统恢复正常工作。

2.4 方案可行性论证

本文设计的基于STM32F103C8T6的智能饮水机系统,方案可行性主要从硬件选型、软件实现、功能适配三个方面进行论证:

  • 硬件选型可行性:STM32F103C8T6单片机性价比高、功耗低,具备丰富的GPIO接口、ADC接口和UART接口,能够满足各模块的连接和控制需求;选用的DS18B20温度传感器、非接触式液位传感器、OLED显示屏、BT04A蓝牙模块等元器件,均为市场上成熟的产品,价格低廉、性能稳定、易于采购和焊接,能够有效降低系统成本,同时保证系统的可靠性。
  • 软件实现可行性:系统软件基于Keil MDK开发环境,采用C语言编程,STM32F103C8T6的开发资料丰富,有成熟的固件库和示例程序,能够快速实现各模块的控制逻辑;蓝牙通信可通过串口通信协议实现,手机APP可采用常用的APP开发工具(如Android Studio)开发,实现数据接收和指令下发,软件开发难度适中,可顺利实现系统各项功能。
  • 功能适配可行性:系统的各项功能均围绕用户需求设计,模块划分清晰,控制逻辑合理,各模块之间的协同工作顺畅;温度控制、水位控制、模式切换、蓝牙通信等功能相互独立又相互关联,能够满足用户的日常使用需求,同时系统具备良好的扩展性,可根据实际需求增加水质检测、语音控制等功能,方案具备较强的实用性和可扩展性。

综上,本系统的设计方案具备较高的可行性,能够实现预设的各项功能,满足用户的智能化饮水需求。

3 系统硬件设计

3.1 硬件设计原则

为确保系统的稳定性、可靠性、实用性和性价比,本文在硬件设计过程中,遵循以下设计原则:

  • 稳定性原则:选用性能稳定、质量可靠的元器件,设计合理的电路结构,避免电路干扰,确保系统能够长期稳定运行,减少故障发生。
  • 性价比原则:在满足系统功能需求的前提下,选用价格低廉、易于采购的元器件,降低系统的整体成本,提高产品的市场竞争力。
  • 便捷性原则:硬件电路设计简洁、清晰,便于焊接、调试和维护;元器件的布局合理,便于后期的升级和扩展。
  • 安全性原则:设计电路时,考虑电气安全,采用继电器隔离主控电路与大功率执行电路(加热片、水泵),避免高压、大电流损坏主控芯片;同时设置报警功能,及时发现和处理异常情况,避免安全隐患。

3.2 主要元器件选型

根据系统功能需求和设计原则,本文选用的主要元器件如下,各元器件的选型依据和参数如下:

元器件名称

型号规格

选型依据

主要参数

主控单片机

STM32F103C8T6

作为系统核心,需具备丰富的外设接口和较强的数据处理能力,性价比高、功耗低,适合智能控制场景

基于ARM Cortex-M3内核,主频72MHz,64KB Flash,20KB SRAM,3个UART接口,1个ADC接口,多个GPIO接口,工作电压3.3V

温度传感器

防水式DS18B20

需实时监测水温,防水设计可避免进水损坏,单总线通信,接线简单,测量精度高

测量范围-55℃~125℃,精度±0.5℃,单总线通信,工作电压3.3V~5V,防水等级IP67

液位传感器

非接触式液位传感器

无需接触水体,避免水垢影响,安装方便,可检测高、低水位和无水状态,响应迅速

工作电压5V,检测距离0~10cm,输出数字信号,响应时间≤10ms,非接触式检测

显示屏

OLED显示屏(0.96英寸)

显示清晰、功耗低、响应快,体积小,适合嵌入式设备,可实时显示系统参数

分辨率128×64,I2C通信,工作电压3.3V,对比度高,可视角度广

加热元件

加热片(12V/50W)

加热功率适中,适合小型饮水机,加热速度快,功耗低,安全性高

工作电压12V,功率50W,加热温度0~100℃,绝缘性能好

加水元件

微型水泵(12V)

体积小、噪音低、功耗低,流量适中,适合自动加水场景,易于控制

工作电压12V,流量1L/min,扬程1.5m,噪音≤30dB

控制元件

继电器(5V)

隔离主控电路与大功率执行电路,保护主控芯片,控制加热片和水泵的启停

工作电压5V,触点容量10A/250VAC,响应时间≤10ms,具备隔离功能

报警元件

有源蜂鸣器(5V)

声音清晰、音量适中,无需外接驱动电路,适合异常报警场景

工作电压5V,音量≥85dB,频率2kHz~4kHz,工作电流≤30mA

状态指示

LED灯(5V)

体积小、功耗低,用于显示系统工作状态(正常、故障、加热、加水)

工作电压5V,电流10~20mA,颜色(红、绿、蓝),发光均匀

蓝牙模块

BT04A蓝牙模块

蓝牙4.0协议,通信稳定,功耗低,体积小,易于与手机APP通信,支持数据双向传输

工作电压3.3V~5V,通信距离10m,支持UART接口,蓝牙4.0协议,低功耗模式

3.3 各模块硬件电路设计

3.3.1 主控模块电路设计

主控模块是系统的核心,由STM32F103C8T6最小系统板组成,主要包括单片机芯片、电源电路、复位电路、晶振电路和下载电路,负责系统的整体控制和数据处理。

电源电路:STM32F103C8T6单片机工作电压为3.3V,因此需要设计5V转3.3V的电源电路,采用AMS1117-3.3稳压芯片,将外接5V电源转换为3.3V稳定电压,为单片机和其他需要3.3V供电的模块(如OLED显示屏、蓝牙模块)供电;同时在电源电路中并联电容,用于滤波,减少电压波动,确保系统稳定运行。

复位电路:采用手动复位和上电复位相结合的方式,当系统出现故障时,可通过手动复位键重启系统;上电复位可确保系统上电后自动进入初始化状态,避免系统紊乱。

晶振电路:采用8MHz外部晶振,通过晶振电路为单片机提供稳定的时钟信号,确保单片机的运算和控制时序准确,晶振两端并联电容,用于稳定晶振频率。

下载电路:采用SWD下载模式,通过下载接口连接电脑,实现程序的下载和调试,便于后期软件修改和优化。

3.3.2 温度监测模块电路设计

温度监测模块由防水式DS18B20温度传感器和相关辅助电路组成,采用单总线通信方式与主控模块连接,接线简单,无需外接AD转换电路,可直接向主控模块传输数字温度信号。

DS18B20的VCC引脚接3.3V电源,GND引脚接地,DQ引脚(数据引脚)通过10KΩ上拉电阻连接到STM32F103C8T6的GPIO引脚(如PA0),上拉电阻用于确保通信的稳定性,避免信号干扰;同时,DS18B20采用防水封装,安装在水箱内部,直接接触水体,实时采集水温数据,传输给主控模块进行处理。

3.3.3 水位监测模块电路设计

水位监测模块由非接触式液位传感器组成,采用数字信号输出,无需AD转换,直接与主控模块的GPIO引脚连接,用于检测水箱的高水位、低水位和无水状态。

非接触式液位传感器的VCC引脚接5V电源,GND引脚接地,OUT引脚(信号输出引脚)连接到STM32F103C8T6的GPIO引脚(如PA1、PA2,分别检测高水位和低水位);传感器安装在水箱外侧,无需接触水体,通过检测水体的电容变化判断水位状态,当水位达到设定位置时,传感器输出低电平,未达到时输出高电平,主控模块通过检测引脚电平变化,判断当前水位状态。

3.3.4 执行模块电路设计

执行模块包括加热片、水泵、继电器、有源蜂鸣器和LED灯,负责执行主控模块下发的控制指令,实现加热、加水、报警和状态指示功能。

  1. 加热片控制电路:加热片工作电压为12V,功率较大,无法直接由单片机GPIO引脚驱动,因此通过5V继电器进行控制。继电器的IN引脚连接到STM32F103C8T6的GPIO引脚(如PB0),VCC引脚接5V电源,GND引脚接地;加热片的一端接12V电源,另一端接继电器的常开端,继电器的公共端接地,当主控模块输出高电平时,继电器吸合,加热片通电加热;输出低电平时,继电器断开,加热片停止加热。
  1. 水泵控制电路:与加热片控制电路类似,水泵工作电压为12V,通过5V继电器进行控制。继电器的IN引脚连接到STM32F103C8T6的GPIO引脚(如PB1),VCC引脚接5V电源,GND引脚接地;水泵的一端接12V电源,另一端接继电器的常开端,继电器的公共端接地,主控模块通过控制GPIO引脚的电平,实现水泵的启停控制。
  1. 蜂鸣器报警电路:有源蜂鸣器工作电压为5V,可直接由单片机GPIO引脚驱动,蜂鸣器的VCC引脚接5V电源,GND引脚通过电阻连接到STM32F103C8T6的GPIO引脚(如PB2),当主控模块输出低电平时,蜂鸣器通电发出报警声;输出高电平时,蜂鸣器停止报警。
  1. LED灯状态指示电路:LED灯工作电压为5V,通过电阻限流后连接到STM32F103C8T6的GPIO引脚(如PB3、PB4、PB5),分别对应系统正常、故障、加热三种状态,当GPIO引脚输出低电平时,LED灯点亮;输出高电平时,LED灯熄灭,便于用户直观了解系统工作状态。

3.3.5 显示模块电路设计

显示模块采用0.96英寸OLED显示屏,采用I2C通信方式与主控模块连接,接线简单、功耗低,可实时显示水温、水位、温度上下限、工作模式等参数。

OLED显示屏的VCC引脚接3.3V电源,GND引脚接地,SDA引脚(数据线)连接到STM32F103C8T6的I2C数据线引脚(如PB6),SCL引脚(时钟线)连接到STM32F103C8T6的I2C时钟线引脚(如PB7);主控模块通过I2C通信协议,向OLED显示屏发送控制指令和显示数据,实现参数的实时显示,界面设计简洁、直观,便于用户查看。

3.3.6 按键模块电路设计

按键模块由4个独立按键组成,分别对应模式切换、温度加、温度减、手动控制(加热/加水),用于实现用户与系统的本地交互,接收用户的操作指令。

每个按键的一端接地,另一端通过10KΩ上拉电阻连接到STM32F103C8T6的GPIO引脚(如PC0、PC1、PC2、PC3),当按键按下时,对应的GPIO引脚检测到低电平;按键松开时,GPIO引脚检测到高电平,主控模块通过检测引脚电平变化,识别用户的操作指令,并执行相应的控制逻辑。同时,为避免按键抖动,在软件中加入消抖处理,确保按键操作的准确性。

3.3.7 蓝牙通信模块电路设计

蓝牙通信模块采用BT04A蓝牙模块,采用UART通信方式与主控模块连接,实现系统与手机APP之间的数据双向传输,支持远程管控。

BT04A蓝牙模块的VCC引脚接3.3V电源,GND引脚接地,TXD引脚(发送端)连接到STM32F103C8T6的UART接收引脚(如PA10),RXD引脚(接收端)连接到STM32F103C8T6的UART发送引脚(如PA9);主控模块通过UART通信协议,向蓝牙模块发送数据(水温、水位等),蓝牙模块将数据无线传输给手机APP;同时,手机APP发送的控制指令通过蓝牙模块接收后,传输给主控模块,主控模块执行相应的操作,实现远程控制。

3.4 整体硬件电路原理图与PCB设计

根据各模块的电路设计,绘制系统整体硬件电路原理图,明确各模块之间的连接关系,确保电路的合理性和稳定性;随后,基于电路原理图,设计PCB板,合理布局元器件,优化布线,避免电路干扰,确保PCB板的焊接便捷性和稳定性。

PCB板设计时,遵循以下原则:主控模块位于PCB板中心位置,传感器模块和执行模块分别位于PCB板两侧,减少信号干扰;电源线和地线尽量粗,避免电流过大导致线路发热;信号线尽量短,减少信号衰减;元器件布局紧凑,合理利用PCB板空间,便于后期焊接和调试。

4 系统软件设计

4.1 软件开发环境搭建

本文系统软件的开发环境如下:

  • 开发工具:Keil MDK5.27,支持STM32系列单片机的程序开发、编译、调试,具备丰富的库函数和调试工具,能够提高开发效率。
  • 编程语言:C语言,简洁、高效、可移植性强,适合嵌入式系统的程序开发,便于程序的修改和优化。
  • 固件库:STM32F10x_StdPeriph_Lib_V3.5.0,包含STM32F103系列单片机的所有外设驱动函数,可直接调用,简化程序开发流程。
  • 调试工具:ST-Link调试器,用于程序的下载和在线调试,可实时查看程序运行状态,排查程序错误。
  • APP开发工具:Android Studio,用于开发手机蓝牙APP,实现与系统的无线通信,接收数据和下发控制指令。

开发环境搭建完成后,创建STM32F103C8T6的项目工程,配置项目参数(如芯片型号、时钟频率等),导入固件库,编写各模块的控制程序,实现系统的各项功能。

4.2 软件总体设计思路

系统软件采用模块化设计思想,与硬件模块相对应,分为主控程序、温度采集与控制程序、水位采集与控制程序、显示程序、按键处理程序、蓝牙通信程序和异常处理程序,各模块程序相互独立,通过函数调用实现协同工作,确保系统的可维护性和可扩展性。

软件总体流程如下:系统上电后,首先执行初始化程序,对各模块进行初始化;初始化完成后,进入主循环,在主循环中,依次执行数据采集(水温、水位)、数据处理、模式判断、功能执行(加热、加水、报警)、显示更新、蓝牙通信等操作;同时,实时监听按键指令和蓝牙指令,根据指令执行相应的控制逻辑;若检测到异常情况,执行异常处理程序,发出报警信号,确保系统安全运行。

4.3 各模块软件程序设计

4.3.1 初始化程序设计

初始化程序是系统上电后执行的第一个程序,负责对各模块进行初始化,确保各模块能够正常工作,初始化内容包括:

  • 主控模块初始化:配置STM32F103C8T6的系统时钟(72MHz),初始化GPIO接口、UART接口、I2C接口、ADC接口等外设,设置中断优先级。
  • 温度传感器初始化:初始化DS18B20温度传感器,发送复位信号,检测传感器是否正常连接,若连接正常,进入温度采集状态;若连接异常,触发故障报警。
  • 水位传感器初始化:初始化非接触式液位传感器,设置引脚为输入模式,检测传感器输出信号,确保传感器正常工作。
  • 显示模块初始化:初始化OLED显示屏,设置显示模式、对比度等参数,清空显示屏,显示初始界面(如系统名称、初始参数)。
  • 蓝牙模块初始化:初始化BT04A蓝牙模块,配置蓝牙名称、波特率(9600bps)等参数,建立蓝牙通信连接,等待手机APP连接。
  • 按键模块初始化:设置按键对应的GPIO引脚为输入模式,开启引脚中断,用于检测按键操作。
  • 执行模块初始化:设置继电器、蜂鸣器、LED灯对应的GPIO引脚为输出模式,初始化执行模块的初始状态(加热片、水泵关闭,蜂鸣器停止报警,LED灯显示系统正常状态)。

4.3.2 温度采集与控制程序设计

温度采集与控制程序主要实现水温的实时采集和自动控制,分为温度采集子程序和温度控制子程序。

温度采集子程序:通过DS18B20温度传感器采集水温数据,采用单总线通信时序,发送读温度指令,接收传感器传输的数字温度信号,将信号转换为实际水温值(℃),并进行滤波处理,去除干扰数据,确保水温数据的准确性;采集周期为100ms,实时更新水温数据,传输给主控模块进行处理。

温度控制子程序:根据用户设定的温度上下限和当前采集到的水温,实现自动加热控制。自动模式下,若当前水温<温度下限,主控模块输出高电平,控制继电器吸合,启动加热片加热,同时LED加热指示灯点亮;若当前水温≥温度上限,主控模块输出低电平,控制继电器断开,停止加热,LED加热指示灯熄灭;手动模式下,用户通过按键控制加热片的启停,忽略自动控制逻辑。同时,将当前水温数据实时传输给显示模块和蓝牙模块,用于显示和远程查看。

4.3.3 水位采集与控制程序设计

水位采集与控制程序主要实现水位的实时采集和自动加水控制,分为水位采集子程序和水位控制子程序。

水位采集子程序:通过非接触式液位传感器采集水位数据,检测高水位、低水位引脚的电平状态,判断当前水位状态(无水、低水位、高水位);采集周期为100ms,实时更新水位数据,传输给主控模块进行处理。

水位控制子程序:自动模式下,若检测到无水状态(低水位和高水位传感器均输出高电平),主控模块控制蜂鸣器报警,同时输出高电平,控制继电器吸合,启动水泵加水,LED加水指示灯点亮;当水位达到低水位(低水位传感器输出低电平),蜂鸣器停止报警,水泵继续加水;当水位达到高水位(高水位传感器输出低电平),主控模块输出低电平,控制继电器断开,停止加水,LED加水指示灯熄灭;手动模式下,用户通过按键控制水泵的启停,忽略自动控制逻辑。同时,将当前水位状态实时传输给显示模块和蓝牙模块,用于显示和远程查看。

4.3.4 显示程序设计

显示程序负责控制OLED显示屏,实时显示系统的各项参数,包括当前水温、水位状态、温度上下限、工作模式(自动/手动)、系统状态(正常/故障)等,界面设计简洁、直观,便于用户查看。

显示程序采用模块化设计,分为界面初始化、参数更新、异常显示三个部分:界面初始化用于设置显示界面的布局(如参数显示位置、字体大小);参数更新用于实时更新水温、水位、温度上下限等参数的显示,更新周期为100ms,与数据采集周期一致;异常显示用于当系统出现故障时,在显示屏上显示故障信息(如传感器故障、蓝牙通信异常),提醒用户排查故障。

4.3.5 按键处理程序设计

按键处理程序负责接收用户的按键操作指令,进行消抖处理,识别按键功能,执行相应的控制逻辑,实现用户与系统的本地交互。

按键处理采用中断触发方式,当用户按下按键时,触发GPIO引脚中断,程序进入中断服务函数,进行消抖处理(延时10ms,再次检测引脚电平,确认按键按下),然后识别按键类型,执行相应的功能:

  • 模式切换键:按下一次,切换工作模式(自动→手动);再按下一次,切换回自动模式,OLED显示屏同步更新模式标识。
  • 温度加键:在自动模式下,按下一次,温度上限增加1℃(范围50℃~95℃);在手动模式下,按下一次,启动加热片加热,再次按下,停止加热。
  • 温度减键:在自动模式下,按下一次,温度下限减少1℃(范围20℃~50℃);在手动模式下,按下一次,启动水泵加水,再次按下,停止加水。
  • 手动控制键:用于手动控制加热和加水的切换,按下一次,切换控制对象(加热→加水),再次按下,切换回加热。

4.3.6 蓝牙通信程序设计

蓝牙通信程序负责实现系统与手机APP之间的无线通信,采用UART通信协议,实现数据的双向传输,分为数据发送子程序和数据接收子程序。

数据发送子程序:将当前水温、水位状态、温度上下限、工作模式等数据,按照预设的通信协议,打包成数据帧,通过UART接口发送给BT04A蓝牙模块,蓝牙模块将数据无线传输给手机APP,供用户查看;发送周期为500ms,确保数据实时更新。

数据接收子程序:通过UART接口接收BT04A蓝牙模块传输的手机APP指令(如模式切换、温度设置、手动加热/加水控制等),解析指令内容,识别指令类型,执行相应的控制逻辑,并将执行结果反馈给手机APP;若接收指令错误或通信异常,触发蓝牙通信故障报警,LED故障指示灯闪烁。

通信协议约定:数据帧格式为“起始位+数据类型+数据内容+校验位+结束位”,其中起始位为0xAA,结束位为0xBB,校验位用于验证数据的准确性,避免数据传输错误。

4.3.7 异常处理程序设计

异常处理程序负责检测系统的异常情况,及时发出报警信号,采取相应的处理措施,避免故障扩大,确保系统安全运行。异常情况主要包括:传感器故障(温度传感器、水位传感器连接异常)、蓝牙通信异常、水位异常(溢水)、加热异常(加热片故障)等。

异常检测:在主循环中,实时检测各模块的工作状态,若检测到异常情况(如温度传感器无响应、水位传感器信号异常、蓝牙通信中断等),触发异常标志位,进入异常处理流程。

异常处理:当检测到异常时,主控模块控制蜂鸣器发出报警声,LED故障指示灯闪烁,OLED显示屏显示故障信息;同时,切断加热片和水泵的电源,停止相关操作,避免安全隐患;若异常排除,系统自动恢复正常工作,报警信号停止。

4.4 主程序设计

主程序是系统软件的核心,负责协调各模块程序的工作,实现系统的整体控制逻辑,主程序流程如下:

  1. 系统上电,执行初始化程序,对各模块进行初始化,若初始化失败,触发故障报警;若初始化成功,进入主循环。
  1. 在主循环中,执行温度采集子程序,采集当前水温数据,进行滤波处理,更新水温参数。
  1. 执行水位采集子程序,采集当前水位状态,更新水位参数。
  1. 判断当前工作模式(自动/手动):
            
  • 自动模式:执行温度控制子程序和水位控制子程序,实现自动加热和自动加水控制。
  • 手动模式:等待用户按键操作或蓝牙指令,执行相应的手动控制逻辑。
  1. 执行显示程序,更新OLED显示屏的显示内容,实时显示当前参数和系统状态。
  1. 执行蓝牙通信程序,发送当前系统参数给手机APP,接收手机APP指令并执行。
  1. 执行异常处理程序,检测系统是否存在异常情况,若存在,执行异常处理流程。
  1. 重复步骤2~6,实现系统的持续运行。

4.5 手机APP设计

手机APP采用Android Studio开发,基于蓝牙4.0协议,实现与BT04A蓝牙模块的无线通信,主要功能包括:蓝牙连接、数据接收与显示、指令下发、参数设置等。

APP界面设计简洁、易用,主要包括三个界面:蓝牙连接界面、数据显示界面、控制界面。蓝牙连接界面用于搜索附近的蓝牙设备,选择BT04A蓝牙模块进行连接;数据显示界面用于实时显示系统上传的水温、水位、工作模式等参数;控制界面用于下发控制指令(模式切换、温度上下限设置、手动加热/加水控制),实现远程管控。

APP与系统的通信采用预设的通信协议,确保数据传输的准确性和稳定性,当APP发送指令时,系统接收并执行指令,同时将执行结果反馈给APP,实现双向交互。

5 系统调试与测试

5.1 调试环境搭建

为验证系统的可行性和稳定性,搭建系统调试平台,调试环境包括:STM32F103C8T6最小系统板、各元器件(传感器、执行器、显示屏等)、焊接好的PCB板、ST-Link调试器、电脑(安装Keil MDK和串口助手)、手机(安装开发好的蓝牙APP)、12V电源、5V电源等。

调试前,检查硬件电路的焊接情况,确保各元器件接线正确、焊接牢固,无虚焊、错焊现象;检查软件程序的编写情况,确保程序无语法错误,各模块函数调用正确;连接调试设备,将ST-Link调试器连接到主控板的下载接口,电脑连接ST-Link,手机打开蓝牙APP,准备进行调试。

5.2 硬件调试

硬件调试主要针对各模块的硬件电路进行调试,验证各模块是否能够正常工作,调试内容和结果如下:

  1. 主控模块调试:给系统上电,通过ST-Link调试器将程序下载到主控芯片,观察主控模块的工作状态,通过串口助手查看初始化信息,确认主控模块能够正常初始化,时钟、外设接口工作正常,无故障报警。
  1. 温度监测模块调试:将防水式DS18B20传感器放入不同温度的水中,通过串口

Logo

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

更多推荐