[STM32F1] 基于STM32单片机的自动浇花系统

[复制链接]
9|0
Haizangwang 发表于 2026-9-2 19:19 | 显示全部楼层 |阅读模式
摘要
本设计以STM32F103C8T6单片机为核心控制单元,设计并实现一套集环境光 照检测、土壤湿度检测、按键参数设置、OLED 实时显示、PWM LED 补光、自动水泵浇灌于一体的智能植物养护系统。系统采用模块化硬件架构与分层软件设计,通过 BH1750 数字光照传感器获取环境光照强度,通过电阻式土壤湿度传感器与 ADC 采集土壤湿度信息;用户可通过 4 路独立按键完成光照阈值、湿度阈值的精细与快速调节;系统根据光照强度自动实现 LED 补光灯的无级 PWM 调光,根据土壤湿度自动完成水泵的启停控制,实现植物生长环境的自适应、智能化、无人化管理。硬件部分包括 STM32 最小系统、电源电路、传感器接口电路、按键电路、OLED 显示电路、PWM 驱动电路、水泵驱动电路等;软件部分采用标准库开发,包含定时器中断、IIC 通信、ADC 采集、按键状态机、PWM 输出、自动控制逻辑等模块。经实际测试,系统运行稳定、响应迅速、控制精准,可有效解决人工养护不及时、浇水过量或不足、光照不足等问题,适用于家庭盆栽、小型园艺、室内绿植培育等场景,具有较高的实用价值与推广意义。
关键词:STM32F103C8T6;智能养护;PWM 调光;自动浇水;BH1750;ADC ;按键多级加速

第二章 系统总体方案设计
2.1 系统整体
本系统以STM32F103C8T6单片机作为核心控制单元,系统通过BH1750 数字光照传感器采集环境光照强度,通过电阻式土壤湿度传感器获取土壤水分信息,两路信号分别以 IIC 数字通信与 ADC 模拟采集的方式送入单片机进行处理。单片机根据实时采集的环境参数与用户设定的光照阈值、湿度阈值进行逻辑判断,自动输出控制信号:一方面通过TIM2 定时器输出 PWM 波形驱动 LED  补光灯实现无级调光,另一方面通过 IO 口控制水泵驱动电路完成自动浇灌功能。同时,系统通过0.96 寸 IIC 接口 OLED 屏实时显示光照、湿度、阈值及设备状态,用户可通过四路独立按键完成参数的精细与快速调整。整体方案结构紧凑、功能完整,在无人值守的条件下可稳定实现环境监测、自动补光、自动浇水与本地人机交互,能够为室内植物提供稳定、适宜、智能化的生长环境。

924486a97da5394d66.png

图 2-1 系统原理图

2.2 系统工作流程
系统上电之后,首先进入初始化阶段,依次完成 GPIO、ADC、IIC、定时器、OLED、按键、水泵等外设的初始化配置,确保所有模块进入稳定工作状态。初始化完成后,系统进入主循环,在主循环中持续读取光照传感器与土壤湿度传感器的采集数据,同时扫描按键状态以更新用户设定的光照阈值与湿度阈值。系统根据实时环境参数与设定阈值进行逻辑判断,自动调节 LED 补光灯的 PWM 占空比并控制水泵的启停,同时将所有参数刷新至 OLED 屏幕并通过串口输出调试信息。为保证系统的实时性,定时器 TIM3 每 10ms 触发一次中断,在中断服务函数中完成按键状态机扫描与系统运行指示灯的翻转,使按键响应更加迅速,系统状态指示更加稳定,具体系统流程图如下。

433906a97da4c4a7e6.png

图2-2 系统流程图

第三章 硬件系统设计
3.1 主控芯片:STM32F103C8T6
本系统选用意法半导体公司生产的 STM32F103C8T6 作为主控芯片,该芯片基于 ARM Cortex‑M3 内核,最高工作频率可达 72MHz,具有运算速度快、功耗低、资源丰富、价格经济等特点,广泛应用于智能控制、传感器采集、工业嵌入式等领域。芯片内部集成 64KB Flash 程序存储器与 20KB SRAM 数据存储器,能够满足本系统的程序存储与数据运算需求;拥有三个通用定时器 TIM2、TIM3、TIM4 以及一个高级控制定时器 TIM1,可轻松实现 PWM 输出与定时中断功能;芯片内置两个 IIC 接口、三个 UART 串口、两个 SPI 接口以及多通道 12 位高精度 ADC,能够满足传感器通信、模拟量采集等硬件需求。芯片采用 LQFP48 封装,体积小巧、布线方便,适合小型化智能设备设计。

146446a97da474c6cf.png

图3-1 STM32F103C8T6芯片

3.2 电源电路设计
系统采用 USB 5V 电压供电,通过 AMS1117‑3.3V 线性稳压器将输入电压转换为稳定的 3.3V 电压,为主控芯片与所有外设提供工作电源。为保证电源质量,输入端并联 104 电容以抑制高频噪声,提高稳压芯片的响应速度与输出稳定性。电路中设置电源指示灯,通过 1kΩ 限流电阻与电源相连,可直观指示系统是否正常供电。所有数字电路与模拟电路采用统一地平面设计,有效避免地电位差带来的干扰,提升系统整体稳定性。

298526a97da41a63fc.png

图3-2 稳压电源以及;ED指示

3.3 最小系统电路
最小系统是保证单片机正常运行的基础电路,主要包括启动模式电路、复位电路、外部晶振电路以及电源去耦电路。启动模式电路将 BOOT0 引脚接地,使系统上电后直接从主 Flash 程序区启动。复位电路采用经典的上拉复位设计,NRST 引脚通过 10K 电阻上拉至 3.3V,并连接按键至 GND,按下按键即可实现低电平复位。外部晶振电路使用 8MHz 无源晶振,两端分别并联 22pF 负载电容,为系统提供精确时钟源。此外,每个电源引脚附近均布置 104 去耦电容,有效滤除电源纹波,提高芯片工作的抗干扰能力。

793416a97da3d45207.png

图 3-1 STM32F103C8T6 最小系统板

3.4 BH1750 光照传感器电路
BH1750 是一款数字型光照强度传感器,采用 IIC 通信接口,具有分辨率高、稳定性好、温度漂移小等优点,测量范围可达 1~65535lx,非常适合室内环境光照检测。传感器硬件接口简单,VCC 接 3.3V,GND 接电源地,SDA 与 SCL 分别接至单片机 PB7 与 PB6 引脚,ADDR 引脚接地使器件 IIC 地址固定为 0x46。传感器内部集成高灵敏光电二极管、放大电路与 AD 转换器,可将光照强度直接转换为数字信号,单片机通过 IIC 总线读取 16 位数据并通过公式计算得到实际光照强度值,具有数据稳定、响应速度快、使用简便等特点。

51156a97da35254e7.png

图 3-3 BH1750 实物图

3.5 土壤湿度传感器电路
系统采用电阻式土壤湿度传感器YL-69,其工作原理基于土壤等效电阻随含水率变化的特性:土壤越干燥,等效电阻越大,输出模拟电压越高;土壤越湿润,等效电阻越小,输出电压越低。传感器 VCC 可接 3.3V 或 5V,GND 接公共地,模拟输出端 AO 接入单片机 PA1 引脚,对应 ADC1 通道 1。STM32 内部 12 位 ADC 将 0~3.3V 的模拟信号转换为 0~4095 的数字量,系统通过多次采样、去除极值、求取平均值的方式提高数据稳定性,并最终将采样值映射为 0~99% 的湿度值,使湿度显示更加直观可靠。

550656a97da2f46c51.png

图3-4 YL-69土壤湿度传感器

3.6 按键电路
系统共设计四路独立按键,用于手动调整光照阈值与湿度阈值。所有按键均采用单片机内部上拉输入模式,无需外部上拉电阻,简化硬件电路。按键一端接地,另一端分别接至 PA3、PA4、PA5、PA6,无按键按下时引脚为高电平,按下后变为低电平,单片机通过检测电平变化判断按键动作。四路按键功能明确,PA3 用于增加光照阈值,PA4 用于减少光照阈值,PA5 用于增加湿度阈值,PA6 用于减少湿度阈值,配合软件多级加速算法可实现快速、精准的参数调整。

889866a97da2a06774.png

图 3-5 按键实物图

3.7 OLED 显示电路
显示部分采用 0.96 寸 IIC 接口 OLED 屏,分辨率为 128×64,具有自发光、对比度高、功耗低、视角宽等优点。屏幕 VCC 接 3.3V,GND 接地,SDA 与 SCL 分别与 PB7、PB6 相连,与 BH1750 共用 IIC 总线,简化布线。OLED 屏幕分四行显示系统关键信息,第一行显示实时光照强度,第二行显示光照设定阈值,第三行显示土壤湿度与湿度阈值,第四行显示水泵运行状态,信息完整、布局清晰,便于用户实时观察系统工作状态。

264726a97da249507e.png

图3-6 OLED模块实物

3.8 LED 补光灯 PWM 驱动电路
LED 补光灯由定时器 TIM2 通道 1(PA0)输出 PWM 波进行亮度调节。PA0 引脚配置为复用推挽输出模式,通过限流电阻驱动 LED 灯珠。TIM2 配置为 PWM1 模式,周期为 10ms,频率为 100Hz,自动重装载值为 9999,预分频器为 71,使 PWM 输出平滑稳定。PWM 占空比决定 LED 亮度,占空比越高,LED 点亮时间越长,亮度越高;反之亮度越低。通过软件算法可实现光照强度与 LED 亮度的自动匹配,达到环境越暗灯越亮的补光效果。

969446a97da1fe9893.png

图 3-7 LED灯珠

3.9 水泵驱动电路
水泵采用 5V 直流微型水泵,由5V 继电器 模块作为开关驱动器件,实现单片机对水泵的通断控制。继电器模块内置光耦隔离电路与驱动芯片,可直接由单片机 IO 口驱动:当单片机 IO 口输出高电平时,继电器线圈得电,内部常开触点闭合,水泵接通 5V 电源开始工作;当 IO 口输出低电平时,继电器线圈失电,触点断开,水泵断电停止运行。为抑制继电器触点断开时产生的电弧与反向电动势,模块内部已集成续流二极管与保护电路,可有效避免反向高压击穿单片机与继电器器件,提升电路可靠性与抗干扰能力。整套驱动电路结构简单、隔离性能好、驱动能力强,无需额外设计三极管与 MOS 管驱动电路,可稳定实现土壤湿度低于阈值自动浇水、达到阈值自动停止的控制功能,同时降低硬件设计复杂度,提升系统维护便利性。

707246a97da1a2f35b.png

图 3-8 继电器模块使用说明

3.10 系统运行指示灯
系统运行指示灯使用单片机 PC13 引脚控制,配置为通用推挽输出模式。软件控制引脚每 1 秒翻转一次电平,使 LED 呈现 1 秒闪烁的状态,用于直观指示系统是否正常运行。若程序跑飞或死机,指示灯将保持常亮或常灭,便于调试与故障判断,是嵌入式系统中常用的运行状态指示方式。

238046a97da155383a.png

图 3-9 STM32F103最小系统板的板载指示灯

第四章 软件系统设计
4.1 软件开发环境
本系统采用 Keil MDK‑ARM5 作为开发环境,使用 STM32F10x 标准库进行程序开发,编程语言为 C 语言,具有开发效率高、可读性强、便于移植等优点。程序下载与调试使用 ST‑Link V2 调试器,采用 SWD 下载模式,接线简单、速度快、稳定性高,可满足在线调试、程序烧录、变量观测等需求。

4.2 系统初始化流程
系统上电后首先进行时钟初始化,将系统时钟配置为 72MHz,为所有外设提供稳定时钟。随后依次初始化串口用于调试信息输出,初始化 IIC 接口用于光照传感器与 OLED 通信,初始化 BH1750 传感器使其进入测量模式,初始化 ADC1 用于土壤湿度采集,初始化 TIM2 用于 PWM 输出,初始化 TIM3 用于 10ms 定时中断,同时完成 OLED 清屏、按键 GPIO 配置以及水泵驱动初始化。所有外设初始化完成后,系统进入稳定运行状态。

752606a97da0f65e23.png

图 4-1 系统初始化部分代码

4.3 定时器配置
定时器是本系统实现 PWM 输出与按键扫描的核心外设。TIM3 用于生成 10ms 中断,挂载在 APB1 总线,时钟频率 72MHz,预分频器设置为 71,使计数频率为 1MHz,自动重装载值设为 9999,实现 10ms 中断一次。中断优先级设置为抢占优先级 2、子优先级 2,在中断内执行按键状态机扫描与运行灯闪烁,保证系统实时性。TIM2 用于生成 PWM 信号,同样配置为 72MHz 时钟,预分频 71,重装载值 9999,工作在 PWM1 模式,通道 1 使能输出,通过修改比较值即可改变 LED 亮度。

348996a97da09dd10d.png

图 4-2 定时器配置部分代码

4.4 光照采集程序
BH1750 数字光照传感器的数据采集通过IIC(Inter-Integrated Circuit)串行通信总线实现。
IIC 是一种半双工、同步、多主机的串行通信协议,仅需 SDA 串行数据线与 SCL 串行时钟线即可完成设备间的数据交互,具有接线简洁、通信稳定、占用 IO 资源少等特点,非常适合短距离、低速率的传感器数据传输。

32546a97da04a1787.png

图 4-3 IIC通讯接线
BH1750 传感器内部集成光电二极管、放大电路、AD 转换电路与数字处理单元,能够将光照强度转换为标准数字信号输出,其测量范围宽、精度高、温度漂移小,可稳定输出 1~65535 lx 范围内的光照数据。在实际工作过程中,单片机作为 IIC 主机,BH1750 作为从机,通信流程严格遵循 IIC 协议时序。系统首先向传感器发送起始信号,随后发送设备地址与写指令,等待从机应答后,写入一次性高精度测量指令,传感器接收到指令后自动启动光照转换与 AD 采样,待转换完成后,单片机再次发起 IIC 通信,连续读取传感器返回的 16 位原始数据。单片机将读取到的高 8 位与低 8 位数据进行组合,并按照公式 光照强度(lx)= 原始数据 / 1.2 计算得到实际光照值,最终获得单位为勒克斯(lx)的标准光照强度。

479236a97d9fd47d93.png

图 4-4 通过IIC读取BH1750数值

4.5 土壤湿度采集程序
土壤湿度通过 ADC 多次采样获取,系统连续采集 40 次数据,去掉最大值与最小值后求取平均值,有效降低噪声干扰。将得到的 ADC 值通过公式转换为 0~99% 的湿度值,使显示更加直观,判断更加准确。

702196a97d9f66680c.png

图 4-5 ADC参数配置

4.6 按键多级加速驱动
按键驱动采用有限状态机(Finite State Machine, FSM) 机制实现,通过状态跳转的方式对按键行为进行精细化处理,可有效避免传统查询式按键检测易出现的抖动、误触发、响应延迟等问题,显著提升系统运行的稳定性与按键操作的流畅度。系统共设计四路独立按键,分别用于光照阈值与湿度阈值的增减调节,按键均配置为内部上拉输入模式,默认保持高电平,按下时为低电平有效。

180736a97d9f0bae8a.png

图 4-6 按键状态机部分代码

为保证按键检测可靠性,驱动程序将整个按键响应过程划分为空闲状态、按键确认状态、长按保持状态三个稳定状态,并通过定时器 TIM3 每 10ms 中断扫描一次按键状态,实现非阻塞式实时检测。在空闲状态时,系统持续监测按键电平,若检测到连续低电平,则进入按键确认状态,完成80ms 软件消抖判断,排除机械抖动干扰。消抖完成后,若确认按键仍处于按下状态,则判定为有效触发,进入长按保持状态;若按键松开,则判定为一次短按事件,执行单次参数调整。
在长按保持状态中,系统采用多级步进加速算法,根据长按时间自动提升调节速度,实现快速与精细调节兼顾。具体策略为:连续触发前 10 次,每次调整 1 个单位;连续触发 11~20 次,每次调整 10 个单位;连续触发 21~30 次,每次调整 100 个单位;超过 30 次后,每次调整 1000 个单位。状态机在整个过程中实时监测按键是否松开,一旦检测到按键释放,立即跳转回空闲状态,完成一次完整按键流程。

974146a97d9e99edf5.png

图 4-6 不同按键事件回调绑定
通过状态机管理,系统可精准区分短按微调与长按快调,无需占用主循环大量资源,响应迅速、判断准确、逻辑清晰,既满足用户对阈值精细设置的需求,又支持大范围参数快速调整,大幅提升了人机交互的便捷性与舒适度。

4.7 LED PWM 调光程序
LED 调光采用线性控制算法,当光照强度低于设定阈值时启动补光,光照越低,PWM 占空比越高,LED 越亮;当光照强度高于或等于阈值时,LED 自动关闭。整套逻辑使补光更加自然、柔和,不会出现闪烁或突变。

794446a97d9e36c48c.png

图 4-7 PWM占空比参数设置代码

4.8 水泵自动控制程序
水泵控制逻辑简单可靠,当土壤湿度低于设定阈值时,自动启动水泵;当湿度达到或超过阈值时,立即停止水泵,有效避免土壤过干或过湿,实现精准自动浇灌。

823106a97d9dcec5da.png

图 4-7 水泵开关控制代码

4.9 OLED 显示驱动
OLED 显示模块采用SSD1306驱动芯片,通过IIC 串行总线与单片机通信。该模块为 0.96 寸、分辨率 128×64 的自发光显示屏,功耗低、对比度高、响应速度快,适合室内环境参数显示。
系统通过 IIC 接口向 OLED 发送指令与显示数据,实现清屏、ASCII 字符串显示、十进制数字显示等基础功能,并按照固定帧格式完成光照强度、湿度数值、阈值参数及水泵运行状态的界面布局。为保证显示稳定且不占用过多系统资源,程序采用100ms 定时刷新机制,既避免频繁刷新造成屏幕闪烁,又能保证参数变化实时可见,整体显示清晰流畅、界面直观简洁,可满足人机交互过程中的信息查看需求。

153356a97d9d583866.png

图 4-7 OLED显示代码

开源地址
https://github.com/zhourj20210324/STM32_Light_Humi_Control.git


————————————————
版权声明:本文为CSDN博主「Wassuh0324」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_75034595/article/details/159834642

您需要登录后才可以回帖 登录 | 注册

本版积分规则

230

主题

613

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0