Automatikus öntöző áramkör Arduino segítségével

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben automatizált vízöntöző rendszert építünk a kiskert számára arduino és talajnedvesség-érzékelő segítségével.

Bevezetés

A javasolt rendszer képes figyelemmel kíséri a talaj nedvességszintjét és amikor a talaj nedvessége az előre beállított érték alá csökken, akkor a 12 V DC szivattyú előre meghatározott ideig aktiválódik. A talajnedvesség szintje és a rendszer egyéb funkciói valós időben monitorozhatók a 16 x 2 LCD kijelzőn keresztül.



Becslések szerint világszerte 3 billió fa van, ami meghaladja az otthoni Tejút-galaxisunk kezdeteinek számát, amely a becslések szerint 100 milliárd. Mi, emberek azonban számtalan fát vágunk, hogy kielégítsük a luxusigényeket.

Az Anyatermészetet visszacsatolási rendszerrel tervezték, amikor egy faj hatalmas zavarokat idéz elő, a természet kitörli a fajokat a létezéséből.



Az emberi lények évszázadok óta öntudatlanul zavarták a természetet, de a tudomány és a technológia nagy fejlődése után sem csökkent a zavar mértéke.

Az éghajlatváltozás az egyik példa, amikor a faj elég drasztikus lesz, fajunk nem fog sokáig kitartani.
Ez a projekt egy baba lépést tesz előre a természet megőrzése érdekében, emberi interakció nélkül öntözheti kedves kiskertjét. Most térjünk át a projekt technikai részleteire.

Talajnedvesség-érzékelő:

A projekt lényege az talajnedvesség-érzékelő amely érzékeli a talaj nedvességtartalmának mennyiségét. Az érzékelő analóg értéket ad, és egy mikrovezérlő értelmezi ezeket az értékeket, és megjeleníti a nedvességtartalmat.

Két elektróda van, amelyek a talajba kerülnek. Az elektródák egy áramköri kártyához vannak csatlakoztatva, amely IC komparátorból, LED-ből, trimmer ellenállás bemeneti és kimeneti csapokból áll.

A talaj nedvességérzékelőjének illusztrációja:

talajnedvesség-érzékelő modul

4 + 2 pólusú, 2 pólusú az elektróda csatlakoztatásához, a többi 4 pólus pedig Vcc, GND, digitális kimenet és analóg kimenet. A talaj nedvességének érzékeléséhez csak az analóg kimeneti csapot fogjuk használni.
Mivel nem használunk digitális kimeneti tűt, nem használunk fedélzeti trimmer ellenállást az érzékelő kalibrálásához.

Ez a következtetés a talaj nedvességérzékelőjével.

Sematikus ábrája:

Az áramkör meglehetősen egyszerű és kezdőbarát. A vázlat ugyanannak a projektnek két részére oszlik, hogy csökkentse a zavart, miközben a projekt megismétlődik.

LCD bekötési rajz az automatikus öntözőrendszerhez

A fenti sematikus az LCD-t az arduino-hoz vezeték. 10K potenciométer áll rendelkezésre az LCD kijelző kontrasztjának beállításához.

Mikrokontroller alapú automatikus öntözőrendszer

Itt látható a vázlat többi része, amely talajnedvesség-érzékelőt, 12 V DC szivattyút, egy kalibráló nyomógombot és 12 V (1-2 amperes) tápegységet tartalmaz. Kérjük, használjon legalább 500 mA-nél nagyobb tápegységet a 12 V DC szivattyú jelenlegi névleges értékéből.

A MOSFET IRF540N (vagy bármely más ezzel egyenértékű N-csatorna) a BJT helyett a rendszer általános energiahatékonyságának javítására szolgál.

A szivattyú öntözi a kiskertet, ügyeljen arra, hogy mindig megfelelő mennyiségű víz álljon rendelkezésre.

Program 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

Az automatikus öntözőrendszer kalibrálása:

• Teljes hardverrel helyezze az elektródát a talajra, valahol a víz áramlási útján.
• Most változtassa meg a program két értékét. 1) Az összes növény öntözéséhez szükséges idő (percben). 2) Küszöbszint, amely alatt az arduino beindítja a szivattyút. A százalékos értékeket csak 80, 70, 60, 50, 40, 30, 20 adhatja meg.

int Idő = 5 // Az idő beállítása percben
int küszöb = 30 // a küszöböt csak 80, 70, 60, 50, 40, 30, 20 százalékban állítja be.

Módosítsa a program értékeit.

• Töltse fel a kódot az arduino-ra és áramellátásra. Megjelenik a „öntsön vizet és nyomja meg a kalibrálást” felirat. Most kézzel kell öntöznie a kertjét megfelelő szintre.
• A kert öntözése után nyomja meg a kalibrálás gombot. Ez meghatározza a villamos energia vezetését teljesen nedves talajban, és pillanatnyi képet ad a referenciaértékről.
• Most a rendszer készen áll a kiskert szolgálatára. Kérjük, próbálja meg hozzáadni a tápellátást ehhez a projekthez. Ha az áramellátás megszűnik, a kalibrált referenciaérték törlődik a memóriából, és újra kell kalibrálnia a rendszert.

A szerző prototípusa:

Arduino alapú automatikus öntözési prototípus kép

A talaj nedvességszintjének jelzése:

Miután a szivattyú BE van kapcsolva, megjelenik a kikapcsolás hátralévő ideje (másodpercben).




Előző: 3 intelligens lézeres riasztásvédelmi áramkör Következő: OCL erősítő megmagyarázva