Создание прибора умного полива комнатных растений

XXVIII Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Создание прибора умного полива комнатных растений

Кокунина А.И. 1Дедюхин Е.А. 2Вдовин Е.А. 3
1ГБОУ Школа № 1498 г. Москва
2МАОУ СОШ № 68 г. Тюмень
3МАОУ СОШ № 92 г. Тюмень
Кожин П.Н. 1
1МАОУ СОШ № 68 г. Тюмень
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

В современном мире всё больше людей увлекаются выращиванием комнатных растений. Однако уход за ними требует времени, знаний и постоянного внимания, особенно в вопросах полива. Недостаток или избыток влаги может привести к болезням и гибели растений. Автоматизация этого процесса позволяет не только облегчить уход, но и создать оптимальные условия для роста и развития зелёных насаждений дома, что особенно актуально для занятых людей и во время длительного отсутствия.

Актуальность

У нашей бабушки дома на балконе растут цветы. Иногда на подоконнике появляется рассада. Регулярный полив – залог успешного выращивания комнатных растений. Но не всегда есть возможность следить за влажностью и поливать растения вручную. Часто они страдают от пересушивания или переувлажнения почвы.

Однажды на просторах интернета мы увидели, как собирается система полива для большого объёма растений. Система была очень массивная со сложной схемой. Такая система найдёт применение в профессиональных выращиваниях и теплицах. Тогда у нас появилась идея собрать подобную для домашнего использования.

Цели и задачи

Цель работы:

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

Задачи:

  • Изучить принципы работы программирования и управления электроникой.

  • Распределить зоны ответственности в команде.

  • Подобрать и собрать необходимые компоненты.

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

  • Реализовать схему подключения и написать программный код для управления системой.

  • Провести тестирование и отладку работы устройства.

  • Внести поправки в работу устройства.

  • Презентовать бабушке нашу систему.

Создание прибора «Умный горшок»

Для создания прибора «Умный горшок» мы продумали несколько этапов:

Подготовительный этап.

Изучили литературу и примеры аналогичных систем. Составили список необходимых компонентов и проанализировали у кого, что есть. Распределили зоны ответственности. Нам понадобились:

- плата Arduinonano, которая управляет всей электроникой;

- светодиод, который показывает, что система работает (мигает);

- реле, необходимое для включения помпы;

- датчик влажности для определения влажности в почве и необходимости полива;

- датчик температуры;

- помпа, которую достали из электроники, находящейся дома.

Сборка схемы.

Нашей задачей было:

- подключение датчика влажности к плате Arduino.

- подключение реле и помпы для управления поливом.

- подключение светодиода для индикации работы.

- подключения датчика температуры.

Рисунок 1. Процесс сборки системы

Программирование

Для запуска датчика влажности и температуры нужно было написать код.

Мы установили: если влажность ниже заданного порога — включить помпу через реле. Программирование индикации: мигание светодиода во время работы и полива.

Рисунок 2. Написание кода

Для написания кода мы использовали программу ArduinoIDE, где язык программирования, основанный на С/С++. Кодвыглядитследующимобразом:

#include <TM1637Display.h>

#include <DHT.h>

// ПИНЫ

int relay = 5;           // помпа

int sensorPin = 1;      // датчикпочвы

int sensorPower = 2;    // питаниедатчикапочвы

int led = 8;             // светодиод

// ПИНЫ ДЛЯ ЭКРАНА

#define CLK 10

#define DIO 9

TM1637Display display(CLK, DIO);

#define DHTPIN 4

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

// НАСТРОЙКИ

int suho = 2000;              // ВЫШЕ этого поливаем

int vremyaPoliva = 2000;      // время полива

int intervalDHT = 10;         // интервал проверки датчика т. и в.

int intervalSoil = 10;        // интервал проверки датчика почвы

int state = 0;

// ТАЙМЕРЫ

unsigned long timerPoliv = 0;

unsigned long timerOzhidanie = 0;

unsigned long lastLedChange = 0;

unsigned long timerDHT = 0;

unsigned long timerSoil = 0;

unsigned long timerDisplay = 0;

int bright = 5;

int dir = 1;

float vlagaVozduha = 0;

float temp = 0;

int displayMode = 0;

const uint8_t hSeg[] = { 0b01110110, 0, 0, 0 };  // h

const uint8_t tSeg[] = { 0b01111000, 0, 0, 0 };  // t

void setup() {

  pinMode(relay, OUTPUT);

  pinMode(sensorPower, OUTPUT);

  pinMode(led, OUTPUT);

  digitalWrite(relay, LOW);

  digitalWrite(sensorPower, LOW);

  

  display.setBrightness(5);

  display.clear();

  

  dht.begin();

  

  Serial.begin(9600);

  

  delay(500);

  vlagaVozduha = dht.readHumidity();

  temp = dht.readTemperature();

  temp = (temp);

  if (isnan(vlagaVozduha)) vlagaVozduha = 0;

  if (isnan(temp)) temp = 0;

  

  timerDHT = millis();

}

int readSoilSensor() {

  digitalWrite(sensorPower, HIGH);

  delay(100);

  int val = analogRead(sensorPin);

  digitalWrite(sensorPower, LOW);

  return val;

}

void loop() {

  unsigned long now = millis();

  if (now - timerDHT >= (unsigned long)intervalDHT * 1000) {

    timerDHT = now;

    vlagaVozduha = dht.readHumidity();

    temp = dht.readTemperature();

    temp = (temp);

    if (isnan(vlagaVozduha)) vlagaVozduha = 0;

    if (isnan(temp)) temp = 0;

    

    Serial.print("Воздух: ");

    Serial.print(vlagaVozduha);

    Serial.print("%  Температура: ");

    Serial.println(temp);

  }

  if (now - timerDisplay >= 5000) {

    timerDisplay = now;

    displayMode = 1 - displayMode;

  }

  if (displayMode == 0) {

    int val = (int)vlagaVozduha;

    display.showNumberDec(val, false, 2, 2);

    display.setSegments(hSeg, 1, 0);

  } else {

    int val = (int)temp;

    display.showNumberDec(val, false, 2, 2);

    display.setSegments(tSeg, 1, 0);

  }

  if (state == 0) {

    if (now - lastLedChange >= 30) {

      lastLedChange = now;

      bright += dir;

      if (bright >= 40) { bright = 40; dir = -1; }

      if (bright <= 5) { bright = 5; dir = 1; }

      analogWrite(led, bright);

    }

    if (now - timerSoil >= (unsigned long)intervalSoil * 1000) {

      timerSoil = now;

      int vlagaPochvy = readSoilSensor();

      

      Serial.print("Почва: ");

      Serial.println(vlagaPochvy);

      if (vlagaPochvy > suho) {

        Serial.println("полив");

        state = 1;

        timerPoliv = now;

        digitalWrite(relay, HIGH);

        bright = 0;

        dir = 1;

      }

    }

  }

  else if (state == 1) {

    if (now - lastLedChange >= 15) {

      lastLedChange = now;

      bright += dir * 15;

      if (bright >= 255) { bright = 255; dir = -1; }

      if (bright <= 0) { bright = 0; dir = 1; }

      analogWrite(led, bright);

    }

    if (now - timerPoliv >= vremyaPoliva) {

      digitalWrite(relay, LOW);

      state = 2;

      timerOzhidanie = now;

      analogWrite(led, 10);

    }

  }

  else if (state == 2) {

    if (now - timerOzhidanie) {

      state = 0;

      bright = 5;

      dir = 1;

    }

  }

}

Тестирование

Каждый раз мы проверяли работу компонентов по отдельности и в комплексе. Настраивали датчик влажности. Испытывали прибор в реальных условиях с растениями.

Изначально у нас был дисплей, который при работе прибора светился красным.

Рис. 3. Прибор «Умный горшок» с дисплеем

Но при запуске возникла проблема. Экран потреблял много энергии и прибор работал с перебоями. Пришлось отказаться от него. Также возникла проблема при загрузке кода на ArduinoIDE. Программа постоянно выдавала ошибку.

После устранения всех недочётов и отключения дисплея с подсветкой, наш прибор «Умный горшок» был представлен бабушке.

Бабушка оценила нашу идею. Арина показала ей, как всё работает. В процессе тестирования они пришли к выводу, что необходимо доработать прибор и поставить датчик температуры и влажности окружающей среды. Окна открываются на проветривание в любое время года. И часто растения от этого страдают. В осенне-зимний период также есть риск пересушивания почвы, когда батареи очень горячие. Наши датчики смогут решить эти проблемы.

Рисунок 4. Установка датчика влажности окружающей среды и температуры

Рисунок 5. t – температура; н - влажность

Заключение

В ходе выполнения работы мы смогли разработать и реализовать в домашних условиях систему «Умный полив», предназначенную для автоматизации полива комнатных растений. Актуальность проекта обусловлена необходимостью поддерживать оптимальный уровень влажности почвы, что особенно важно при длительном отсутствии владельцев или в условиях высокой занятости.

В процессе работы были изучены принципы действия датчиков влажности и основы управления электронными компонентами. Подобраны и собраны необходимые детали: Arduinonano, датчик влажности, датчик температуры, реле, помпа, светодиод. Разработан алгоритм работы устройства, реализована схема подключения и написан программный код на языке C/C++ с использованием среды Arduino IDE. Проведено поэтапное тестирование всех компонентов и системы в целом, что позволило выявить и устранить недостатки, а также повысить надёжность работы прибора.

В результате был создан действующий прототип устройства, который способствует поддержанию здоровья растений, предотвращает их пересыхание или переувлажнение, а также позволяет экономить воду и время владельца.

Источники информации

  1. Платформа для создания электронных устройств. [Электронный ресурс]. – URL:

https://www.arduino.cc/reference/en/

  1. Почему возникает ошибка при загрузке кода на плату Arduino Nano? [Электронный ресурс]. – URL:

https://ya.ru/neurum/c/nauka-i-obrazovanie/q/pochemu_voznikaet_oshibka_pri_zagruzke_koda_3cf6264c

  1. Многоканальная система автополива на Arduino. [Электронный ресурс]. – URL:

https://alexgyver.ru/auto-pumps/

Просмотров работы: 28