基于Arduino实现自动灌溉系统的设计

 

  1.    自动灌溉系统的工作

这个系统的逻辑非常简单。在这个系统中,湿度传感器检测土壤的湿度水平,当传感器检测到低湿度水平时,它会在微控制器的帮助下自动切换水泵并灌溉植物。提供足够的水后,土壤会保留水分,因此会自动停止泵。

土壤湿度传感器

土壤湿度传感器的工作非常容易理解。它有 2 个带有外露触点的探针,其作用类似于可变电阻器,其电阻根据土壤中的含水量而变化。该电阻与土壤湿度成反比,这意味着土壤中的水分越高,导电性越好,因此电阻越低。而土壤中较低的水意味着导电性差,并会导致更高的电阻。传感器根据电阻产生模拟电压输出。

该传感器带有一个将探头连接到 Arduino 的电子模块。该模块有一个LM393 高精度比较器,可将模拟信号转换为数字输出,然后馈送到微控制器。我们已经介绍了深入的Arduino 土壤湿度传感器教程,其中涵盖了土壤湿度传感器模块的工作以及如何将其与 Arduino 一起使用。如果您想了解有关土壤湿度传感器的更多信息,可以查看教程。

我们需要一个小泵来灌溉植物,但在花园的情况下,我们需要驱动一个更大的泵,它可以根据花园的大小提供更多的水,而这不能由 Arduino 直接供电。 因此,如果您需要操作更大的泵,则需要驱动器为泵提供足够的电流,以表明我使用的是 5v 继电器。您也可以使用交流供电的泵并使用合适的继电器。工作将与本项目中所示的相同,您只需将连接到继电器的直流电源输入替换为交流电源输入,并且必须使用单独的直流电源为您的 Arduino 供电。

自动灌溉系统所需的组件

该项目需要的组件很少,连接也很简单。下面列出了这些组件:

阿杜诺 * 1

湿度传感器 * 1

5v继电器模块*1

6v迷你小水管水泵*1

连接线

5v电池*1

Arduino自动灌溉系统的电路图

Arduino自动灌溉系统的完整电路图如下所示:

在本节中,我将借助示意图解释所有细节。Arduino UNO是整个项目的大脑。它根据湿度传感器给出的土壤湿度控制电动泵。

为了给电路供电,我使用的是外接电池。您可以使用任何 9 伏或 12 伏电池。电池连接到 Arduino Vin 和接地引脚,我们也可以通过继电器将电机连接到该电池。湿度传感器输出连接到 Arduino 的模拟引脚。请记住使用 Arduino 5 伏引脚为传感器和继电器模块供电。

组装自动灌溉系统

让我们从将继电器连接到 Arduino 板开始。将继电器模块的 VCC 连接到 Arduino 5v 引脚,并将继电器的地连接到 Arduino 的地。现在将继电器信号引脚连接到除引脚 13 之外的任何 Arduino 数字引脚。这里我将其连接到引脚 3,如下图所示。

下一步是将土壤湿度传感器与 Arduino 连接起来。将传感器的 VCC gnd 连接到 Arduino 5 伏和接地引脚。传感器的模拟输出连接到 Arduino 的任何模拟引脚,这里我将它连接到引脚 A0(根据我们的程序)。

最后,将泵连接到继电器模块。继电器模块有 3 个连接点,它们是公共的、常闭的和常开的。我们必须将泵正极连接到公共端,并将常开引脚连接到电池正极。您必须根据泵选择电池。下一步是将泵的接地连接到 Arduino 的接地,最后将小软管连接到水泵。

现在将电池连接到电路,如果泵开始工作,那么您的电路就可以了。现在让我们将代码上传到 Arduino

自动灌溉系统代码解释

对于这个项目,我们没有使用任何库,我们只是使用基本功能进行编程。该代码非常简单且易于使用。代码解释如下。

我们首先在这里定义所有需要的整数,我使用两个整数来存储土壤水分和转换后的水分百分比。

int 土壤水分值 = 0;

整数百分比=0

现在,我们定义引脚模式,这里我使用引脚 3 作为输出,在下一行中,我已经初始化了串行监视器以进行调试。

无效设置(){

pinMode3,输出);

序列号。开始(9600);

}

我通过读取土壤水分开始循环部分。我使用 Arduino analogRead 函数读取土壤湿度并将其存储在soilMoistureValue 中。该值从 0 1023 不等

无效循环(){

土壤水分值=模拟读取(A0);

在下面的行中,我已经将传感器值从 0% 转换为 100%,因为我们在 Arduino 上使用了 map 函数。这意味着如果土壤干燥,则输出水分百分比为 0%,如果土壤非常潮湿,则水分百分比为 100%

百分比 = 地图(土壤水分值,49010230100);

Serial.println(百分比);

校准我们的湿度传感器

在地图函数中, 我们需要分配干值和湿值。为此,我们需要监控这些值。您可以使用以下代码读取该值:

无效设置(){

序列号。开始(9600);

}

无效循环(){

int sensorValue = 模拟读取(A0);

Serial.printlnsensorValue;

延迟(1);

将上述代码上传到您的 Arduino 并打开串行监视器。然后将土壤湿度传感器放在干燥的土壤中,或者将传感器放在空气中并读取值。现在将该值代替 490(地图函数的第二项)。

下一步是将传感器放置在潮湿的土壤中或将其浸入水中并读取值并分配该值以代替 1023(地图功能的第三项)。这些值将正确校准您的传感器以获得更好的结果。

转换值后,我们可以根据土壤水分百分比控制泵。在如果条件的帮助下,我写了第一个条件,如果水分百分比低于 10,那么 Arduino 会将引脚 3 变为低电平并且泵将打开(我们的继电器模块使用低电平有效信号触发)并且 Arduino 将在串行监视器中打印泵消息。

If percentage 10

{

Serial.println“pump on”;

数字写入(3,低);

}

当水分百分比超过 80%(表明土壤充满水)时,Arduino 将关闭泵并在串行监视器上打印泵关闭

ifpercentage 80

{

Serial.println“pump off”;

数字写入(3,高);

}

}

测试自动灌溉系统

将代码上传到 Arduino 后,我将除泵和传感器探头之外的整个电路放入塑料盒中,如下图所示。

现在将湿度传感器放入土壤中。将传感器放置在尽可能靠近植物根部的位置,以获得更高的精度。

最后一步是将您的电机放入装满水的容器中,当您不在时,您的自动灌溉系统已准备好照顾您可爱的植物。

您可能必须更改水分百分比来启动和停止泵,因为不同的植物有不同的水需求。希望您喜欢这个项目并准备好使用 Arduino 构建您自己的自动灌溉系统。如果您有任何疑问,可以将它们留在下面的评论部分。

代码

int 土壤水分值 = 0;

整数百分比=0
无效设置(){
pinMode3,输出);
序列号.开始(9600);
}
无效循环() {
土壤水分值 = 模拟读取(A0);
Serial.println(百分比);
百分比 = 地图(土壤水分值,49010231000);
if(percentage < 10)  
{
Serial.println("pump on");
数字写入(3,低);
}
if(percentage >80)
{
Serial.println("pump off");
数字写入(3,高);
}
}