Automatski krug za navodnjavanje pomoću Arduina

Isprobajte Naš Instrument Za Uklanjanje Problema





U ovom ćemo postu izraditi automatizirani sustav navodnjavanja vodom za mali vrt koristeći arduino i senzor vlažnosti tla.

Uvod

Predloženi sustav može nadzirati razinu vlage u tlu a kada vlaga tla padne ispod unaprijed zadane vrijednosti, 12V istosmjerna crpka aktivirat će se unaprijed određeno vrijeme. Status razine vlage u tlu i ostale funkcije sustava mogu se pratiti putem LCD zaslona 16 x 2 u stvarnom vremenu.



Procjenjuje se da širom svijeta postoji 3 bilijuna stabala, što je više od broja startova u našoj matičnoj galaksiji Mliječni put, koji se procjenjuje na 100 milijardi. Ali, mi ljudi sječemo nebrojeni broj stabala kako bismo ispunili svoje osnovne potrebe prema luksuznim potrebama.

Majka priroda dizajnirana je sa sustavom povratnih informacija, kada vrsta unese ogromne smetnje, priroda će je izbrisati iz postojanja.



Ljudska su bića stoljećima nesvjesno uznemirivala prirodu, ali, čak i nakon velikog razvoja znanosti i tehnologije, stopa uznemiravanja nije se smanjila.

Klimatske promjene jedan su od primjera, kada postane dovoljno drastično, naša vrsta neće dugo potrajati.
Ovaj projekt napravi mali korak naprijed kako bi sačuvao prirodu, može navodniti vaš ljupki mali vrt bez ikakve ljudske interakcije. Sada ćemo prijeći na tehničke detalje projekta.

Osjetnik vlage u tlu:

Srce projekta je senzor vlažnosti tla koji mogu osjetiti količinu sadržaja vlage u tlu. Senzor daje analognu vrijednost, a mikrokontroler će ih interpretirati i prikazati sadržaj vlage.

Postoje dvije elektrode koje će se umetnuti u tlo. Elektrode su spojene na pločicu koja se sastoji od usporedne IC, LED diode, ulaznih i izlaznih pinova otpornika trimera.

Prikaz senzora vlažnosti tla:

modul osjetnika vlage u tlu

Ima 4 + 2 pina, 2 pina za povezivanje elektroda, a ostatak od 4 pina su Vcc, GND, digitalni izlaz i analogni izlaz. Upotrijebit ćemo samo analogni izlazni zatik za otkrivanje vlažnosti tla.
Budući da ne koristimo digitalni izlazni pin, nećemo koristiti ugrađeni otpornik trimera za kalibraciju senzora.

To je zaključilo senzor vlažnosti tla.

Shematski dijagram:

Krug je prilično jednostavan i prilagođen početnicima. Shema je podijeljena u dva dijela istog projekta kako bi se smanjila zabuna dok se projekt duplicira.

Shema ožičenja LCD-a za sustav automatskog navodnjavanja

Gornja shema je LCD na arduino ožičenje. Za podešavanje kontrasta LCD zaslona osiguran je 10K potenciometar.

Sustav automatskog navodnjavanja zasnovan na mikrokontroleru

Ovdje je ostatak sheme koji se sastoji od senzora vlage u tlu, 12V istosmjerne pumpe, kalibriranog gumba i 12V (1 - 2 amp) napajanja. Molimo koristite napajanje barem veće od 500mA trenutne vrijednosti 12V istosmjerne pumpe.

MOSFET IRF540N (ili bilo koji ekvivalentni N-kanal) koristi se umjesto BJT-ova za poboljšanje ukupne energetske učinkovitosti sustava.

Pumpa će vam zalijevati mali vrt, pobrinite se da uvijek imate na raspolaganju odgovarajuću količinu vode.

Kod programa:

//-------------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

Kako kalibrirati ovaj sustav automatskog navodnjavanja:

• S dovršenim hardverom umetnite elektrodu na tlo, negdje na putu protoka vode.
• Sada promijenite dvije vrijednosti u programu 1) Količina vremena koja će vam trebati da zalije sve biljke (u minutama). 2) Razina praga ispod koje arduino aktivira pumpu. Možete postaviti samo postotne vrijednosti 80, 70, 60, 50, 40, 30, 20.

int Vrijeme = 5 // Podesite vrijeme u minutama
int prag = 30 // prag postaviti samo u postocima 80, 70, 60, 50, 40, 30, 20.

Promijenite vrijednosti u programu.

• Učitajte kod u arduino i napajajte krug. Prikazat će se 'ulijte vodu i pritisnite kalibriraj'. Sada svoj vrt morate ručno zalijevati na dovoljnu razinu.
• Nakon zalijevanja vrta pritisnite gumb za kalibriranje. To će odrediti provođenje električne energije u potpuno vlažnom tlu i snimiti referentnu vrijednost.
• Sad je sustav spreman za opsluživanje vašeg malog vrta. Pokušajte dodati sigurnosnu kopiju za ovaj projekt. Kad napajanje prestane, referentna kalibrirana vrijednost izbrisat će se iz memorije i morat ćete ponovno kalibrirati sustav.

Autorski prototip:

Slika prototipa automatskog navodnjavanja na osnovi Arduina

Oznaka razine vlažnosti tla:

Nakon što je pumpa UKLJUČENA, prikazat će preostalo vrijeme za isključivanje (u sekundama).




Prethodno: 3 pametna laserska zaštitna kruga Dalje: Objašnjeno OCL pojačalo