在这篇文章中,我们将使用arduino和土壤湿度传感器来构建一个小型花园的自动灌溉系统。
介绍
拟议的系统可以监测土壤水分水平当土壤湿度低于预置值时,触发12V直流泵预定时间。通过16 × 2 LCD显示屏实时监控系统的土壤湿度水平状态等功能。
据估计,全球有3万亿棵树,这比我们的家园银河系的数量还要多,银河系估计有1000亿棵树。但是,我们人类砍伐了无数的树木,以满足我们的基本需求,奢侈的需求。
大自然母亲是用反馈系统设计的,当一个物种引入巨大的干扰,自然会将该物种消灭。
几个世纪以来,人类一直在不知不觉地干扰着大自然,但即使在科学技术取得巨大发展之后,干扰的速度也没有减少。
气候变化就是一个例子,当它变得足够剧烈时,我们的物种将无法持续太久。
这个项目在保护自然方面迈出了一小步,它可以在没有任何人类互动的情况下灌溉你可爱的小花园。现在让我们讨论一下这个项目的技术细节。
土壤水分传感器:
这个项目的核心是土壤水分传感器它可以感知土壤中的水分含量。传感器给出模拟值和微控制器将解释这些值和显示水分含量。
有两个电极,将被插入土壤中。电极连接到由比较器IC、LED、微调电阻输入和输出引脚组成的电路板上。
土壤水分传感器示意图:
它有4 + 2引脚,2引脚用于电极连接,其余4引脚为Vcc, GND,数字输出和模拟输出。我们将只使用模拟输出引脚来传感土壤湿度。
由于我们不使用数字输出引脚,我们将不会使用板载微调电阻校准传感器。
现在,这就是土壤湿度传感器。
原理图:
电路保持相当简单和初学者友好。为了减少重复项目时的混乱,示意图被分成了同一个项目的两个部分。
上面的示意图是液晶,arduino线路。提供了一个10K电位器来调整液晶显示器的对比度。
这里是其余的原理图,包括土壤湿度传感器,12V直流泵,校准按钮和12V(1 - 2安培)电源。请使用至少大于500mA的12V直流泵额定电流的电源。
MOSFET IRF540N(或任何等效的n通道)被用来代替bjt来提高系统的整体功率效率。
水泵会给你的小花园浇水,确保你总是有足够的水可用。
程序代码:
//------------- 项目由R.Girish -------------//
# include < LiquidCrystal.h >
液晶液晶显示器(12,11,5,4,3,2);
int Time = 5;//设置时间为分钟
Int阈值= 30;//设置阈值的百分比80,70,60,50,40,30,20只。
int我;
int x;
int y;
int z;
int开始;
int calibrateValue;
const int calibrateBTN = A1;
const int input = A0;
Const int motor = 7;
布尔校准=假;
Boolean rescue = false;
无效的设置()
{
Serial.begin (9600);
pinMode(输入,输入);
pinMode (calibrateBTN、输入);
pinMode(电动机、输出);
digitalWrite (calibrateBTN、高);
lcd.begin(16日2);
lcd.setCursor (0,0);
液晶显示器。打印(“倒水”);
lcd.setCursor (0,1);
液晶显示器。打印(“按校准”);
而(校准)
{
如果(digitalRead (calibrateBTN) = =低)
{
calibrateValue = analogRead(输入);
x = 1023 - calibrateValue;
x = x / 10;
系列。打印("差异= ");
以(x);
系列。print("校准值= ");
以calibrateValue);
延迟(500);
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(“校准完成”);
lcd.setCursor (0,1);
液晶显示器。打印(“成功!”);
校准= true;
延迟(2000);
}
}
}
无效循环()
{
如果(analogRead(输入)< = calibrateValue)
{
延迟(500);
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。打印(水平:100%);
}
如果(analogRead(input) > calibrateValue && analogRead(input) <= calibrateValue+x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 90 to 99%");
}
如果(analogRead(input) > calibrateValue+x && analogRead(input) <= calibrateValue+2*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 80 to 90%");
开始= 80;
}
if(analogRead(input) > calibrateValue+2*x && analogRead(input) <= calibrateValue+3*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print(“等级:70 - 80%”);
开始= 70;
}
如果(analogRead(input) > calibrateValue+3*x && analogRead(input) <= calibrateValue+4*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 60 - 70%");
开始= 60;
}
如果(analogRead(input) > calibrateValue+4*x && analogRead(input) <= calibrateValue+5*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 50 - 60%");
开始= 50;
}
如果(analogRead(input) > calibrateValue+5*x && analogRead(input) <= calibrateValue+6*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 40 - 50%");
开始= 40;
}
如果(analogRead(input) > calibrateValue+6*x && analogRead(input) <= calibrateValue+7*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 30 - 40%");
开始= 30;
}
如果(analogRead(input) > calibrateValue+7*x && analogRead(input) <= calibrateValue+8*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print(“等级:20 - 30%”);
开始= 20;
}
如果(analogRead(input) > calibrateValue+8*x && analogRead(input) <= calibrateValue+9*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。print("Level: 10 - 20%");
开始= 10;
}
如果(analogRead(input) > calibrateValue+9*x && analogRead(input) <= calibrateValue+10*x)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(土壤水分);
lcd.setCursor (0,1);
液晶显示器。打印(级别:< 10%);
救援= true;
}
If (start == threshold || rescue)
{
y =时间;
digitalWrite(电机、高);
时间= * 60;
z =时间;
(我= 0;我<时间;我+ +)
{
Z = Z - 1;
延迟(1000);
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。print("PUMP IS ON, WILL");
lcd.setCursor (0,1);
液晶显示器。打印(“关掉:”);
lcd.print (z);
}
时间= y;
救援= false;
digitalWrite(电机、低);
}
延迟(1000);
}
//------------- 项目由R.Girish -------------//
如何校准这个自动灌溉系统:
•完成硬件后,将电极插入土壤中水流路径的某处。
•现在改变程序中的两个值1)时间的数量将需要浇水所有的植物(分钟)。2)低于arduino触发泵的阈值水平。您只能设置百分比值80、70、60、50、40、30、20。
int Time = 5;//设置时间为分钟
Int阈值= 30;//设置阈值的百分比80,70,60,50,40,30,20只。
更改程序中的值。
•上传代码到arduino,并为电路供电。它将显示“倒水和按校准”。现在你必须手动给花园浇水。
•浇水后,按下校准按钮。这将确定在完全湿润的土壤中导电和抓拍的参考值。
•现在系统已经准备好为您的小花园服务了。请尝试为这个项目增加一个电源备份。当电源故障时,参考校准值将从内存中删除,您将不得不再次校准系统。
作者的原型:
土壤水分水平指示:
一旦开启泵,将显示剩余的时间关闭(秒)。
你好,先生,我需要电源方面的帮助,我试图重用旧的ups变压器,并能够改变ac, dc,但问题是它的电压波动很大根据输入电压和电压波动在我们地区是一个常见的难题,如如果jnput电压是180 v供应8 v直流如果inpur 16 v直流电压是250 v供应,我需要的是一个恒定的12v输出驱动一些20w led,是可能得到一个恒定的输出与这样的波动输入电压
你好Ishaan,
你可以使用任何合适的电压调整IC纠正问题,如这个,或任何类似的
//www.addme-blog.com/2013/04/12v-5-amp-fixed-voltage-regulator-ic.html
喂,先生
我需要用三个不同的螺线管控制灌溉泵
每当泵处于ON状态时,相关的电磁阀必须处于ON状态,并有相应的信息来指示相同的状态。
你好Francis,代码定制是我们提供的一个高级服务,目前我们每一行定制代码收取Rs.10/-。
你能用arduino nano做一个吗