Automatický zavlažovací okruh pomocí Arduina

Automatický zavlažovací okruh pomocí Arduina

V tomto příspěvku budeme konstruovat automatizovaný systém zavlažování vody pro malou zahradu pomocí arduina a senzoru půdní vlhkosti.

Úvod

Navrhovaný systém může monitorujte hladinu půdní vlhkosti a když vlhkost půdy klesne pod přednastavenou hodnotu, spustí se čerpadlo 12V DC na předem stanovenou dobu. Stav úrovně půdní vlhkosti a další funkce systému lze sledovat pomocí LCD displeje 16 x 2 v reálném čase.



Odhaduje se, že po celém světě existují 3 biliony stromů, což je více než počet startů v naší domovské galaxii Mléčná dráha, která se odhaduje na 100 miliard. My lidé ale řezáme nespočetné množství stromů, abychom splnili naše základní potřeby luxusním potřebám.



Matka příroda je navržena se systémem zpětné vazby, když druh způsobí obrovské poruchy, příroda jej vymaže z existence.

Lidé po staletí nevědomky narušovali přírodu, ale ani po velkém rozvoji vědy a techniky se míra narušení nezmenšila.



Změna klimatu je jedním z příkladů, kdy bude dost drastická, náš druh nevydrží dlouho.
Tento projekt učiní krok vpřed k ochraně přírody, může zavlažovat vaši krásnou malou zahradu bez jakékoli lidské interakce. Pojďme nyní na technické podrobnosti projektu.

Senzor půdní vlhkosti:

Srdcem projektu je snímač půdní vlhkosti který dokáže vycítit množství vlhkosti v půdě. Senzor vydává analogovou hodnotu a mikrokontrolér tyto hodnoty interpretuje a zobrazí obsah vlhkosti.

Existují dvě elektrody, které budou vloženy do půdy. Elektrody jsou připojeny k desce s plošnými spoji, která se skládá z komparátoru IC, LED, vstupních a výstupních pinů rezistorů.



Ilustrace snímače půdní vlhkosti:

modul snímače vlhkosti půdy

Má 4 + 2 piny, 2 piny pro připojení elektrod a zbytek 4 piny jsou Vcc, GND, digitální výstup a analogový výstup. Pro snímání vlhkosti půdy použijeme pouze analogový výstupní kolík.
Protože nepoužíváme digitální výstupní kolík, nebudeme ke kalibraci senzoru používat rezistor trimru.

Tím je zakončen senzor půdní vlhkosti.

Schematický diagram:

Okruh je poměrně jednoduchý a přátelský pro začátečníky. Schéma je rozděleno do dvou částí stejného projektu, aby se předešlo nejasnostem při duplikování projektu.

Schéma zapojení LCD pro automatický zavlažovací systém

Výše uvedené schéma je LCD na Arduino elektrické vedení. K nastavení kontrastu LCD displeje je k dispozici 10K potenciometr.

Automatický zavlažovací systém založený na mikrokontroléru

Zde je zbytek schématu sestávajícího ze snímače půdní vlhkosti, 12 V DC čerpadla, kalibračního tlačítka a 12 V (1 - 2 amp) napájecího zdroje. Použijte prosím napájecí zdroj s proudem alespoň 12 V DC.

MOSFET IRF540N (nebo jakýkoli ekvivalentní N-kanál) se používá místo BJT ke zlepšení celkové energetické účinnosti systému.

Čerpadlo vám zalévá malou zahradu, ujistěte se, že máte vždy k dispozici dostatečné množství vody.

Programový kód:

//-------------Program Developed By R.Girish-------------//
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2)
int Time = 5 // Set time in minutes
int threshold = 30 // set threshold in percentage 80, 70, 60, 50, 40, 30, 20 only.
int i
int x
int y
int z
int start
int calibrateValue
const int calibrateBTN = A1
const int input = A0
const int motor = 7
boolean calibration = false
boolean rescue = false
void setup()
{
Serial.begin(9600)
pinMode(input, INPUT)
pinMode(calibrateBTN, INPUT)
pinMode(motor, OUTPUT)
digitalWrite(calibrateBTN, HIGH)
lcd.begin(16,2)
lcd.setCursor(0,0)
lcd.print('Pour water and')
lcd.setCursor(0,1)
lcd.print('press calibrate')
while(!calibration)
{
if(digitalRead(calibrateBTN)==LOW)
{
calibrateValue = analogRead(input)
x = 1023 - calibrateValue
x = x/10
Serial.print('Difference = ')
Serial.println(x)
Serial.print('Calibration Value = ')
Serial.println(calibrateValue)
delay(500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Calibration done')
lcd.setCursor(0,1)
lcd.print('successfully !!!')
calibration = true
delay(2000)
}
}
}
void loop()
{
if(analogRead(input)<= calibrateValue)
{
delay(500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 100%')
}
if(analogRead(input) > calibrateValue && analogRead(input) <= calibrateValue+x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 90 to 99%')
}
if(analogRead(input) > calibrateValue+x && analogRead(input) <= calibrateValue+2*x )
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 80 to 90%')
start = 80
}
if(analogRead(input) > calibrateValue+2*x && analogRead(input) <= calibrateValue+3*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 70 to 80%')
start = 70
}
if(analogRead(input) > calibrateValue+3*x && analogRead(input) <= calibrateValue+4*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 60 to 70%')
start = 60
}
if(analogRead(input) > calibrateValue+4*x && analogRead(input) <= calibrateValue+5*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 50 to 60%')
start = 50
}
if(analogRead(input) > calibrateValue+5*x && analogRead(input) <= calibrateValue+6*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 40 to 50%')
start = 40
}
if(analogRead(input) > calibrateValue+6*x && analogRead(input) <= calibrateValue+7*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 30 to 40%')
start = 30
}
if(analogRead(input) > calibrateValue+7*x && analogRead(input) <= calibrateValue+8*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 20 to 30%')
start = 20
}
if(analogRead(input) > calibrateValue+8*x && analogRead(input) <= calibrateValue+9*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 10 to 20%')
start = 10
}
if(analogRead(input) > calibrateValue+9*x && analogRead(input) <= calibrateValue+10*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: <10%')
rescue = true
}
if(start == threshold || rescue)
{
y = Time
digitalWrite(motor, HIGH)
Time = Time*60
z = Time
for(i=0 i

Jak kalibrovat tento automatický zavlažovací systém:

• S hotovým hardwarem vložte elektrodu na půdu někde na cestě toku vody.
• Nyní změňte dvě hodnoty v programu 1) Doba potřebná k zalití všech rostlin (v minutách). 2) Prahová úroveň, pod kterou arduino spouští čerpadlo. Můžete nastavit pouze procentní hodnoty 80, 70, 60, 50, 40, 30, 20.

int Time = 5 // Nastavení času v minutách
int threshold = 30 // nastavit prahovou hodnotu pouze v procentech 80, 70, 60, 50, 40, 30, 20.

Změňte hodnoty v programu.

• Nahrajte kód na arduino a napájejte obvod. Zobrazí se „nalít vodu a stisknout kalibraci“. Nyní musíte zahradu ručně zalévat na dostatečnou úroveň.
• Po zalévání zahrady stiskněte tlačítko kalibrace. Tím se určí vedení elektřiny v půdě s plnou vlhkostí a pořídí se referenční hodnota.
• Nyní je systém připraven sloužit vaší malé zahradě. Zkuste pro tento projekt přidat zálohu napájení. Když dojde k výpadku napájení, referenční kalibrovaná hodnota bude vymazána z paměti a budete muset systém znovu kalibrovat.

Autorův prototyp:

Prototypový obrázek automatického zavlažování založený na Arduinu

Údaj o úrovni půdní vlhkosti:

Jakmile je čerpadlo zapnuto, zobrazí zbývající čas do vypnutí (v sekundách).




Předchozí: 3 inteligentní ochranné obvody laserového alarmu Další: Vysvětlení OCL zesilovače