Автоматичний полив рослин на Arduino

Avatar
Автор Тетяна
Викладач технічних дисциплін у Відокремленому структурному підрозділі «Заліщицький фаховий коледж імені Є. Храпливого Національного університету біоресурсів і природокористування України»
Рівень складності Середній
Рівень небезпеки Безпечно, але під наглядом керівника
Доступність використовуваних матеріалів На рівні шкільного обладнання
Орієнтовний час на виконання роботи До 1 доби

Блок 1. Резюме

Домашні рослини є не лише прикрасою у квартирі. Вони виділяють у зовнішнє середовище кисень, усувають запиленість приміщень, а також знешкоджують токсичні домішки, що перебувають у повітрі. Тому так важливо, щоб рослина завжди залишалася здоровою, а для цього потрібно правильно її поливати. Часто господарі не знають, як правильно це робити, або просто забувають. Така безвідповідальність призводить до різноманітних хвороб рослин. Це конструкторське проєктування присвячено вивченню питань, пов’язаних із розробкою роботизованих пристроїв на платформі Arduino Uno, зокрема пристрою, здатного забезпечувати рослини водою залежно від її виду та умов середовища.

Мета проєкту:  розробити систему поливу рослин, що дає змогу автоматизувати процес їхнього вирощування.

Завдання проєкту: розробити пристрій для автоматичного поливу рослин та алгоритм його роботи; перевірити роботу пристрою практично.

Блок 2. Попередня інформація

У процесі реалізації необхідно:

  • вивчити можливості платформи Arduino Uno, принципи роботи мікроконтролера та способи підключення датчиків та помпи;
  • вивчити мову C (Сі) в обсязі, необхідному для реалізації автополиву при програмуванні мікроконтролера;
  • провести вимірювання тривалості роботи помпи та частоти поливу;
  • зібрати пристрій автополиву рослин.

Блок 3. Обладнання

  • Клон Arduino UNO з USB-кабелем;
  • датчик вологості ґрунту + модуль;
  • водяна помпа;
  • модуль реле 5В 10А;
  • набір проводів;
  • шланг для поливу;
  • акумулятор від телефона з перетворювачем;
  • батарейка “Крона”.

Блок 4. Експериментальна процедура

Датчик вологості ґрунту

Датчик вологості ґрунту вимірює вологість і виводить аналоговим сигналом від 0 до 1023 або цифровим (0 або 1). Ми будемо використовувати аналоговий сигнал для більшого контролю мінливої ​​вологості. Значення 0 – це максимум вологості, 1023 – максимум сухий. Ми будемо використовувати значення 200 – достатня вологість, значення 600 – критична сухість. Пороги вологості та сухості за необхідності можна змінити в скетчі arduino. Сам датчик складається з двох частин: щуп (опускається в землю) та компаратор. Записується датчик від 3.3 до 5 вольтів, можна використовувати вбудований роз’єм arduino.

Схема компаратора на LM393:

Дані виходять по сигнальному дроту a0, підключається так:

 

Практична реалізація

Логіка роботи: раз на секунду (можна зробити більші проміжки) arduino набуває значення вологості з датчика. При отриманні значення понад 550 і якщо помпа не працювала протягом найближчих 15 хвилин, arduino вмикає реле (до якого підключена помпа) на час time_work. Затримка 15 хвилин між поливами зроблена для того, щоб вода встигла вбратися в ґрунт і помпа перекачала більше води, ніж треба. Змінна time_work установлює час роботи помпи, за який вона встигне викачати потрібну вашій рослині кількість води.
Після поливу встановлюється затримка 15 хвилин для роботи помпи, при цьому arduino продовжує стежити за вологістю. А далі все циклічно. З часом зроблю датчик рівня води, щоб помпа не вмикалася, якщо в резервуарі мало води, та видавалася індикація.

Схема підключення:

Програма Arduino

int minv = 600; / / мала вологість
int maxv = 220; / / Повний полив
int normv = 500;//трохи волога
int value = 0;//отримане значення
int last_value = 0;// остання значуща зміна
int value_sdvig =50;//значна зміна
int ralay = 6; //пін реле
int time_work = 10; / / час роботи помпи в сік
int analogPin = A0;//пін датчика

//Змінні тайм-ауту
int second = 0; // секунди
int time_off = 0; // лічильник часу, що залишився
int pause_time = 15; // час відпочинку після поливу у хвилинах

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ralay, HIGH);//налаштування реле
digitalWrite(ralay, HIGH);
}

void poliv()
{
int time_tmp;
time_tmp=time_work;
digitalWrite(ralay, LOW);
while(time_tmp>0 && value>normv){// чекаємо закінчення часу time_work або нормальної вологості ґрунту
delay(1000);
value=analogRead(analogPin);//оновлюємо значення вологості
time_tmp–;
}
digitalWrite(ralay, HIGH);
second=0; // скидаємо секунди на нуль
time_off=pause_time;// встановлюємо затримку між поливами
}

void loop() {
// put your main code here, to run repeatedly:
value=analogRead(analogPin);
if (value>(last_value+value_sdvig)||value<(last_value-value_sdvig)){// якщо last_value відхилився на value_sdvig виводимо value в uart
Serial.println(value);
last_value=value;
}
if ((value>(minv-value_sdvig)) && time_off<1) poliv();//якщо значення вологості > критична вологість – 50 і не було недавніх поливів
// тимчасові функції що не грати з таймерами
if (second>59)
{
second=0;
if (time_off>0) time_off–;
}
delay(1000);//пауза 1 сек
second++;
}

Блок 5. Аналіз отриманих даних

Автополив на Arduino має великі перспективи розвитку не лише в домашніх умовах для поливу кімнатних рослин, а й для використання в сучасному сільському господарстві.