Создание системы автоматического полива комнатных растений на базе микрокомпьютера Arduino Uno R3

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

Создание системы автоматического полива комнатных растений на базе микрокомпьютера Arduino Uno R3

Быстров П.А. 1
1МБОУ "Лицей №5", г Казань
Быстров Ф.А. 1
1Казанский Федеральный Университет
Автор работы награжден дипломом победителя II степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Комнатные растения являются неотъемлемой частью интерьера многих домов и квартир. Они выполняют несколько важных функций: создают уютную атмосферу, улучшают микроклимат, очищая воздух, и часто дарят эстетическое удовольствие. Для многих людей растения - это больше, чем просто декор; они могут быть дороги как память или представлять ботаническую ценность [3].

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

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

  2. Человеческий фактор. В повседневной суете даже ответственный человек может просто забыть полить цветы. Недостаток опыта также может привести к неправильному режиму полива: переливу или, наоборот, длительной засухе.

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

Последствием этих проблем становится стресс и гибель растений, что особенно обидно, если цветок был подарен дорогим человеком, является редким сортом или выращивался годами [8].

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

Объект исследования: процесс автоматизации полива растений

Предмет исследования: микрокомпьютерная система на базе Arduino Uno R3

Цель: создать работающий прототип системы автоматического полива комнатных растений с помощью микрокомпьютера Arduino

Задачи:

  1. Изучить основные компоненты платформы Arduino и принципы их работы.

  2. Собрать электрическую схему, подключив датчики, помпу и дисплей к Arduino.

  3. Написать и загрузить программу, которая будет управлять системой по заданному алгоритму.

  4. Протестировать готовую систему и сделать выводы о ее работе.

Методы исследования:

  1. Теоретический анализ: изучение специализированной литературы, онлайн-ресурсов и технической документации для получения знаний о компонентах системы и языке программирования.

  2. Экспериментальный метод: проведение практических опытов по пайке компонентов, сборке и отладке электрической цепи, а также пошаговая отладка программного кода.

  3. Практическое моделирование: тестирование системы в смоделированной среде (на столе с растением и резервуаром для воды) для проверки ее работоспособности и корректности реакции на различные условия (сухая/влажная почва, наличие/отсутствие воды).

Глава 1. Теоретическое обоснование проекта. Компоненты системы

Автоматический капельный полив на Ардуино представляет собой автоматизированную систему мониторинга параметров почвы и окружающей среды. В зависимости от полученных данных осуществляется управление исполнительными устройствами: включение/выключение водяных насосов для капельного полива растений. Такая система отлично подходит для автономного полива цветов дома и в саду, когда хозяева в отпуске, или для тех кто просто хочет переложить часть своих задач на роботов [1].

Для создания системы автоматического полива мне понадобились следующие основные компоненты:

1. Микрокомпьютер Arduino Uno R3 - это «мозг» всей системы. Он считывает показания с датчиков и, согласно загруженной программе, управляет другими устройствами (помпой, динамиком, дисплеем).

2. Датчик влажности почвы измеряет уровень влаги в земле. Он имеет аналоговый выход, что позволяет получать точные численные значения (например, от 200 до 700).

3. Датчик уровня воды (цифровой) определяет наличие или отсутствие воды в резервуаре. Он выдает цифровой сигнал (есть вода/нет воды).

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

5. ЖК-дисплей 1602 на этом экране, состоящем из двух строк по 16 символов, система отображает текущую влажность почвы и обратный отсчет до следующего полива.

6. Пьезодинамик издает звуковые сигналы для оповещения пользователя (например, если вода в банке закончилась).

7. Набор проводов и макетная плата для соединения всех компонентов в единую электрическую схему [2,7].

Рис.1. Компоненты, необходимые для создания системы автоматического полива

Глава 2. Практическая реализация проекта

2.1. Сборка аппаратной части

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

Этап 1. Подготовка компонентов к пайке

Перед началом пайки я тщательно подготовил рабочее место и все необходимые элементы:

  • Паяльник с подставкой

  • Припой и флюс

  • Двухжильные провода разного цвета (для удобства подключения)

  • Мультиметр для проверки качества пайки

Задача 1. Пайка датчиков влажности

Мне потребовалось аккуратно припаять провода к двум ключевым датчикам системы. К датчику влажности почвы нужно было подключить три провода - к контактам питания (VCC), земли (GND) и сигнальному выходу.

Такую же операцию предстояло выполнить с датчиком уровня воды, который также имеет три контакта для подключения. Особое внимание на этом этапе я уделил нескольким важным моментам.

Во-первых, использовал провода разного цвета согласно общепринятой маркировке: красный для питания +5V, черный для заземления GND и желтый для сигнальных контактов - это значительно упрощает последующее подключение и поиск возможных неисправностей.

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

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

Задача 2. Пайка ЖК-дисплея 1602

Эта работа оказалась самой сложной технической задачей во всем проекте. ЖК-дисплей 1602 имеет целых 16 контактов, к каждому из которых нужно было припаять специальные штырьковые разъемы для последующего подключения к макетной плате. Процесс потребовал максимальной аккуратности и последовательности действий.

Начал с надежной фиксации дисплея в специальном держателе - это исключало смещение компонента во время пайки. Затем приступил к последовательной пайке всех 16 контактов, постоянно следя за тремя критически важными параметрами: обеспечивал строго перпендикулярное расположение штырьков относительно платы дисплея, наносил равномерное количество припоя на каждый контакт и тщательно следил за отсутствием так называемых "соплей" - случайных перемычек между соседними контактами, которые могли привести к короткому замыканию. После завершения пайки провел тщательную проверку мультиметром, прозванивая контакты, чтобы убедиться в отсутствии коротких замыканий между ними, что гарантировало бы безопасную и корректную работу дисплея в собранной системе.

Рис. 2 Спаивание основных компонентов

Этап 2. Сборка электрической схемы

После успешного завершения пайки всех компонентов я приступил к сборке системы на макетной плате.

Первым делом я организовал систему питания, создав общие шины для плюса (+5V) и минуса (GND) вдоль всей макетной платы. Я использовал красные провода для шины +5V и черные для GND, чтобы всегда видеть, где что подключено.

Далее начал подключать датчики. Датчик влажности почвы, который будет "ощущать" сухость земли, я подключил к аналоговому пину A0 Arduino. Это важно, потому что он передает не просто сигнал "сухо/влажно", а точные численные значения от 0 до 1023, что позволяет программе точно определять уровень влажности. Датчик уровня воды я подключил к цифровому пину 7 - он сообщает только два состояния: "вода есть" или "воды нет".

Самой интересной частью было подключение исполнительных устройств системы. Водяную помпу нельзя подключать напрямую к Arduino, так как ей нужно больше энергии. Поэтому я использовал транзисторный ключ, который работает как мощный выключатель, управляемый слабым сигналом от пина 8. Это похоже на использование рычага: маленькое усилие от Arduino включает большую мощность для помпы. Пьезодинамик, который будет "голосом" системы, предупреждающим об отсутствии воды, я подключил непосредственно к пину 9 - для него не нужна большая мощность.

Особого внимания требовало подключение ЖК-дисплея, которое будет показывать всю информацию. Вместо того чтобы использовать все 16 контактов, я организовал подключение по 4-битной шине данных к пинам 2-5 Arduino. Отдельно подключил контакты питания и подсветки дисплея, чтобы он красиво подсвечивался.

Каждое соединение я проверял дважды, сверяясь со схемой. Особенно тщательно проверял подключения питания - перепутав плюс и минус, можно мгновенно вывести компонент из строя.

Этап 3. Организация питания и программирования

На завершающем этапе я установил Arduino Uno в центр системы и подключил USB-кабель к компьютеру. Это обеспечило одновременное питание всех компонентов (+5V) и возможность загрузки программы. С помощью мультиметра проверил напряжение в ключевых точках схемы.

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

После визуальной проверки всех соединений система была готова к программированию и тестированию [1,2,6,10].

2.2 Разработка программного обеспечения

Программа для Arduino была написана на упрощенном языке, основанном на C++. Она состоит из трех основных частей:

1. Функция setup

В этой функции происходит начальная настройка: какие порты будут использоваться для чтения данных (от датчиков), а какие - для управления устройствами (помпой, дисплеем, динамиком).

2. Функция loop

Это главный цикл, который повторяется постоянно. В нем происходит чтение данных с датчика влажности почвы, с датчика уровня воды. Логика системы: если почва сухая (показание датчика выше порогового значения) и в банке есть вода, то включается помпа для полива. Если почва сухая, но воды в банке нет, то включается пьезодинамик, чтобы подать звуковой сигнал. На дисплей выводится текущая влажность и время до следующей проверки.

3. Вспомогательная функция

Функция для организации задержки, во время которой на экран выводится обратный отсчет в минутах [1,2,6,10].

Рис.3 Разработка программного обеспечения

2.3 Тестирование и результаты

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

В режиме нормальной работы, когда датчик влажности почвы определял недостаточный уровень увлажненности (показывая значения выше порогового уровня), а датчик уровня жидкости, погруженный в воду, подтверждал наличие достаточного количества воды в резервуаре, система демонстрировала четкую и отлаженную работу: автоматически включалась водяная помпа, начинался процесс полива, а на ЖК-дисплее в реальном времени отображались текущие показания влажности грунта, что позволяло визуально контролировать процесс насыщения почвы влагой.

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

Рис. 4 Работа автоматической системы полива

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

Заключение

В ходе данной проектной работы мне удалось достичь поставленной цели – создать автоматическую систему полива комнатных растений на базе Arduino.

Выводы

  1. Платформа Arduino является удобным и мощным инструментом для создания простых систем «умного дома».

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

  3. Система обладает элементом «интеллекта»: она не просто поливает по таймеру, а анализирует состояние почвы и наличие воды.

Для придания системе законченного вида необходимо разработать и напечатать на 3D-принтере защитный корпус, который скроет все провода и платы, сделав устройство безопасным и эстетичным. Кроме того, в будущем систему можно улучшить, добавив возможность полива нескольких растений одновременно и подключив ее к Wi-Fi для удаленного контроля.

Список используемых источников

1. Автоматический полив своими руками на Ардуино. – URL: https://giant4.ru/blog/sovety-pokupatelyam/avtopoliv-statya/ (дата обращения: 26.10.2023).

2. Автополивщик растений на Arduino. – URL: https://wiki.amperka.ru/projects:irrigator (дата обращения: 26.10.2023).

3. Васильев В. В. Умный дом: автоматизация и управление. – М.: Эксмо, 2017. – 288 с.

4. Иванов И. И. Основы автоматизации систем полива. – М.: Техносфера, 2020. – 180 с.

5. Кузнецов К. К. Разработка и применение микроконтроллеров в системах управления. – М.: Инфра-М, 2021. – 300 с.

6. Петров П. П. Arduino для начинающих: практическое руководство. – СПб.: Питер, 2018. – 256 с.

7. Писчик А. С., Науменко Д. К. Система автоматического полива растений // Компьютерные системы и сети: 55-я юбилейная научная конференция аспирантов, магистрантов и студентов, Минск, 22-26 апреля 2019 г. / Белорусский государственный университет информатики и радиоэлектроники. – Минск, 2019. – С. 56–57.

8. Сидоров С. С. Сенсорные системы в сельском хозяйстве. – М.: Агропромиздат, 2019. – 210 с.

9. Смирнов С. С. Проектирование и реализация систем автоматического орошения. – М.: Наука, 2022. – 160 с.

10. Урок 30. Автоматический полив растений. – URL: https://lesson.iarduino.ru/page/urok-30-avtomaticheskiy-poliv-rasteniy/ (дата обращения: 26.10.2023).

Приложение 1

Схема подключения компонентов

Приложение 2

Исходный код программы

#define sensorPort A1 // порт для подключения датчика

#define pompaPort 13 // порт для подключения помпы

#define waterLevelPort 8 // порт для проверки уровня воды в источнике

#define buzzerPort 3 // порт для динамика

#include <LCDI2C_Multilingual.h>

LCDI2C_Russian lcd(0x27, 16, 2); // Адрес 0x27 для I2C

int maxSensor = 800; // максимальное значение сухости почвы

int sensValue;

int noWater;

void setup(){

lcd.init(); // Инициализация ЖК-дисплея

lcd.backlight(); // Включение подсветки

lcd.print("Starting...");

delay(1000);

pinMode(sensorPort, INPUT);

pinMode(waterLevelPort, INPUT);

pinMode(pompaPort, OUTPUT);

pinMode(buzzerPort, OUTPUT);

}

void loop(){

lcd.clear();

sensValue = analogRead(sensorPort);

noWater = digitalRead(waterLevelPort);

lcd.print("Sensor: ");

lcd.println(sensValue);

lcd.print("Water: ");

if (noWater) {

lcd.print("Empty");

} else {

lcd.print("Ok");

}

if (sensValue > maxSensor) {

if (noWater) {

tone(buzzerPort, 1000 , 250);

delay(200);

tone(buzzerPort, 2000 , 250);

delay(200);

tone(buzzerPort, 3000 , 250);

} else {

digitalWrite(pompaPort, HIGH);

for (int i = 0; i <= 9; i++) {

lcd.clear();

lcd.print("The pump is working: ");

lcd.print(i+1);

delay(1000);

}

digitalWrite(pompaPort, LOW);

waitForDay();

}

}

delay(1000);

}

void waitForDay() {

for (int i = 0; i <= 86400; i = i + 60) {

lcd.clear();

sensValue = analogRead(sensorPort);

lcd.print("Sensor: ");

lcd.println(sensValue);

lcd.print("Wait: ");

lcd.print((86400-i)/60);

lcd.print(" min");

delay(60000);

}

}

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