Arduino kullanarak Otomatik Sulama Devresi

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, arduino ve toprak nem sensörünü kullanarak küçük bahçeler için otomatik bir su sulama sistemi inşa edeceğiz.

Giriş

Önerilen sistem şunları yapabilir: toprak nem seviyesini izleyin ve toprak nemi önceden belirlenmiş değerin altına düştüğünde, 12V DC pompa önceden belirlenmiş bir süre için tetiklenecektir. Toprak nem seviyesinin durumu ve sistemin diğer fonksiyonları 16 x 2 LCD ekran üzerinden gerçek zamanlı olarak izlenebilir.



Dünyada, 100 milyar olduğu tahmin edilen Samanyolu galaksimizdeki başlangıç ​​sayısından daha fazla olan 3 trilyon ağaç olduğu tahmin edilmektedir. Ama biz insanlar, lüks ihtiyaçlarımızı karşılayabilmek için sayısız ağaç kesiyoruz.

Tabiat Ana bir geri bildirim sistemi ile tasarlandı, bir tür büyük rahatsızlıklara girdiğinde, doğa türleri varoluştan silecek.



İnsanlar yüzyıllardır bilmeden doğayı rahatsız ediyorlardı, ancak bilim ve teknolojideki büyük gelişmelerden sonra bile rahatsızlık oranı azalmadı.

Örneklerden biri iklim değişikliği, yeterince sertleştiğinde türümüz çok uzun sürmeyecek.
Bu proje doğayı korumak için bir bebek adımı atıyor, sevimli küçük bahçenizi hiçbir insan etkileşimi olmadan sulayabiliyor. Şimdi projenin teknik ayrıntılarına geçelim.

Toprak Nemi Sensörü:

Projenin kalbi toprak nem sensörü topraktaki nem içeriği miktarını algılayabilir. Sensör analog değer verir ve bir mikro denetleyici bu değerleri yorumlayacak ve nem içeriğini gösterecektir.

Toprağa sokulacak iki adet elektrot vardır. Elektrotlar, karşılaştırıcı IC, LED, düzeltici direnç giriş ve çıkış pinlerinden oluşan bir devre kartına bağlanır.

Toprak nem sensörünün resmi:

toprak nem sensörü modülü

4 + 2 pin, elektrot bağlantısı için 2 pin vardır ve kalan 4 pin Vcc, GND, dijital çıkış ve analog çıkıştır. Toprak nemini algılamak için sadece analog çıkış pini kullanacağız.
Dijital çıkış pini kullanmadığımız için, sensörü kalibre etmek için yerleşik düzeltici direnci kullanmayacağız.

Şimdi, bu toprak nem sensörünü tamamlıyor.

Şematik diyagram:

Devre oldukça basit ve başlangıç ​​dostu tutulur. Şematik, projeyi kopyalarken karışıklığı azaltmak için aynı projenin iki parçasına bölünmüştür.

Otomatik Sulama Sistemi için LCD kablo bağlantı şeması

Yukarıdaki şematik, LCD'den arduino'ya kablolama. LCD ekranın kontrastını ayarlamak için bir 10K potansiyometre sağlanmıştır.

Mikrodenetleyici tabanlı Otomatik Sulama Sistemi

Toprak nem sensörü, 12V DC pompa, kalibre butonu ve 12V (1 - 2 amper) güç kaynağından oluşan şemanın geri kalanı burada. Lütfen en az 500mA 12V DC pompanın akım değerinden daha büyük bir güç kaynağı kullanın.

Sistemin genel güç verimliliğini artırmak için BJT'ler yerine MOSFET IRF540N (veya herhangi bir eşdeğer N kanalı) kullanılır.

Pompa, küçük bahçenizi sulayacaktır, her zaman yeterli miktarda su bulunduğundan emin olun.

Program kodu:

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

Bu otomatik sulama sistemi nasıl kalibre edilir:

• Tamamlanmış donanımla elektrodu toprağa, su akışı yolunda bir yere yerleştirin.
• Şimdi programdaki iki değeri değiştirin 1) Tüm bitkilerin sulanması için gereken süre (dakika olarak). 2) Altındaki arduino'nun pompayı tetiklediği eşik seviyesi. Yalnızca yüzde 80, 70, 60, 50, 40, 30, 20 değerlerini ayarlayabilirsiniz.

int Time = 5 // Zamanı dakika olarak ayarla
int eşik = 30 // eşiği yalnızca yüzde 80, 70, 60, 50, 40, 30, 20 olarak ayarlayın.

Programdaki değerleri değiştirin.

• Kodu arduino ya yükleyin ve devreye güç verin. 'Suyu dökün ve kalibre et' e basın. Artık bahçenizi yeterli seviyeye kadar elle sulamanız gerekiyor.
• Bahçeyi suladıktan sonra kalibre düğmesine basın. Bu, tamamen nemli toprakta elektriğin iletimini belirleyecek ve referans değerini hızlı bir şekilde vuracaktır.
• Sistem artık küçük bahçenize hizmet vermeye hazırdır. Lütfen bu proje için bir yedek güç eklemeyi deneyin. Güç kesildiğinde referans olarak kalibre edilen değer hafızadan silinecek ve sistemi yeniden kalibre etmeniz gerekecektir.

Yazarın prototipi:

Arduino tabanlı Otomatik Sulama Prototip Görüntüsü

Toprak nem seviyesinin göstergesi:

Pompa AÇIK konuma getirildiğinde, kapanmak için kalan süreyi (saniye cinsinden) gösterecektir.




Önceki: 3 Akıllı Lazer Alarm Koruma Devresi Sonraki: OCL Amplifikatörü Açıklaması