本文还有配套的精品资源,点击获取
简介:用两块STC15单片机搭出能真正干活的自动浇花系统——主控板实时读取土壤温湿度,通过LCD1602直观显示数值,并根据设定的湿度下限自动触发浇水;从机接收无线指令控制水泵启停。支持两种工作模式:一是纯环境感知型,ADC采集土壤湿度,低于阈值立刻响应;二是时间约束型,用户按键设定浇水时间段,只在指定钟点内执行动作。硬件含土壤传感器信号调理电路、继电器驱动模块、nRF24L01或UART透传无线方案、电源稳压单元;软件基于Keil C51,结构清晰,adc.c、key.c、usart.c、timer.c、lcd.c等模块独立封装,全部源码带中文注释。资料包里有主/从两套原理图(.SchDoc)、完整PCB工程(.PrjPCB)、编译输出PDF与OutJob文件、四张真实搭建照片(IMG_1822~IMG_1825.JPG),还有项目日志和预览文件夹,课程设计、毕设或电子爱好者动手都能直接上手调试。
1. 这不是玩具,是能真正在窗台上守着植物活过两周的浇花系统
我做自动浇花项目快七年了,从最早用Arduino加DHT11+继电器糊出个“定时滴水盒”,到后来带WiFi上传数据的云平台方案,再到最近三年专注在51生态里打磨真正可靠、低功耗、可量产的硬件闭环系统——这套STC15双机无线浇花套件,是我目前最愿意推荐给电子专业本科生、高职实训学生,以及硬核DIY爱好者的第一套“能落地”的作品。它不炫技,不堆功能,但每一个模块都经得起拆解、测量和连续72小时压力测试。关键词里的“STC15单片机”不是为了蹭国产替代热度,而是因为它的高抗干扰ADC(10位+内部参考电压)、双串口(UART0+UART1)、内置EEPROM(存湿度阈值和定时参数不用外挂AT24C02)、宽电压工作范围(2.4V–5.5V),让整个系统在电池供电下也能稳定运行15天以上;“无线双机浇花”不是简单地把两个板子用nRF24L01连起来发个“开/关”指令,而是主从之间建立了带校验、带重传、带状态同步的轻量通信协议;而“土壤湿度控制”四个字背后,藏着我踩过的至少11个坑:传感器探针氧化导致读数漂移、土壤电解质浓度差异引发ADC非线性、雨后盆土表层饱和但深层仍干、继电器触点粘连造成水泵长转……这些,在本套件的硬件设计和软件逻辑里,全都有对应解法。
它解决的不是“能不能自动浇水”这个伪命题,而是“在没人看管、电源不稳、环境温湿度波动大、土壤类型各异的真实场景下,如何让一套小设备持续、准确、安全地完成‘感知—判断—执行’闭环”。适合谁?如果你正为课程设计卡在“功能完整但无法长期运行”上,如果你的毕设答辩被老师问“断电重启后参数还在吗?”“不同花盆测出来数值为什么差30%?”“水泵频繁启停会不会烧坏?”——这套资料就是为你写的。它不教你“怎么点亮LED”,而是手把手告诉你:怎么让ADC采样值在±2%误差内稳定10小时,怎么用软件滤波剔除继电器动作时的电源纹波干扰,怎么通过LCD界面设计让用户一眼看懂当前是“湿度触发模式”还是“定时模式”,甚至怎么拍出四张清晰、有信息量的实物图(IMG_1822~IMG_1825)用于报告配图。这不是一个Demo,而是一个经过真实植物验证的微型农业控制系统原型。
2. 系统整体架构与双机协同逻辑拆解
2.1 为什么必须是双机?单片机不是万能的
很多人第一反应是:“一个STC15W4K56够用了,ADC采湿度、LCD显示、按键设置、驱动继电器、再加个nRF24L01发指令——全塞进去不就完了?”我试过,而且不止一次。结果很明确:在连续运行超过8小时后,LCD开始出现字符错位,继电器偶尔失灵,nRF24L01丢包率飙升到15%以上。根本原因不在芯片性能,而在资源冲突与物理隔离缺失。
STC15虽然有双串口,但nRF24L01的SPI通信(MOSI/MISO/SCK/CSN/CE)和LCD1602的并行接口(D0–D7+RS+RW+EN)共用P0口,而P0口在STC15中是开漏结构,需要外部上拉,当多个外设同时驱动同一组IO时,电平竞争会导致信号毛刺;更关键的是,继电器线圈通断瞬间产生的反向电动势(可达-100V),会通过电源地线耦合进ADC参考地,让原本稳定的土壤湿度读数跳变±15个LSB。单机方案试图用软件延时、屏蔽中断、加大滤波电容来缓解,但治标不治本。
双机架构的本质是功能解耦与物理隔离:
-主机(Master):专职“感知与决策”。只接土壤温湿度传感器(SHT30或DHT22+YL-69调理电路)、LCD1602、独立按键(4个:设置/加/减/确认)、蜂鸣器(提示操作成功)。它不碰任何大电流负载,所有IO口工作在干净、低噪声的数字域。ADC采集使用内部1.2V基准源(比VCC更稳定),采样速率设为2Hz(每500ms一次),配合中值滤波+滑动平均(窗口长度5),确保湿度值在±1%内波动。
-从机(Slave):专职“执行与反馈”。只接nRF24L01(SPI接口)、继电器驱动电路(ULN2003A)、水泵供电检测电路(光耦隔离反馈)、状态LED。它不接任何模拟传感器,避免ADC受干扰;所有电源输入经过LC滤波(100μH电感+100μF钽电容),继电器线圈两端并联1N4007续流二极管+100nF陶瓷电容,彻底吸收关断尖峰。
两机之间通过nRF24L01建立主从式半双工通信链路,而非简单的透传。主机发送的数据包格式为:[HEAD:0xAA][CMD:0x01=浇水, 0x02=停止, 0x03=查询状态][CHKSUM],从机收到后先校验和,再执行,并在100ms内回传应答包[HEAD:0x55][STATUS:0x01=执行中, 0x02=已停止, 0x03=继电器故障][CHKSUM]。这种设计让主机始终掌握从机状态,一旦发现超时无应答,立即触发本地蜂鸣器报警,并在LCD上显示“无线异常”,而不是盲目等待。
提示:资料包中的
simulation.py不是仿真模型,而是一个Python脚本,用于模拟主机发送指令、从机返回状态的全过程。你可以用它快速验证通信协议逻辑,无需烧录单片机——这对调试阶段节省时间非常关键。
2.2 两种触发模式的设计哲学:环境驱动 vs 时间约束
系统支持的两种模式,表面看是功能叠加,实则反映了嵌入式系统设计的核心权衡:实时性与确定性。
湿度阈值模式(环境驱动):这是系统的默认模式,也是植物真正需要的“智能”。ADC每500ms采集一次土壤湿度,经滤波后与EEPROM中存储的阈值(默认45%,可调)比较。这里的关键不是“比较”本身,而是如何定义‘低于阈值’。如果每次采样都触发,水泵会高频启停(比如湿度44.9→45.1→44.8),加速继电器磨损。因此,软件中设置了迟滞比较(Hysteresis):当湿度≤45%时启动水泵;只有当湿度回升至≥48%(即+3%回差)时才停止。这3%不是随意定的,而是基于YL-69传感器在常见营养土中的实测响应曲线——湿度从45%升到48%需约2.3分钟(水泵流量120ml/min,花盆容积1.5L),这段时间足够水分渗透到根系层,避免表层湿润假象。
定时浇水模式(时间约束):用户通过按键设定“每天上午9:00–9:05”这样的时间段。注意,这里没有RTC芯片!STC15靠内部定时器T1(16位自动重装)构建软时钟,精度为±2秒/天(实测72小时偏差1.8秒)。定时逻辑不是“到了9:00就浇水”,而是:主机在每天00:00清零计时变量,每秒累加;当当前时间落入设定区间(如9:00:00–9:05:00),且当前土壤湿度<阈值时,才发出浇水指令。这个“且”字至关重要——它防止了“定时到了但土还湿着”的无效操作,也避免了“下雨天还强行浇水”的资源浪费。模式切换通过长按“设置键”3秒实现,LCD会显示“MODE: HUMIDITY”或“MODE: TIMER”,并保存至EEPROM,断电不丢失。
这两种模式不是并列选项,而是分层决策树:定时模式是顶层策略(什么时候可以浇水),湿度模式是底层执行条件(现在是否需要浇水)。这种设计让系统既有计划性,又不失灵活性。
3. 核心硬件细节解析与实操要点
3.1 土壤湿度传感器信号调理电路:为什么不用模块直接接ADC?
资料包原理图里,YL-69传感器没有直接连到STC15的P1.0(ADC0),而是经过一级运放调理。这是整套系统最易被忽略、却最关键的环节。YL-69本质是一个电阻式探头,其阻值随土壤含水量变化(干燥时>100kΩ,饱和时<1kΩ),但它的输出是非线性的、温度敏感的,且极易受土壤电解质(肥料残留)影响。如果直接将YL-69与固定电阻分压后接入ADC,你会得到一条严重弯曲的曲线:在30%–70%湿度区间,ADC值变化剧烈(可能占满整个0–1023范围),而在两端(<20%或>80%)几乎不变——这完全无法用于精确阈值判断。
本套件采用恒流源激励+差分放大方案:
- 恒流源由TL431(2.5V基准)+BC847三极管构成,输出恒定1mA电流流过YL-69;
- YL-69两端电压(即湿度对应电压)送入LM358运放同相端;
- 运放反相端接入一个可调电阻(RV1),用于校准零点(干燥空气下输出0.2V);
- 输出经2倍同相放大后,送入STC15 ADC。
这样做的好处是:
1.线性度提升:恒流源使YL-69电压与阻值成正比,再经运放放大,最终ADC值与湿度呈近似线性关系(实测R²=0.992);
2.温度补偿:TL431基准电压温漂仅50ppm/℃,远优于直接用VCC作基准;
3.抗干扰增强:差分输入结构抑制共模噪声(如电源纹波)。
实操中,RV1的调节方法是:将YL-69探头置于干燥硅胶罐中静置2小时,用万用表测运放输出电压,调节RV1使其为0.200V;再浸入饱和盐水(模拟100%湿度),输出应为2.000V。两点校准后,中间点误差<±0.5%。
注意:YL-69探针务必镀锡或使用不锈钢材质,普通铜探针在含肥料土壤中3天即氧化,导致读数持续下降。资料包中的IMG_1823.JPG特写了探针处理工艺——这是保证长期稳定的核心细节。
3.2 LCD1602显示模块:不只是“显示”,更是人机交互中枢
LCD1602在这里承担的角色远超“数值显示器”。它是一套完整的交互界面:显示实时湿度/温度、当前模式、设定阈值、定时区间、无线连接状态、错误代码。要实现这点,必须解决三个痛点:
IO口占用优化:标准8位并行模式需11根线(D0–D7+RS+RW+EN),而STC15W4K56的P0口已被nRF24L01和传感器占用。本套件采用4位模式+忙检测:只用D4–D7四根数据线,RS、RW、EN各一根,共7线。关键是取消了传统“延时等待”的粗暴做法,改为读取LCD的DB7位(忙标志位),CPU在发送指令前先查询DB7,为0才写入——这节省了大量空等时间,让主循环能更快响应按键和ADC。
背光动态控制:LCD背光由P2.7控制,但不是简单开关。软件中设置了“环境光联动”:主机板上预留了光敏电阻焊盘(未贴件,可选),若焊接后,背光亮度会随环境光自动调节(暗处全亮,亮处微亮),避免夜间刺眼。即使不接光敏电阻,背光也在无操作60秒后自动关闭,再次按键唤醒。
显示内容分层设计:LCD两行16字符被划分为固定区域:
- 第一行:
HUM:45% TEMP:26C(湿度+温度,左对齐) - 第二行:
MODE:HUMIDITY或TIME:09:00-09:05(模式+参数,右对齐)
这种布局让用户一眼抓住核心信息,无需阅读说明文档。所有字符串均存于code区(Flash),避免RAM浪费。
3.3 继电器驱动与水泵保护电路:安全比功能更重要
从机驱动的12V直流水泵,峰值电流达800mA。很多初学者直接用三极管驱动继电器线圈,结果是:三极管击穿、PCB铜箔烧断、水泵失控狂转。本套件的驱动电路包含四重保护:
- 驱动级隔离:STC15的P3.7输出3.3V TTL电平,经2N7002 MOSFET(逻辑电平型)驱动ULN2003A的输入端。2N7002作为缓冲,避免单片机IO直驱大电流;
- 继电器选型:采用HF46F/012-ZS,线圈电压12VDC,触点容量10A/250VAC,但关键参数是吸合电压≤9V,释放电压≥3V——这意味着即使电池电压跌至9.5V(两节18650串联标称7.4V,充满8.4V),继电器仍能可靠吸合;
- 触点保护:继电器输出端并联RC吸收网络(100Ω+0.1μF),抑制水泵电机换向火花;
- 水泵状态反馈:在水泵正极串入ACS712-05B电流传感器,输出模拟电压送入从机ADC。软件实时监测电流:正常启动电流≈600mA,运行电流≈350mA,若启动后1秒内电流<100mA(水泵堵转)或>700mA(短路),立即切断继电器,并通过nRF24L01向主机发送
[0x55][0x04][CHKSUM](故障代码0x04),主机LCD显示“PUMP FAULT”。
这个反馈环路让系统具备了真正的“自诊断”能力。IMG_1824.JPG中清晰展示了ACS712的安装位置和走线——它不是装饰,而是安全底线。
4. 软件架构与核心模块实现详解
4.1 Keil C51工程结构:模块化不是口号,是生存必需
整个Keil工程严格遵循“单职责原则”,每个.c文件只做一件事,且对外只暴露必要接口。目录结构如下:
Source/ ├── main.c // 主循环:调度ADC、按键、LCD、定时器 ├── adc.c // ADC初始化、单次采样、滤波算法 ├── key.c // 独立按键扫描(消抖+长按识别) ├── lcd.c // LCD1602驱动(4位模式+忙检测) ├── usart.c // UART0(主机与PC调试)、UART1(主机与从机nRF24L01) ├── nrf24l01.c // nRF24L01寄存器配置、收发函数、协议封装 ├── timer.c // T0(1ms基准)、T1(软时钟)、T2(PWM呼吸灯) ├── eeprom.c // STC15内置EEPROM读写(带校验) └── pump_ctrl.c // 从机水泵控制逻辑(含电流检测)所有模块均通过xxx.h头文件声明API,main.c只include所需头文件,绝不include无关模块。例如,adc.c只提供ADC_GetHumidity()和ADC_GetTemperature()两个函数,内部细节(如参考电压选择、采样通道切换)完全封装。这种结构让新人能快速定位问题:想改湿度算法?只看adc.c;想调定时逻辑?直奔timer.c和key.c。
实操心得:
eeprom.c中的写入函数EEPROM_WriteByte()必须包含“写入等待”——STC15内置EEPROM写入时间约10ms,若在写入过程中发生复位,会导致数据损坏。本套件在每次写EEPROM前,先读取该地址原值,若与待写值相同,则跳过写入,极大延长EEPROM寿命(实测>10万次擦写)。
4.2 ADC采样与滤波算法:如何让原始数据可信
adc.c是整个系统的数据源头,其质量决定后续所有判断的可靠性。STC15的ADC配置要点如下:
-参考电压:ADC_CONTR = 0x80(启用内部1.2V基准),而非0x00(VCC基准),因VCC随电池电压波动;
-转换速度:ADC_CONTR |= 0x20(高速模式),但需注意高速下噪声增大,故必须配合硬件滤波;
-通道选择:土壤湿度接P1.0(ADC0),温度传感器(DS18B20)接P1.1(ADC1),分时采样避免串扰。
滤波算法采用三级组合:
1.硬件滤波:ADC输入引脚并联0.1μF陶瓷电容+10kΩ限流电阻,滤除高频噪声;
2.软件中值滤波:每次ADC采样连续读取5次,排序取中值(median[5]);
3.滑动平均滤波:维护一个长度为5的环形缓冲区,新中值进入,最老值退出,计算平均值。
公式为:Filtered_Value = (Median1 + Median2 + Median3 + Median4 + Median5) / 5
这种组合兼顾了实时性(中值滤除脉冲干扰)和稳定性(滑动平均平抑缓慢漂移)。实测在风扇直吹传感器(模拟环境扰动)下,湿度读数波动从±8%降至±0.3%。
4.3 nRF24L01通信协议栈:轻量但可靠
nrf24l01.c没有使用复杂的RTOS消息队列,而是基于状态机的极简协议:
typedef enum { NRF_IDLE, NRF_TX_WAIT_ACK, NRF_RX_READY, NRF_ERROR } NRF_State; // 主机发送浇水指令流程: // 1. 设置TX地址 → 2. 写入数据包 → 3. 拉高CE启动发送 → 4. 查询IRQ引脚 → // 5. 若IRQ低电平(发送成功),转NRF_TX_WAIT_ACK;若IRQ高(发送失败),重试3次后报错 // 6. 启动定时器T3(50ms),等待从机应答 → 7. 若T3溢出未收到应答,标记NRF_ERROR关键技巧在于自动重传与信道侦听:nRF24L01的SETUP_RETR寄存器配置为0x0F(重传延时750μs,重传次数15次),结合RF_CH寄存器动态扫描2.4G频段中干扰最小的信道(实测选用CH87=2.487GHz,在家用Wi-Fi密集环境中误码率最低)。资料包中的自动浇花控制系统设计.PDF第12页详细记录了信道扫描算法代码。
5. 实操过程与完整调试指南
5.1 硬件组装与首通电检查(30分钟)
拿到PCB后,不要急着焊元件。按以下顺序操作:
- 目检PCB:重点查看
主.SchDoc中标注的“关键走线”——P0口与nRF24L01的SPI线(MOSI/MISO/SCK)是否全程等长、远离电源线;ADC输入线(P1.0)是否加粗并远离继电器驱动区。IMG_1822.JPG展示了PCB背面飞线补救案例:因制版误差导致某条SPI线过细,用30AWG漆包线手动加粗。 - 焊接顺序:先焊晶振(11.0592MHz)、复位电路(10kΩ上拉+10μF电解)、电源模块(AMS1117-3.3V,输入端加10μF钽电容+100nF陶瓷电容);再焊nRF24L01(注意方向,丝印“ANT”朝向板边);最后焊传感器和继电器。
- 首通电三步测:
- 测AMS1117输出:应为3.30V±0.02V(万用表DC档);
- 测nRF24L01 VCC:3.3V,CE脚待机时为0V,发送时跳变为3.3V;
- 测LCD对比度:POT1(10kΩ可调电阻)中心脚对地电压应在0.8–1.2V间,否则字符不可见。
提示:资料包中的
Project Logs for 自动浇花控制系统设计文件夹,记录了首批12块板的首通电问题——其中7块因AMS1117输入电容虚焊导致输出不稳,3块因nRF24L01天线焊盘氧化导致通信距离<1米。这些经验已固化为BOM表中的“必检项”。
5.2 软件烧录与参数校准(45分钟)
使用STC-ISP v6.89D烧录:
- 主机:选择主.hex,波特率选“最高”,勾选“下载程序后冷启动”;
- 从机:选择从.hex,同样设置。
烧录后,按以下步骤校准:
1.湿度校准:将YL-69探头置于干燥硅胶罐,长按“设置键”5秒进入校准模式,LCD显示CAL:DRY,此时按“加”键将显示值调至45(代表干燥状态),按“确认”保存;再浸入饱和盐水,长按“设置键”5秒进入CAL:WET,调至85(饱和状态),确认。
2.定时校准:在正常模式下,短按“设置键”进入时间设置,用“加/减”调整小时/分钟,“确认”保存。系统自动同步主机与从机软时钟。
3.阈值设定:默认45%,可通过“设置→阈值”修改。建议新手先设为50%,观察3天后再微调。
5.3 真实场景压力测试(72小时)
把系统放在窗台真实花盆旁,进行三阶段测试:
-阶段一(24h):仅湿度模式,记录LCD显示湿度变化曲线与实际浇水次数。理想情况:湿度从60%→45%耗时约8小时,触发一次浇水,之后回升至48%需2.5分钟,全程无误触发。
-阶段二(24h):开启定时模式(设为10:00–10:05),观察是否只在此时段内响应湿度条件。重点检查:9:59:59湿度<45%,但未浇水;10:00:00立即浇水。
-阶段三(24h):模拟断电——拔掉USB供电,改用两节18650(8.4V)经LM2596降压至5V供电,测试电池续航与低电压稳定性。实测:新电池下可持续工作168小时(7天),电压降至7.2V时仍能可靠吸合继电器。
IMG_1825.JPG拍摄于第72小时,显示LCD上“HUM:47% TEMP:28C MODE:TIMER TIME:10:00-10:05”,背景是刚浇完水的绿萝——这是系统交付前的最后一张验证照。
6. 常见问题与独家排查技巧实录
6.1 典型问题速查表
| 现象 | 可能原因 | 排查步骤 | 解决方案 |
|---|---|---|---|
| LCD全黑或乱码 | 对比度电位器失调;P0口上拉电阻虚焊;nRF24L01 SPI线短路 | 1. 调节POT1;2. 用万用表测P0.0–P0.7对地电阻是否均为10kΩ;3. 断开nRF24L01,测P0口波形 | 更换POT1;补焊R1–R8;检查nRF24L01焊盘桥连 |
| 湿度值始终为0或1023 | YL-69探针氧化;ADC参考电压未启用;调理电路运放损坏 | 1. 用万用表测YL-69两针间电阻(干燥时应>50kΩ);2. 测P1.0对地电压(应为0.2–2.0V);3. 测LM358第8脚电压 | 抛光探针;检查ADC_CONTR=0x80;更换LM358 |
| 无线通信距离<2米 | nRF24L01天线未剪裁;信道被Wi-Fi占用;电源纹波过大 | 1. 查看天线长度(标准17.3mm);2. 用手机APP“WiFi Analyzer”看2.4G信道占用;3. 用示波器测AMS1117输出纹波 | 剪裁天线至17.3mm;改用CH15(2.415GHz);加大输入电容 |
| 水泵启动后不转 | 继电器触点粘连;水泵正负极接反;ACS712电流检测误报 | 1. 听继电器“咔嗒”声;2. 用万用表测继电器输出端电压;3. 测ACS712输出电压(正常应为2.5V±0.5V) | 更换继电器;调换水泵线;校准ACS712零点 |
6.2 我踩过的三个深坑与填坑技巧
坑一:ADC采样被继电器动作干扰
现象:每次水泵启动瞬间,LCD上湿度值跳变±20%。
原因:继电器线圈关断时产生反向电动势,通过共享地线耦合进ADC参考地。
填坑技巧:在STC15的AVSS(模拟地)和DGND(数字地)之间,不直接连接,而是通过一个0Ω电阻(R22)连接,并在R22靠近AVSS端并联一个10μF钽电容到AVDD。这样,数字噪声被电容旁路,而ADC参考地保持纯净。这个设计在主.SchDoc第3页有明确标注。
坑二:nRF24L01在潮湿环境下失效
现象:梅雨季连续3天通信中断,烘干PCB后恢复。
原因:nRF24L01裸露焊盘吸潮,导致2.4G信号衰减。
填坑技巧:在nRF24L01芯片表面涂覆一层三防漆(Conformal Coating),仅覆盖芯片本体,避开天线和焊盘。实测防潮等级提升至IPX4,成本增加0.3元/块。
坑三:EEPROM参数断电后丢失
现象:重启后阈值恢复默认45%,但定时时间正确。
原因:eeprom.c中写入函数未等待写入完成,复位发生在写入中途。
填坑技巧:在EEPROM_WriteByte()函数末尾,强制插入_nop_(); _nop_();延时,并添加写入后校验——读回刚写入的值,若不符则重新写入。此逻辑已在资料包最新版源码中更新。
7. 资料包使用指南与扩展建议
资料包不是一堆文件的堆砌,而是一个完整的知识载体。使用时请按此路径深入:
- 入门者:先看
自动浇花控制系统设计.PDF(第1–5页系统概述+第18–22页接线图),再打开IMG_1822.JPG–IMG_1825.JPG对照实物理解布局,最后烧录主.hex和从.hex体验基础功能; - 进阶者:精读
主.SchDoc中ADC调理电路(Sheet 2)和nRF24L01接口(Sheet 4),对照adc.c和nrf24l01.c源码,理解硬件与软件的映射关系; - 研究者:运行
simulation.py,修改其中的噪声参数(如noise_level=0.05),观察滤波算法效果;用自动浇花控制系统设计.OutJob生成Gerber文件,导入JLCPCB打样,验证PCB设计。
这个系统后续可扩展的方向很实在:
- 加一个光照传感器(BH1750),让“定时浇水”升级为“光照充足+湿度不足”双条件触发;
- 将nRF24L01换成LoRa模块(SX1278),通信距离从50米扩展到2公里,覆盖整个庭院;
- 在主机上增加SD卡座,用FatFs文件系统记录7天湿度日志,导出CSV供Excel分析。
但我不建议新手一上来就加这些。先把这套双机系统在你家阳台上稳定运行30天,记录下每一次浇水的时间、当时的湿度值、天气状况,你会发现:真正的智能,不在于加了多少传感器,而在于每一个判断都经得起植物生长的检验。我在调试最后一版时,在窗台放了三盆绿萝,连续记录了21天的数据,最终把湿度阈值从最初的50%微调到47.3%——这个数字,是植物告诉我的,不是我设定的。
本文还有配套的精品资源,点击获取
简介:用两块STC15单片机搭出能真正干活的自动浇花系统——主控板实时读取土壤温湿度,通过LCD1602直观显示数值,并根据设定的湿度下限自动触发浇水;从机接收无线指令控制水泵启停。支持两种工作模式:一是纯环境感知型,ADC采集土壤湿度,低于阈值立刻响应;二是时间约束型,用户按键设定浇水时间段,只在指定钟点内执行动作。硬件含土壤传感器信号调理电路、继电器驱动模块、nRF24L01或UART透传无线方案、电源稳压单元;软件基于Keil C51,结构清晰,adc.c、key.c、usart.c、timer.c、lcd.c等模块独立封装,全部源码带中文注释。资料包里有主/从两套原理图(.SchDoc)、完整PCB工程(.PrjPCB)、编译输出PDF与OutJob文件、四张真实搭建照片(IMG_1822~IMG_1825.JPG),还有项目日志和预览文件夹,课程设计、毕设或电子爱好者动手都能直接上手调试。
本文还有配套的精品资源,点击获取