Файл: Создание кода для простейшей системы автополива.docx

ВУЗ: Не указан

Категория: Реферат

Дисциплина: Не указана

Добавлен: 12.12.2023

Просмотров: 25

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Муниципальное автономное образовательное учреждение

муниципального образования город Краснодар

средняя общеобразовательная школа № 74

имени Виктора Васильченко

ПРОЕКТ

Тема: «Создание кода для простейшей системы автополива»

Проект выполнил:

Чепелев Даниил Андреевич,

ученик 9 «Б» класса

Руководитель проекта:

Войтехович Татьяна Александровна,

учитель информатики
г. Краснодар

2022-2023 учебный год

Содержание


Введение 3

I. Теоретическая глава 5

1.1. «История создания языка программирования C++ и микроконтроллера Digispark» 5

1.2. «Технические характеристики Digispark и MOSFET» 7

II. Практическая глава 8

2.1. «Покупка компонентов и сборка системы автополива» 8

2.2. «Проверка на длительном испытании, измерение расхода воды, подбор необходимого количества воды для поливания огурцов» 10

Заключение 12

Список литературы 13

Приложение 1 14

Приложение 2 15

Приложение 3 16

Введение


Актуальность: у современного человека уход за комнатными растениями может отнимать много времени и быть сложным из-за напряжённого графика или отсутствия опыта ухода за растениями. Автоматическая система полива предлагает удобное и эффективное решение, позволяя выращивать здоровые растения с минимальными усилиями. Кроме того, использование автоматизированных систем может способствовать повышению производительности, снижению трудозатрат и улучшению управления ресурсами.

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

Объектом данного исследования является система автополива, предназначенная для полива огурцов на моём балконе летом 2023 года.

Предмет исследования: поиск и сбор необходимых компонентов для создания системы автополива.

Целью данного проекта является разработка и реализация функциональной системы автоматического полива с использованием платы управления Digispark, платы MOSFET, насоса и трубки.

В задачи проекта входит:

  1. Сбор и анализ информации по теме проекта, включая исследование и изучение языка программирования C++ и истории платы Digispark.

  2. Изучить технические характеристики платы Digispark, платы MOSFET, насоса и трубки, а также ознакомиться с основными командами языка программирования C++.

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

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

  5. Подвести итоги и сформулировать выводы об эффективности и результативности системы автоматического полива.

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

  • Эмпирический

  • Наблюдение

  • Фотографирование

  • Измерение

  • Моделирование

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

I. Теоретическая глава

1.1. «История создания языка программирования C++ и микроконтроллера Digispark»


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

В данном проекте я сосредоточился на разработке автоматической системы полива для полива растений. Система построена на базе Digispark, который представляет собой компактный, недорогой микроконтроллер, основанный на чипе ATtiny85. Плата программируется с помощью языка программирования C++, который позволяет создавать алгоритмы, управляющие процессом полива.

Язык программирования C++ является расширением языка программирования C, который был разработан Бьёрн Страуструпом в начале 1980-х годов. В то время он работал над своей докторской диссертацией в Bell Labs и хотел найти язык, который позволил бы ему писать более эффективный код. Он назвал этот язык "C с классами", и он должен был стать набором расширений языка C, которые позволили бы создавать объектно-ориентированные программы.

Название "C++" было придумано Риком Маскитти в начале 1980-х годов во время работы Страуструпа в Bell Labs. Название является отсылкой к оператору инкремента в языке C, который добавляет единицу к переменной. Символ "++" в названии указывает на то, что C++ является расширением языка C.

Первая коммерческая реализация C++ была выпущена Bell Labs в 1985 году. Она называлась "Cfront" и представляла собой компилятор, который переводил код C++ в код C, который затем можно было скомпилировать с помощью компилятора. Первый отдельный компилятор C++ был выпущен компанией AT&T в 1987 году.

C++ быстро стал популярным среди программистов благодаря своей способности сочетать особенности языков высокого и низкого уровня. Он позволил программистам писать код, который был одновременно эффективным и легким для чтения и понимания. C++ также ввел несколько новых понятий в программирование, таких как классы, объекты и шаблоны, что позволило легче писать сложные программы.

На протяжении многих лет C++ продолжал развиваться и совершенствоваться. Первый стандарт для языка был выпущен в 1998 году, а последующие версии были выпущены в 2003, 2011, 2014 и 2017 годах. Язык также стал предметом многочисленных книг, учебников и онлайн-ресурсов, которые помогли миллионам программистов научиться его использовать.

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

Плата Digispark — это микроконтроллерная плата, основанная на чипе ATtiny85. Она была создана Эриком Кеттенбургом и командой Digistump. Основной целью создания платы было упростить работу с микроконтроллером ATtiny85 для любителей и создателей.

Микроконтроллер ATtiny85 — это маленький и недорогой чип, который широко используется во встраиваемых системах. Он входит в семейство микроконтроллеров AVR, к которому также относятся популярные платы Arduino. ATtiny85 имеет 8 КБ постоянной памяти и 512 байт оперативной. Он имеет шесть портов ввода/вывода, которые могут быть использованы как для цифровой, так и для аналоговой информации. Плату Digispark можно программировать с помощью Arduino IDE, что облегчает работу с Digispark людям, которые уже знакомы с платформой Arduino.

С момента выпуска первой версии платы Digispark в нее было внесено несколько изменений и улучшений. Самая новая версия платы, Digispark Pro, основана на микроконтроллере ATtiny167, который имеет больше памяти и больше выводов ввода/вывода, чем ATtiny85. Digispark Pro также имеет интерфейс USB-C, который обеспечивает более быструю передачу данных и более надежные соединения, чем интерфейс USB, использовавшийся в предыдущих версиях платы.

Помимо Digispark Pro, в семействе Digispark есть еще несколько плат, включая Digispark USB, Digispark DIY и Digispark OLED. Эти платы предназначены для конкретных приложений и имеют различные функции и возможности.

В целом, плата Digispark стала популярным вариантом для тех, кто хочет работать с микроконтроллером ATtiny85. Небольшой размер и низкая стоимость делают ее привлекательным вариантом для проектов, где размер и стоимость являются важными факторами. Плата также проста в использовании с Arduino IDE, что делает ее доступной для тех, кто уже знаком с платформой Arduino.

1.2. «Технические характеристики Digispark и MOSFET»


Чтобы создать функциональную систему с использованием платы Digispark и платы MOSFET, необходимо изучить технические характеристики этих устройств. Плата Digispark использует микроконтроллер ATtiny85 и имеет 6 контактов ввода/вывода (см. Приложение 3). Эти выводы могут использоваться как цифровые входы или выходы, а некоторые - как аналоговые входы. Плата также может питаться через USB-разъем или от внешнего источника питания.

Программирование платы Digispark осуществляется через Arduino IDE (интегрированную среду разработки). Для связи платы Digispark с Arduino IDE на компьютере должен быть установлен специальный драйвер. После установки драйвера плату Digispark можно выбрать в качестве целевой платы в Arduino IDE и загрузить код через USB-соединение.

Плата MOSFET используется для управления насосом через плату Digispark. MOSFET (полевой транзистор металл-оксид-полупроводник) — это тип транзистора, который может использоваться для переключения больших токов с помощью управляющего сигнала низкого напряжения. Плата MOSFET имеет три соединения: земля, питание и сигнал. Сигнальное соединение подключается к одному из контактов ввода/вывода на плате Digispark, а соединение питания подключается к источнику питания насоса.

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

Для управления насосом будут использоваться базовые команды C++ для отправки сигнала на плату MOSFET. Сигнал будет включать или выключать MOSFET, что, в свою очередь, будет управлять питанием насоса.

II. Практическая глава

2.1. «Покупка компонентов и сборка системы автополива»


Сборка системы автоматического полива является основной целью данной практической главы. Для достижения этой цели будут использованы компоненты, описанные в теоретической главе. Автоматическая система полива будет собрана с использованием платы Digispark, платы MOSFET, насоса, трубки, тройников для разветвления потока воды и емкости с жидкостью. Чтобы не ошибиться при пайке, я создал схему своей системы в программе Fritzing (см. Приложение 1).

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

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

Но как собрать из того, чего нет? Никак. Поэтому я занялся поиском необходимых компонентов на просторах Интернета. Первым делом я нашёл плату управления Digispark на AliExpress, там же я нашёл MOSFET, тройники и помпу, трубку 4 мм я нашёл в строительном магазине Леруа Мерлен. Всё это обошлось мне в 487 российских рублей. Но, когда я получил и проверил свой заказ с AliExpress, я разочаровался. Digispark был нерабочий, деньги за заказ мне так и не вернули. Поэтому пришлось заказывать этот же компонент в два раза дороже в России на Яндекс.Маркете.

Первым делом я подключил компоненты к плате Digispark. Насос подключается к плате MOSFET, которая подключена к плате Digispark. Трубка будет подключена к насосу, а другой конец трубки будет помещен в ёмкость с водой.

После подключения компонентов следующим шагом будет программирование платы Digispark с помощью языка программирования C++. Программа выполняет две функции – включение и выключение насоса через определенные промежутки времени и глубокий сон во время перерывов в работе (см. Приложение 2). Цикл будет продолжаться до тех пор, пока питание не будет выключено. Программу я загрузил на плату Digispark через USB.

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

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


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

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

Для измерения расхода воды под конец трубки, через которую вытекает вода, можно подставить емкость известного объема, например миску объёмом 300 миллилитров. Время, необходимое для полного заполнения емкости, можно измерить с помощью секундомера. Затем можно рассчитать скорость потока воды по формуле: Скорость потока воды = Объем воды (300 мл) / Время, затраченное на заполнение ёмкости (1 мин). В моей системе получается, что скорость потока воды = 300 мл/мин.

Используя эту информацию, можно высчитать время, которое необходимо для полива одного огуречного растения в день. Поскольку огуречные растения будут выращиваться на балконе, важно определить потребности в воде каждого растения. Как правило, зрелому растению огурца требуется около 1-1,5 л воды за один полив при двукратном поливе - один раз утром и один раз вечером. Время, необходимое для полива одного куста огурца = Необходимое количество воды (1200 (ср.знач.)) / скорость потока воды (300). Следовательно, на один полив огурца требуется 4 минуты работы помпы.

Измерив расход воды, можно посчитать на сколько дней хватит баклажки 19 литров. Для этого можно использовать нетрудную формулу: Количество дней, на которые хватит бутыли с водой = 19000 / (2 (так как поливаем и утром, и вечером) * Количество воды, необходимое для одного взрослого растения для однократного полива (1200)).

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

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

Заключение


В заключение хочу сказать, что целью данного проекта было разработать и внедрить систему автоматического полива растений с использованием платы управления Digispark, платы MOSFET, насоса и трубки. В задачи проекта входили сбор и анализ информации о языке программирования C++ и истории создания платы Digispark, изучение технических характеристик компонентов, приобретение и сборка системы автоматического полива, измерение расхода воды и проверка надежности системы в течение длительного времени.

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

Был изучен язык программирования C++, который является расширением языка программирования C, что позволило создать алгоритмы для управления процессом полива. Также была изучена история платы Digispark, которая представляет собой компактный и недорогой микроконтроллер на базе чипа ATtiny85.

Автоматическая система полива была собрана с использованием знаний, полученных в теоретической части проекта. Насос и трубка были подключены к плате MOSFET, а плата Digispark была запрограммирована с помощью языка программирования C++ для управления процессом полива.

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

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

Список литературы


  1. Бьярне Страуструп. Программирование. Принципы и практика с использованием C++.

  2. Дейтел Харви, Дейтел Пол. Как программировать на С++.

  3. AlexGyver Technologies V2.0. DIGISPARK. НАЧАЛО РАБОТЫ, ОСОБЕННОСТИ. Web: https://alexgyver.ru/lessons/digispark

  4. AlexGyver. ????Простой автополив растений своими руками! https://www.youtube.com/watch?v=x6ProAzvT1g (РКН: сайт нарушает законодательство РФ)

  5. DMLiefer. Насосы центробежные. https://dmliefer.ru/katalog/nasosnoe-oborudovanie/nasosy-centrobezhnye

  6. ЕТ-Сервис. Мембранные насосы - конструкция и применение. https://pumpen.ru/helpful-information/diaphragm-pumps-design-and-application/

Приложение 1




Приложение 2


/*

Через каждые PERIOD секунд система подаёт 5 вольт на протяжении WORK секунд. Всё время,

кроме переключения пина, система спит и потребляет 28 микроампер.

*/
#define PERIOD 15 // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!)

#define WORK 10 // время работы в секундах

#define MOS 1 // пин мосфета
uint32_t mainTimer, myTimer;

boolean state = false;
#include

#include

#include

#define adc_disable() (ADCSRA &=
(1<

#define adc_enable() (ADCSRA |= (1<void setup() {

// все пины как входы, экономия энергии

for (byte i = 0; i < 6; i++) {

pinMode(i, INPUT);

}

adc_disable(); // отключить АЦП (экономия энергии)
wdt_reset(); // инициализация ватчдога

wdt_enable(WDTO_1S); // разрешаем ватчдог

// 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S
WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет резет.

sei(); // разрешаем прерывания

set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон

}
void loop() {

mainTimer++;
if (!state) { // если помпа не включена

if ((long)mainTimer - myTimer > PERIOD) { // таймер периода

myTimer = mainTimer; // сброс таймера

state = true; // флаг на запуск

pinMode(MOS, OUTPUT); // пин как выход

digitalWrite(MOS, HIGH); // врубить

}

} else { // если помпа включена

if ((long)mainTimer - myTimer > WORK) { // таймер времени работы

myTimer = mainTimer; // сброс

state = false; // флаг на выкл

digitalWrite(MOS, LOW); // вырубить

pinMode(MOS, INPUT); // пин как вход (экономия энергии)

}

}
sleep_enable(); // разрешаем сон

sleep_cpu(); // спать!

}
ISR (WDT_vect) {

WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет.

}

Приложение 3