Схема автоматического полива с использованием Arduino

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся построить автоматизированную систему полива воды для небольшого сада с использованием Arduino и датчика влажности почвы.

Вступление

Предлагаемая система может следить за уровнем влажности почвы и когда влажность почвы опускается ниже заданного значения, насос 12 В постоянного тока будет запущен на заданный период времени. Состояние уровня влажности почвы и других функций системы можно контролировать с помощью ЖК-дисплея 16 x 2 в режиме реального времени.



По оценкам, на земном шаре есть 3 триллиона деревьев, что больше, чем количество стартов в нашей родной галактике Млечный Путь, которое оценивается в 100 миллиардов. Но мы, люди, рубим бесчисленное количество деревьев, чтобы удовлетворить свои основные потребности в роскоши.

Мать-природа спроектирована с системой обратной связи: когда вид вносит огромные нарушения, природа стирает этот вид с лица земли.



Люди неосознанно нарушали природу на протяжении веков, но даже после значительного развития науки и техники уровень нарушений не уменьшился.

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

Датчик влажности почвы:

Сердце проекта - это датчик влажности почвы который может определять количество влаги в почве. Датчик выдает аналоговое значение, а микроконтроллер интерпретирует эти значения и отображает содержание влаги.

Есть два электрода, которые будут вставлены в почву. Электроды подключены к печатной плате, состоящей из компаратора IC, светодиода, входных и выходных контактов подстроечного резистора.

Изображение датчика влажности почвы:

модуль датчика влажности почвы

Он имеет 4 + 2 контакта, 2 контакта для подключения электродов, а остальные 4 контакта - это Vcc, GND, цифровой выход и аналоговый выход. Мы собираемся использовать только аналоговый выходной вывод для измерения влажности почвы.
Поскольку мы не используем цифровой выходной контакт, мы не будем использовать встроенный подстроечный резистор для калибровки датчика.

На этом мы завершаем работу датчика влажности почвы.

Принципиальная схема:

Схема довольно проста и удобна для новичков. Схема разделена на две части одного и того же проекта, чтобы избежать путаницы при дублировании проекта.

Схема подключения ЖК-дисплея для системы автоматического полива

Приведенная выше схема - это ЖК-дисплей для arduino проводка. Потенциометр 10K предназначен для регулировки контрастности ЖК-дисплея.

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

Вот остальная часть схемы, состоящая из датчика влажности почвы, насоса 12 В постоянного тока, кнопки калибровки и источника питания 12 В (1-2 А). Используйте источник питания с номинальным током насоса 12 В постоянного тока не менее 500 мА.

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) Пороговый уровень, ниже которого ардуино запускает помпу. Вы можете установить только процентные значения 80, 70, 60, 50, 40, 30, 20.

int Time = 5 // Устанавливаем время в минутах
int threshold = 30 // установить порог только в процентах 80, 70, 60, 50, 40, 30, 20.

Измените значения в программе.

• Загрузите код в Arduino и включите схему. Он отобразит «залейте воду и нажмите калибровку». Теперь вам нужно вручную полить сад до достаточного уровня.
• После полива сада нажмите кнопку калибровки. Это определит проводимость электричества в полностью влажной почве и мгновенно снимет эталонное значение.
• Теперь система готова к обслуживанию вашего небольшого сада. Пожалуйста, попробуйте добавить резервную копию для этого проекта. При отключении питания эталонное откалиброванное значение будет стерто из памяти, и вам придется откалибровать систему заново.

Авторский прототип:

Изображение прототипа автоматического полива на базе Arduino

Индикация уровня влажности почвы:

После включения помпы на ней отобразится оставшееся время до выключения (в секундах).




Предыдущая статья: 3 умных схемы защиты от лазерной сигнализации Далее: Объяснение усилителя OCL