51单片机 自动浇花系统 联系就发 包含程序、仿真7.8,8.11、ad图 功能: 按键设置土壤湿度的上下限阈值,当土壤湿度低于阈值的时候会进行led灯报警以及水泵开始进行浇水。

最近捣鼓了一个基于51单片机的自动浇花系统,觉得还挺有趣,跟大家分享一下。这个系统能够通过按键设置土壤湿度的上下限阈值,当土壤湿度低于设定阈值时,就会触发LED灯报警,同时水泵开始浇水,让家里的花儿始终能喝到“饱水”。下面我就详细讲讲这个系统的实现过程,包括程序代码、仿真以及AD图。

程序部分

先来看关键的C语言程序代码(基于51单片机):

#include <reg51.h>

// 定义端口
sbit LED = P1^0;
sbit Pump = P1^1;
sbit Key1 = P3^0; // 假设Key1用于设置下限阈值
sbit Key2 = P3^1; // 假设Key2用于设置上限阈值
unsigned char lowThreshold = 30; // 初始下限阈值
unsigned char highThreshold = 60; // 初始上限阈值
unsigned char soilMoisture; // 存储当前土壤湿度值

// 延时函数
void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++)
        for (j = 0; j < 1275; j++);
}

// 设置下限阈值函数
void setLowThreshold() {
    if (Key1 == 0) {
        delay(20); // 消抖
        if (Key1 == 0) {
            while (!Key1); // 等待按键释放
            lowThreshold++;
            if (lowThreshold > highThreshold) {
                lowThreshold = highThreshold - 1;
            }
        }
    }
}

// 设置上限阈值函数
void setHighThreshold() {
    if (Key2 == 0) {
        delay(20); // 消抖
        if (Key2 == 0) {
            while (!Key2); // 等待按键释放
            highThreshold++;
            if (highThreshold <= lowThreshold) {
                highThreshold = lowThreshold + 1;
            }
        }
    }
}

void main() {
    while (1) {
        setLowThreshold();
        setHighThreshold();

        // 假设这里有读取土壤湿度传感器的代码,为了演示方便,先随机赋值
        soilMoisture = 25; 

        if (soilMoisture < lowThreshold) {
            LED = 1; // LED亮,报警
            Pump = 1; // 水泵开启,浇水
        } else {
            LED = 0; // LED灭
            Pump = 0; // 水泵关闭
        }
    }
}

代码分析

  1. 端口定义
    - sbit LED = P1^0; 定义LED连接在P1.0端口,用于报警指示。
    - sbit Pump = P1^1; 定义水泵连接在P1.1端口,控制浇水动作。
    - sbit Key1 = P3^0;sbit Key2 = P3^1; 分别定义了设置下限阈值和上限阈值的按键连接端口。
  2. 变量定义
    - lowThresholdhighThreshold 分别用于存储土壤湿度的下限和上限阈值。
    - soilMoisture 用于存储当前读取到的土壤湿度值。
  3. 延时函数
    - delay(unsigned int time) 函数通过两层嵌套循环实现简单的延时,在按键消抖时会用到。
  4. 设置阈值函数
    - setLowThreshold() 函数中,当检测到 Key1 按键按下时,先进行20ms延时消抖,确认按键稳定按下后,增加 lowThreshold 的值,同时保证下限阈值不会超过上限阈值。
    - setHighThreshold() 函数原理类似,不过是对上限阈值进行设置,并确保上限阈值大于下限阈值。
  5. 主函数
    - 在 main() 函数的无限循环中,首先调用设置阈值函数,以便随时更新阈值。
    - 这里为了演示方便,随机给 soilMoisture 赋值,实际应用中应该是通过土壤湿度传感器读取真实值。
    - 最后根据当前土壤湿度值与阈值的比较结果,控制LED和水泵的状态。

仿真部分

我使用的是Proteus软件进行仿真,搭建的仿真电路图大概长这样(这里没法直接展示图,大家可以想象一下):51单片机作为核心,按键连接到对应的I/O口,LED和水泵分别连接到P1.0和P1.1口,还模拟了一个简单的土壤湿度传感器模块。

在仿真过程中,可以通过操作按键来调整上下限阈值,然后观察LED和水泵的状态变化,以此来验证程序逻辑是否正确。比如,当把土壤湿度模拟值设置低于下限阈值时,LED会亮起,水泵也会开始工作,这就达到了我们预期的效果。

AD图部分

AD图(Altium Designer绘制的原理图和PCB图)是硬件设计的重要部分。在原理图设计中,要准确连接51单片机、按键、LED、水泵以及土壤湿度传感器等各个模块的引脚,确保电气连接正确。

51单片机 自动浇花系统 联系就发 包含程序、仿真7.8,8.11、ad图 功能: 按键设置土壤湿度的上下限阈值,当土壤湿度低于阈值的时候会进行led灯报警以及水泵开始进行浇水。

在PCB设计阶段,要考虑布线规则,合理布局各个元件,尽量减少信号干扰,提高系统的稳定性。比如,电源和地的布线要足够宽,以保证能够提供稳定的电源供应;信号线尽量避免平行走线,防止串扰等问题。

总的来说,通过这个基于51单片机的自动浇花系统项目,不仅深入了解了51单片机的应用,还涉及到了硬件设计和软件编程的多方面知识。希望我的分享能给大家带来一些启发,大家也可以自己动手尝试做一个,让自家的花儿都能得到智能呵护。

以上就是整个自动浇花系统的介绍啦,有问题欢迎在评论区交流哦!

Logo

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

更多推荐