Автоматична напоителна верига с използване на Arduino

Автоматична напоителна верига с използване на Arduino

В тази публикация ще изградим автоматизирана система за напояване на вода за малка градина, използвайки сензор за ардуино и влага в почвата.



Въведение

Предложената система може следете нивото на влага в почвата и когато влагата на почвата падне под предварително зададената стойност, 12V DC помпата ще се задейства за предварително определен период от време. Състоянието на нивото на влага в почвата и други функции на системата могат да бъдат наблюдавани чрез 16 x 2 LCD дисплей в реално време.

Смята се, че има 3 трилиона дървета по целия свят, което е по-голямо от броя на стартирането в нашата домашна галактика Млечен път, което се оценява на 100 милиарда. Но ние, хората, изрязваме безброй дървета, за да задоволим основните си нужди към луксозните нужди.





Майката природа е проектирана със система за обратна връзка, когато видът въведе огромни смущения, природата ще унищожи вида.

Човешките същества са нарушавали природата несъзнателно в продължение на векове, но дори след голямо развитие в науката и технологиите степента на безпокойство не е намаляла.



Изменението на климата е един от примерите, когато стане достатъчно драстично, нашите видове няма да издържат дълго.
Този проект прави бебешка крачка напред, за да запази природата, той може да напоява вашата прекрасна малка градина без никакво човешко взаимодействие. Сега нека да влезем в техническите подробности за проекта.

Сензор за влага в почвата:

Сърцевината на проекта е сензор за влага в почвата което може да усети количеството на влагата в почвата. Сензорът издава аналогова стойност и микроконтролер ще интерпретира тези стойности и ще покаже съдържанието на влага.

Има два електрода, които ще бъдат вкарани в почвата. Електродите са свързани към платка, състояща се от компаратор IC, LED, тример резистор входни и изходни щифтове.

Илюстрация на сензор за влага в почвата:

модул за сензор за влага в почвата

Той има 4 + 2 щифта, 2 щифта за свързване на електрод, а останалите 4 пина са Vcc, GND, цифров изход и аналогов изход. Ще използваме само аналоговия изходен щифт за определяне на влажността на почвата.
Тъй като не използваме цифрови изходни щифтове, няма да използваме вграден тримерен резистор за калибриране на сензора.

Това завършва сензора за влага в почвата.

Схематична диаграма:

Веригата се поддържа доста проста и удобна за начинаещи. Схемата е разделена на две части от един и същ проект, за да се намали объркването при дублиране на проекта.

Схема за свързване на LCD за автоматична напоителна система

Горната схема е LCD към arduino електрически инсталации. Предвиден е 10K потенциометър за регулиране на контраста на LCD дисплея.

Автоматична напоителна система, базирана на микроконтролер

Ето и останалата част от схемата, състояща се от сензор за влага в почвата, 12V DC помпа, бутон за калибриране и 12V (1 - 2 ампера) захранване. Моля, използвайте захранване най-малко по-голямо от 500 mA от текущия рейтинг на 12V DC помпа.

MOSFET IRF540N (или всеки еквивалентен N-канал) се използва вместо BJT, за да се подобри цялостната енергийна ефективност на системата.

Помпата ще ви напоява малка градина, уверете се, че винаги разполагате с достатъчно количество вода.

Код на програмата:

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

Как да калибрирате тази автоматична напоителна система:

• С завършен хардуер, поставете електрода върху почвата, някъде по пътя на водния поток.
• Сега променете двете стойности в програмата 1) Времето, необходимо за напояване на всички растения (в минути). 2) Прагово ниво, под което arduino задейства помпата. Можете да зададете процентни стойности само 80, 70, 60, 50, 40, 30, 20.

int Time = 5 // Задаване на време в минути
int праг = 30 // задаване на праг само в проценти 80, 70, 60, 50, 40, 30, 20.

Променете стойностите в програмата.

• Качете кода в arduino и захранвайте веригата. На дисплея ще се появи „налейте вода и натиснете калибриране“. Сега трябва ръчно да поливате градината си до достатъчно ниво.
• След напояване на градината, натиснете бутона за калибриране. Това ще определи проводимостта на електричеството в напълно влажна почва и щракне референтната стойност.
• Сега системата е готова да обслужва вашата малка градина. Моля, опитайте се да добавите резервно захранване за този проект. Когато захранването откаже, референтната калибрирана стойност ще бъде изтрита от паметта и ще трябва да калибрирате системата отново.

Прототип на автора:

Автоматично напоително изображение на базата на Arduino

Индикация за нивото на влага в почвата:

След като помпата е ВКЛЮЧЕНА, тя ще покаже оставащото време за изключване (в секунди).




Предишен: 3 интелигентни лазерни алармени вериги Напред: Обяснен OCL усилвател