尧图精选

基于STC51单片机的自动灌溉系统设计与实现

🕒 发布时间:2026/9/19 2:18:51 📁 来源:尧图网络
简介基于STC12C5A60S2单片机的自动灌溉系统设计PDF面向单片机开发初学者、农业自动化方向学习者及电子设计竞赛备赛人员聚焦传统灌溉低效与水资源浪费问题。文档围绕智能灌溉核心需求完整介绍由单片机控制电路、信息采集电路、水泵驱动电路和报警指示电路组成的系统方案并结合LCD1602显示、按键阈值设置以及C语言程序流程图展现从土壤湿度检测到自动启停水泵的实现思路其中还涉及ADC0832数模转换、继电器与三极管驱动、蜂鸣器报警保护等关键环节借助湿度上限与下限值设置系统可在缺水时自动启动灌溉湿度恢复后自动停止实现无人化运行。文件为1个PDF文档仅117KB便于快速查阅目前已有127人学习。除总体设计外文档还包含Keil程序编写与Proteus仿真验证细节及参考文献有助于读者理解软硬件协同设计流程为自主搭建自动灌溉系统或完成课程设计提供参考。相较传统人工灌溉该方案在节水、降低人工成本和提升响应速度方面具有明显优势贴合智能农业应用场景。1. 自动灌溉的控制核心为什么落在 STC51 单片机上土壤干了才浇水听起来是常识但市面上一百多元的“自动浇花器”大多是定时器加水泵每天固定开 10 秒不管土壤实际湿度。真正按墒情决策的系统应该有一个闭环传感器测湿度、单片机做判断、继电器控水泵人在旁边只看 LCD 和按键就行。STC51 单片机正是这个闭环里成本最低、上手最快的控制核心——一块 STC89C52RC 不到三元IO 口够接湿度传感器、继电器和显示模块定时器资源也够做时基调度。这篇文章写给正在做单片机课程设计、准备蓝桥杯单片机赛题或者想把阳台浇水改成自动控制的工程师从硬件选型、电路接线、C 语言状态机一直写到调试时的标定表和继电器波形让这套基于 STC51 单片机的自动灌溉系统设计从原理图变成能稳定跑起来的实物。2. 方案拆解STC51 单片机自动灌溉系统的器件选型与最小系统2.1 为什么是 STC51 而不是 STM32四种主控方案的差异自动灌溉系统的 IO 需求并不高土壤湿度传感器一路模拟量、继电器一路控制量、LCD1602 六根线、三个独立按键合计不超过 15 个 IO。这个规模用 STC51 单片机完全够用而且 51 的准双向 IO 结构让外围电路设计更直接——不需要配置复用功能引脚上电默认就是高电平。主控方案参考成本ADC 资源外围复杂度适合场景STC89C52RC2~4 元无内置需外挂简单直接课程设计、入门项目STM32F103C8T66~10 元内置 12 位 ADC需配置时钟树和复用引脚需要多路模拟量的小型产品ESP3210~15 元内置 12 位 ADC需处理联网协议栈需要远程控制的智能灌溉Arduino Nano15~25 元内置 10 位 ADC开发快但成本偏高快速原型验证STM32 和 ESP32 性能更强但对这个项目来说是浪费。STC51 单片机的外置 ADC 方案反而有个好处ADC0809 的 8 路模拟输入通道可以同时接多个湿度传感器比如一路测土壤、一路测水箱液位并行数据口直接挂在 P1 口上读取时序简单课程设计说明书里也更容易画清数据流。我一般会建议先列一张 IO 分配表把每个引脚用途钉死再画原理图比边画边改快得多。2.2 STC89C52RC 最小系统复位、时钟与电源的 3 个参数51 单片机最小系统只有三件事电源、复位、晶振但每个都有实际参数要求。复位电路用 10kΩ 电阻下拉到 GND、10μF 电解电容上拉到 VCC上电瞬间 RST 保持高电平约 100ms足以让单片机完成内部复位。晶振我建议直接用 11.0592MHz两个 20~30pF 负载电容对地这个频率是为了后面串口调试方便——9600bps 波特率下误差接近零如果用 12MHz 晶振跑串口长时间通信会出现帧错误。电源部分是新手最容易忽略的。STC89C52RC 工作电压 4.0~5.5V如果系统里有 12V 水泵需要用两路电源12V 直接给继电器和水泵5V 给单片机、传感器和 LCD。用 AMS1117-5.0 从 9~12V 降压时要注意压差AMS1117 最小压差约 1V输入不能低于 6V否则输出会掉到 4V 以下。系统上电时先让单片机复位完成再让继电器动作否则 IO 口在复位期间的不确定电平可能误触发水泵。系统初始化代码里第一步就是把所有 IO 口置 1让准双向口进入输入状态void SysInit(void) { P0 0xFF; /* LCD 数据口准双向模式默认高电平 */ P1 0xFF; /* ADC0809 数据口读取前必须置 1 */ P2 0xFF; /* 控制口 */ P3 0xFF; TMOD 0x01; /* 定时器0方式116位 */ TH0 0xDC; /* 10ms 定时初值11.0592MHz */ TL0 0x00; ET0 1; EA 1; TR0 1; }这段初始化的逻辑是P1 口作为 ADC0809 的数据输入口在准双向 IO 结构下必须先写 1 才能正确读外部电平TMOD 配置定时器 0 工作在 16 位定时模式初值 0xDC00 对应 10ms 中断周期这个时基是整个软件调度的心脏。2.3 检测方案对比LM393 数字输出与 ADC 模拟采样的分歧点市面上常见的土壤湿度模块有两种输出AO 模拟输出和 DO 数字输出数字输出由板载 LM393 比较器产生板上电位器决定翻转阈值。DO 方式的问题在于电位器旋钮没有刻度无法精确设定“湿度低于 40% 开启水泵”而且温度漂移后阈值会变。要做出可标定的自动灌溉系统必须用 AO 模拟量。模拟量进入单片机有两条路一是用 STC 系列内置 ADC 的型号如 STC12C5A60S2二是外挂 ADC0809。考虑到不少课程设计指定用 STC89C52RC 或 AT89S52外挂 ADC0809 是更通用的做法。ADC0809 是 8 位 8 通道逐次逼近型 ADC转换时间约 100μs对一个变化缓慢的土壤湿度信号来说完全够用。8 位分辨率下 0~5V 对应 0~255每 LSB 约 19.6mV换算成湿度百分比大概 0.4% 的精度这已经足够判断土壤墒情。3. 硬件设计湿度检测、继电器执行与 LCD1602 人机接线3.1 用方波驱动土壤传感器避免电极极化电阻式土壤湿度传感器由两根金属电极插入土壤构成土壤含水量越高电极间阻抗越低。很多人直接用直流电压长时间加在电极上几个月后电极就会发黑腐蚀——这是电解反应导致的极化现象测量值会越来越漂。常见做法是用方波驱动由单片机 IO 口输出 1kHz 左右的方法在方波正半周期采样、负半周期放电电极上没有持续的直流分量极化速度大幅降低。如果你的传感器模块上自带比较器和 AO 引脚模块内部已经做好了激励电路直接接 ADC 即可。如果是自己用铜箔或探针做的传感器可以在 P1.7 输出 1kHz 方波作为激励源采样时用 ADC 读取传感器分压点电压。需要注意土壤湿度传感器长时间处于潮湿环境电极表面会形成氧化膜建议每季度拆下来用砂纸轻擦一下标定值才能保持稳定。3.2 ADC0809 采样电路与读取程序ADC0809 与 STC89C52RC 的典型接法如下P1 口接 ADC0809 的 D0~D7P2.0~P2.2 接 ADD-A/B/C 选择通道P2.3 接 ALE 和 START 合并的锁存启动信号P2.4 接 OEP3.2 接 EOC用查询方式等待转换完成。参考电压 VRH 接 5V、VRL 接地时钟信号可以由单片机 ALE 引脚分频提供。ADC0809 引脚接单片机引脚说明D0~D7P1.0~P1.7并行数据输出ADD-A/B/CP2.0~P2.2通道选择000 选 IN0ALE / STARTP2.3先锁存地址再启动转换OEP2.4输出使能高电平读取EOCP3.2转换结束标志高电平有效ADC 读取代码采用查询方式逻辑比中断方式更简单sbit ADC_EOC P3^2; sbit ADC_OE P2^4; sbit ADC_ALE P2^3; sbit ADC_START P2^3; unsigned char adc_read(unsigned char ch) { unsigned char val; P2 (P2 0xF8) | (ch 0x07); /* 保留高5位只改通道选择 */ ADC_ALE 1; ADC_ALE 0; /* 锁存地址 */ ADC_START 1; ADC_START 0; /* 启动转换 */ while (ADC_EOC 0); /* 等待转换结束 */ ADC_OE 1; /* 打开输出 */ val P1; ADC_OE 0; /* 关闭输出 */ return val; }这段程序的关键在于ADC0809 的 ALE 和 START 可以接在一起先给一个下降沿锁存通道地址再给一个下降沿启动转换EOC 在转换期间为低电平转换完成后变高程序死等 EOC 变高即可。P2 口使用掩码P2 0xF8是为了避免修改低三位时影响到 P2.3 和 P2.4 的控制位这个细节在系统中有多路外设时特别重要。3.3 继电器驱动水泵三极管、续流二极管与电源隔离水泵是系统里唯一的感性负载驱动电路不能直接拿单片机 IO 口接继电器线圈——STC51 单片机引脚最大输出电流约 20mA而 5V 继电器线圈吸合电流通常需要 30~70mA。常见做法是用 NPN 三极管 S8050 做开关基极经 1kΩ 电阻接 P1.0集电极接继电器线圈一端线圈另一端接 12V发射极接地线圈两端反向并联 1N4007。继电器关断瞬间线圈会产生反向感应电动势如果没有续流二极管这个尖峰电压可能超过 100V直接击穿三极管。1N4007 的阴极接 12V、阳极接集电极关断时给线圈电流提供泄放回路。继电器选型上触点电流至少是水泵额定电流的 2 倍比如水泵工作电流 500mA继电器触点选 10A 的也正常——触点容量大的继电器线圈电流也大要确认三极管能顶住。如果系统里还有电磁阀或直流电机建议在继电器驱动部分加 PC817 光耦隔离单片机侧和功率侧完全分开地功率侧干扰不会通过地线窜进 ADC 基准。光耦输入侧串联 330Ω 电阻限流输出侧驱动三极管基极。这套结构在蓝桥杯单片机赛题和实际产品里都是标准做法。3.4 LCD1602 与按键的接口LCD1602 的 8 根数据线接 P0 口时必须外接 4.7kΩ 上拉排阻因为 P0 口是开漏输出。嫌弃上拉电阻麻烦的话可以把数据线改到 P2 口和 ADC 控制线错开但 P2 口已经被 ADC 占了。我一般在 P0 口加 10kΩ 排阻反正一个排阻 9 脚封装也不占空间。LCD 控制线接法RS 接 P2.5RW 接 P2.6E 接 P2.7。RW 直接接地可以省一根 IO 口但需要保证初始化时序里不读忙标志改用延时等待——LCD1602 写指令周期最长约 37μs延时 50μs 足够。按键用三个独立按键接 P3.3~P3.5对地接法IO 口内部上拉按下时读到低电平。注意 51 的 P3 口内部有上拉可以省略外部上拉电阻。4. 软件核心定时器时基、采样滤波与阈值迟滞判断4.1 定时器 0 做 10ms 时基主循环非阻塞调度自动灌溉的软件不能写成顺序执行的裸奔循环否则 ADC 查询等待、LCD 写入延时会把整个系统卡死。常见做法是定时器 0 产生 10ms 中断作为心跳主循环只做状态判断和任务调用。10ms 时基下按键扫描消抖 20ms、ADC 采样周期 100ms、LCD 刷新周期 200ms、继电器状态判断 100ms所有任务都能找到合适的执行频率。任务执行周期说明按键扫描20ms两次低电平确认消抖ADC 采样100ms每次采 8 组滑动平均LCD 刷新200ms刷新湿度、阈值、泵状态泵控制100ms迟滞比较决定继电器动作任务调度代码的骨架是主循环里查询标志位不在中断里做具体任务——中断里只置标志、清定时器初值具体逻辑全部放主循环。这样即使某个任务耗时较长也不会影响时基精度。volatile unsigned char flag_10ms 0; void Timer0_ISR(void) interrupt 1 { TH0 0xDC; /* 重新装载初值 */ TL0 0x00; flag_10ms 1; /* 置位时基标志 */ } void main(void) { SysInit(); while (1) { if (flag_10ms) { flag_10ms 0; /* 清标志 */ Task_KeyScan(); /* 按键扫描 */ if (tick_100ms 10) /* 100ms 分频 */ { tick_100ms 0; Task_ADC(); Task_Pump(); Task_LCD(); } } } }定时器初始化时选方式 116 位初值 0xDC00。计算过程是11.0592MHz 除以 1212T 模式得到 921.6kHz 计数频率每个计数周期约 1.085μs10ms 需要 9216 个计数65536 减 9216 等于 56320即 0xDC00。如果你用 STC 的 1T 模式初值要重新算这是初次移植代码时最容易踩的坑。4.2 8 点滑动平均滤波与毛刺剔除土壤湿度信号本身变化慢但 ADC0809 的参考电压如果不够干净或者土壤中有小石块导致探针接触电阻突变采样值会出现毛刺。8 点滑动平均是简单的低通滤波器能压住高频抖动但对单点突变值抑制效果有限。更可靠的做法是在滑动平均之前加一个突变判断如果当前值和上一轮平均值的差大于设定阈值比如 50 个 LSB直接丢弃这次采样。#define SAMPLES 8 unsigned int filter_buf[SAMPLES]; unsigned char filter_idx 0; unsigned int adc_filter(unsigned int new_val) { static unsigned int last_avg 0; unsigned long sum 0; unsigned char i; if (last_avg ! 0 (new_val last_avg 50 || new_val last_avg - 50)) { return last_avg; /* 突变值直接丢弃 */ } filter_buf[filter_idx] new_val; filter_idx (filter_idx 1) % SAMPLES; for (i 0; i SAMPLES; i) { sum filter_buf[i]; } last_avg (unsigned int)(sum / SAMPLES); return last_avg; }这个滤波函数的参数里50 这个阈值要根据传感器实际输出范围调整——土壤湿度传感器从干到湿的 AD 值变化通常有 150~200 个 LSB如果阈值设太小会滤掉真实变化。建议先接上传感器串口打印原始 AD 值观察波动幅度再定阈值。滤完波的数据用于显示和阈值判断原始值只在调试时输出。4.3 迟滞比较算法低于 40% 开泵高于 45% 停泵自动灌溉最忌讳的是湿度在阈值附近抖动时继电器频繁吸合释放——继电器触点寿命有限泵电机频繁启停也会发热烧毁。解决方法是给开关控制加迟滞区间开泵阈值和停泵阈值不设成同一个值而是错开一个回差。#define HUM_OPEN 40 /* 湿度低于 40% 时开启水泵 */ #define HUM_CLOSE 45 /* 湿度高于 45% 时关闭水泵 */ bit pump_state 0; void Task_Pump(void) { unsigned char hum Get_Humidity(); if (pump_state 0 hum HUM_OPEN) { pump_state 1; Relay_ON(); } else if (pump_state 1 hum HUM_CLOSE) { pump_state 0; Relay_OFF(); } }执行逻辑是湿度从 60% 逐渐下降到达 40% 时开启水泵水泵浇水后湿度上升但低于 45% 时泵不会停要上升到 45% 以上才关泵。40% 和 45% 之间这 5% 就是回差它保证系统不会在 40% 附近反复切换。回差大小要根据传感器噪声水平设定一般取 5%~10%。如果传感器噪声导致 AD 值波动 3%回差设 5% 就可能还不够此时应加大回差或增强滤波优先优化滤波。4.4 参数掉电保存用 STC 内部 EEPROM 还是 AT24C02用户设定的湿度阈值、水泵工作时间、手动/自动模式这些参数掉电后不能丢。STC89C52RC 内部没有传统意义的 EEPROM但它有 IAP 功能可以在应用编程访问数据 Flash。另一种方案是外挂 AT24C02I2C 接口2Kbit 容量存储 10 个参数绰绰有余。AT24C02 的好处是代码通用换到任何 51 单片机都能用STC 内部 EEPROM 的好处是省一个芯片、少两根 I2C 线。我倾向于用 STC 内部 EEPROM因为 STC-ISP 烧录软件可以在烧录程序时同时写入初始阈值批量调参数不用改代码重新编译。STC 内部 EEPROM 读写要注意扇区结构STC89C52RC 内部 EEPROM 共 4KB以 512 字节为一个扇区。写数据前必须先擦除整个扇区擦除操作会把扇区全部字节置 0xFF然后才能写入目标字节。不能只擦一个字节这是和 AT24C02 最不同的地方。#define IAP_ADDR 0x2000 /* EEPROM 起始地址看具体型号手册 */ void IapEraseSector(unsigned int addr) { IAP_CONTR 0x83; /* 使能 IAP等待参数设为 20MHz 以下 */ IAP_CMD 0x03; /* 扇区擦除命令 */ IAP_ADDRL addr 0xFF; IAP_ADDRH (addr 8) 0xFF; IAP_TRIG 0x5A; /* 触发序列固定顺序 */ IAP_TRIG 0xA5; _nop_(); IAP_CONTR 0x00; /* 关闭 IAP */ }IAP 操作的触发序列必须是 0x5A 后跟 0xA5这是 STC 单片机防止误操作的硬件保护机制。IAP_CONTR 设置 0x83 表示允许 IAP 并使能等待具体值要看芯片工作频率。读写完整流程是读扇区到 SRAM 缓冲区 → 修改缓冲区数据 → 擦除扇区 → 写回整个扇区。如果你只改了 1 个字节就整个扇区擦掉重写注意掉电瞬间会丢失该扇区数据写完后最好做一次读比较校验。5. 进阶应用串口调试、ISP 下载与 IAP 在线升级5.1 STC 的冷启动下载原理与 STC-ISP 使用用过 STC 单片机的都知道一个“怪癖”每次下载程序都要先点下载按钮再给板子断电上电。原因是 STC 单片机没有独立的 SWD 调试接口它把串口下载功能复用在了 P3.0RXD和 P3.1TXD上。上电瞬间芯片内部 BootROM 会检测串口是否收到规定的握手数据流如果 P3.0 上出现特定数据序列就进入 ISP 下载模式否则跳转到用户程序区执行。这个机制带来的直接问题是用户程序不能占用 P3.0/P3.1 做普通 IO 输出因为它们平时是下载通道。实际设计里P3.0/P3.1 接 USB 转 TTL 模块的 TX/RX同时又是串口调试口复位电路上最好加一个手动复位按键方便“冷启动”。新版 STC-ISP 软件支持“AI 在线编程”本质仍是串口握手自动时序只是下载器帮你完成了断电上电动作。电路设计时要在串口 TX 上串一个 1kΩ 电阻防止下载线和外部电路抢电平。5.2 IAP 在线升级BootLoader 与用户程序跳转灌溉系统装在大棚里要升级程序还得拆机取芯片重新烧录非常麻烦。STC51 的 IAP 功能允许在运行状态下对程序 Flash 分区操作把 Flash 分成 BootLoader 区和用户区BootLoader 负责通过串口接收新固件并写入用户区之后跳转到用户程序执行。STC89C52RC 没有中断向量重映射寄存器这是一个关键限制51 的 0003H~0073H 中断入口地址固定在 Flash 最低地址区如果用户程序不在零地址中断向量就错位了。常见做法是 BootLoader 区不放中断向量只做串口接收、Flash 擦写和跳转用户区程序编译时通过链接脚本把中断向量表放到用户区开头跳转前先关闭所有中断。跳转代码只有几行但细节较多typedef void (*AppFunc)(void); void JumpToApp(unsigned int app_addr) { unsigned long sp 0x80; /* 复位后 SP 指向 0x81 */ AppFunc app (AppFunc)(app_addr); EA 0; /* 关中断 */ /* 重设栈指针 */ *((unsigned char data *)0x81) 0x07; app(); /* 跳转到用户区首地址 */ }实际工程里BootLoader 和用户程序各建一个 Keil 工程用户程序从地址 0x1000 开始BootLoader 放在 0x0000。用户程序编译时要修改 Target 选项里的 ROM 起始地址中断向量表也在用户区开头跳转后查表找中断入口。这套“串口升级架构”在量产维护时省下的时间比写 BootLoader 的时间多一个数量级。5.3 串口调试协议帧结构、CRC16 与 printf 重定向调试阶段最需要的是实时看湿度值和继电器状态。串口发裸数据不好解析我一般自定义一个简单的帧协议帧头 0x58 0xA5、设备地址、功能码、数据长度、数据体、CRC16 校验。数据帧用固定格式解析端用状态机逐字节处理收到完整一帧再校验 CRC。帧字段长度示例值说明帧头2 字节0x58 0xA5固定同步字地址1 字节0x01设备地址多机通信用功能码1 字节0x100x10 上报湿度0x20 设置阈值数据长度1 字节0x02后续数据字节数数据体N 字节0x00 0x28湿度值 40%CRC162 字节低字节在前CRC-16/MODBUSCRC 计算用查表法最快但代码多方便移植的按位计算版本 30 行左右108ms 算一帧也没多大负担unsigned int crc16_modbus(unsigned char *data, unsigned char len) { unsigned int crc 0xFFFF; unsigned char i; while (len--) { crc ^ *data; for (i 0; i 8; i) { if (crc 1) { crc (crc 1) ^ 0xA001; } else { crc 1; } } } return crc; }CRC 参数说明初值 0xFFFF多项式 0xA001结果低字节在前发送。上位机用串口助手或 Python pySerial 接收按同一个协议解析。调试串口初始化用 9600bps8 数据位 1 停止位无校验STC89C52RC 的串口 1 工作在方式 1波特率由定时器 1 提供。6. 调试验证方法与最后几个坑6.1 湿度传感器的标定表从 AD 值换算出湿度百分比ADC0809 读到的是 0~255 的原始数字量直接拿这个数做阈值显示没问题但用户想看到的是“当前湿度 60%”。标定不需要精密仪器找一盆干土和一个量杯就行传感器插入干土记录 AD 值每次加 50ml 水搅拌均匀等 1 分钟再记录连续加 5 次得到一组数据。状态加水量(ml)AD 值湿度换算值(%)干土02200微湿5018020湿润10014040潮润15010060饱和泥浆2006080用最简单粗暴的线性插值每 10 个 AD 值约等于 6.25% 湿度。但土壤传感器在干燥端和饱和端都会进入非线性区真正要在控制里用的是中间 40%~60% 这一段两头偏差大不影响自动灌溉决策。把标定表做成 const 数组用查表加线性插值替代公式这样换一个传感器批次也能快速重新标定。6.2 用示波器看继电器开合的波形继电器动作的可靠性不能只看灯亮不亮示波器能直接暴露问题。把探头夹在三极管集电极与 GND 之间用单次触发抓继电器关断瞬间。没有续流二极管时关断尖峰可能到 80V 以上超过 S8050 的 VCEO 极限 25V隔三差五烧三极管就说得通了。装了 1N4007 之后尖峰被钳位在 0.7V波形干净利落。另一个要观察的是继电器触点吸合时的抖动普通继电器触点在闭合瞬间会有 1~5ms 的机械抖动控制器如果直接读取水泵电流反馈信号来判断运行状态需要加软件延时避开抖区。我的习惯是在继电器状态改变后延时 20ms 再读反馈这个时间足够触点稳定.6.3 三个常见故障现象与排查方法故障一接上水泵后单片机频繁复位。这是电源问题水泵启动电流是额定电流的 5~8 倍瞬间把 12V 电源拉垮AMS1117 输入掉到 5V 以下导致单片机掉电。解决方法是继电器触点单独供电水泵电源不要和单片机电源共用一根长导线在继电器电源入口加 470μF 电解电容单片机电源入口再加一个 100μF。故障二LCD 显示湿度值在阈值附近跳变。先看 ADC0809 的参考电压 VRH如果 VRH 直接接 5V而 5V 上有水泵的纹波参考电压会晃换算出来的湿度自然跟着跳。把 VRH 接 TL431 稳压到 2.5V 再分压或者至少加一个 10μF 钽电容滤波同时调大软件滤波的采样次数.故障三按键按一次变成两次。除了软件消抖时间不够还要检查按键到地之间是不是用太长的杜邦线按下时产生了振铃。加 100nF 电容在按键两端软件消抖从 20ms 加到 50ms能解决大部分连击问题。6.4 一个实用的上电自检技巧把系统调到标定模式按住 K1 键上电进入自检流程。LCD 第一行显示当前 AD 值第二行显示继电器状态程序每隔 2 秒自动吸合继电器 1 秒用万用表测水泵端电压是否正常串口同时输出每个通道的原始数据和环境温度如果有 DS18B20 的话。有了这个自检固件现场安装时不用猜传感器有没有接反、继电器有没有烧——按一下 K1 上电所有状态一目了然。标定模式退出方法也简单重新上电不按 K1 即可不占额外按键。自动灌溉系统的调试归根结底是看准两个信号土壤湿度传感器的 AD 值变化是否平滑、继电器开关瞬间的波形是否干净。把这两个信号调到理想状态系统的所有表现——无论是显示湿度、自动开泵还是手动控制——都自然正确。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →