风筝
发表于: 2021-10-9 14:44:36 | 显示全部楼层

我们每个人都喜欢家里的一点绿色植物,不是吗?植物需要非常低的维护,可以在没有监督的情况下放置数天,但由于土壤中缺乏水分,我们超过一两周的长途旅行可能对植物的健康有害。在这种情况下,植物可能会枯萎或由于缺乏适当的浇水而枯萎。为了解决这个问题,在本篇文章中,我们将使用Arduino Uno开发板制作一个自动灌溉系统,它会自动灌溉您的植物并保持它们的健康,即使您离开城镇数周或数月。在本文中,湿度传感器将用于跟踪植物的最佳湿度值。


自动灌溉系统的工作过程

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

Soil-Moisture-Sensor_0.jpg


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


该传感器带有一个电子模块,连接探头到Arduino。该模块有一个LM393高精度比较器,可将模拟信号转换为数字输出,然后馈送到微控制器。

Pump-for-Automatic-Irrigation-System.jpg


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


所需的组件

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

●    Arduino UNO开发板

●    湿度传感器

●    5V继电器模块

●    6V mini水泵

●    连接线

●    5V电池

Automatic-Irrigation-System-Hardware.jpg


Arduino自动灌溉系统电路图

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

Automatic-Irrigation-System-Circuit-Diagram.jpg


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


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


组装自动灌溉系统

我们首先将继电器连接到Arduino开发板。将继电器模块的VCC连接到Arduino的5V引脚,继电器的地连接到Arduino的地。现在将继电器信号引脚连接到Arduino的任何数字引脚(引脚 13 除外)。这里我将其连接到引脚3,如下图所示。

Relay-Signal-to-Arduino.jpg


下一步是将土壤湿度传感器与Arduino连接。将传感器的VCC和地分别连接到Arduino的5V和接地引脚。传感器的模拟输出连接到Arduino的任何模拟引脚,这里我将其连接到引脚A0。


最后,将泵连接到继电器模块。一个继电器模块有3个连接点,分别是公共点、常闭点和常开点。我们需要将泵的正极连接到公共端,并将常开引脚连接到电池的正极。接下来是将泵的地连接到Arduino的地,最后将小软管连接到水泵。

Soil-Moisture-Sensor-to-Arduino.jpg


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


自动灌溉系统代码说明

对于这个项目,我们没有使用任何库,我们只是使用编程的基础函数。代码非常简单,易于使用。解释如下。


我们首先定义所有必需的整型变量,这里我使用了两个整型变量来存储土壤水分值和转换后的水分百分比。

  1. int soilMoistureValue = 0;
  2. int percentage=0;
复制代码

然后,定义了引脚模式,这里我使用了引脚3作为输出,然后初始化用于调试的串口监视器。

  1. void setup() {
  2.   pinMode(3,OUTPUT);
  3.   Serial.begin(9600);
  4. }
复制代码

loop()函数中,首先读取土壤湿度的值。使用Arduino的analogRead()函数读取土壤湿度,并将其存储在soilMoistureValue中。该值在0到1023之间变化。

  1. void loop() {
  2. soilMoistureValue = analogRead(A0);
复制代码

在下面的代码中,使用map()函数将传感器值转换为0-100%值。这意味着如果土壤干燥,则输出水分百分比为0%,如果土壤非常潮湿,则水分百分比为100%。

  1. percentage = map(soilMoistureValue, 490, 1023, 0, 100);
  2. Serial.println(percentage);
复制代码

校准我们的湿度传感器

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

  1. void setup() {
  2.   Serial.begin(9600);
  3. }
  4. void loop() {
  5. int sensorValue = analogRead(A0);
  6.   Serial.println(sensorValue);
  7.   delay(1);
复制代码

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


下一步是将传感器放置在潮湿的土壤中或将其浸入水中,然后读取该值并指定该值代替1023。这些值将正确校准您的传感器以获得更好的结果。

Soil-Moisture-Sensor-Calibrating.jpg


转换这些值后,我们可以根据土壤水分百分比控制泵。如果水分百分比低于10,那么Arduino会将引脚3转为低电平,泵将打开并且Arduino将在串口监视器中输出消息。

  1. If (percentage < 10)
  2. {
  3.   Serial.println(" pump on");
  4.   digitalWrite(3,LOW);
  5. }
复制代码

当水分百分比超过 80%(表明土壤充满水)时,Arduino将关闭泵并在串口监视器上打印输出“pump off”。

  1. if(percentage >80)
  2. {
  3.   Serial.println("pump off");
  4.   digitalWrite(3,HIGH);
  5. }
  6. }
复制代码

测试自动灌溉系统

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

Automatic-Irrigation-System-Testing.jpg


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

Moisture-Sensor-Soil-Testing.jpg


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

Automatic-Irrigation-System-using-an-Arduino-Uno.jpg


您可能需要更改水分百分比来启动和停止泵,因为不同的植物有不同的用水需求。希望您喜欢这个项目并准备好使用Arduino制作属于您自己的自动灌溉系统。如果您有任何疑问,可以随时在本帖下面进行回复。


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 05:32 , Processed in 0.095218 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表