Главная страница

Курсовая работа 1.1. План работы системы


Скачать 4.97 Mb.
НазваниеПлан работы системы
Дата23.03.2023
Размер4.97 Mb.
Формат файлаdocx
Имя файлаКурсовая работа 1.1.docx
ТипПлан работы
#1009603
страница3 из 4
1   2   3   4

2.2. Инструкции, настройка, применение

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

Писать программы можно множеством разных способов, самый распространенный и доступный – Arduino IDE. IDE – это среда программирования, в ней есть все необходимое для написания первых скетчей (рисунок 22). Программа бесплатная и любой желающий может скачать с официального сайта arduino.cc, а так же посмотреть исходники в официальном репозитории. Все последние версии Arduino IDE поддерживают русский интерфейс.

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

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

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

С помощью простого интерфейса можно быстро создавать новые скетчи. Скетч - это программа, написанная для платформы Arduino и имеющая определенную структуру. Можно посмотреть примеры таких скетчей во вкладке «Файл»

Процесс программирования платы состоит из двух этапов: вы пишите программу-скетч в одной из популярных сред программирования (например, в Arduino IDE). Затем вы загружаете скетч в контроллер нажатием одной кнопки. Скетч загружается и записывается в специальную область памяти контроллера и запускается автоматически каждый раз при включении платы. Загрузив код программы один раз, он останется там пока не перезапишется другой программой. Если памяти для хранения данных будет не хватать, можно подключить дополнительный модуль памяти для Arduino.

Программа на Arduino содержит две одинаковые функции: void setup() и void loop (). В начале кода объявляются константы и используемые порты. В разделе void setup() указываются команды которые выполняются один раз. Раздел void loop() содержит команды которые выполняются всё время пока включена плата Arduino. Начав выполнение с первой команды, микроконтроллер дойдет до конца и сразу же перейдёт в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату подано электричество). Так же есть возможность тестирования с помощью вывода результата работы или сообщений для отладки в последовательный порт или монитор порта, проиллюстрированный на рисунке 19.

Рисунок 19. Монитор порта

Для того, чтобы установить соединение в скетче, а именно в функции setup, нужно вызвать метод begin класса Serial и указать скорость соединения: Serial.begin(57600). Что бы информация отображалась корректно, нужно выбрать такую же скорость в мониторе порта. Она указывается в «бод’ах». Бод - скорость передачи данных по последовательному интерфейсу в битах в секунду. Для взаимодействия с компьютером следует использовать одну из предустановленных скоростей обмена: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. Тем не менее, можно задавать и другие скорости - например, для взаимодействия с каким-либо специфичным компонентом посредством выводов 0 и 1.

Для более легкой и продуктивной работы с Arduino есть возможность использовать дополнительные библиотеки. Библиотеки Arduino - это части программы для выполнения конкретных задач. С помощью библиотек можно выполнять сложные действия всего парой строк кода. В Arduino IDE менеджер библиотек для работы с библиотеками. Прямо из меню программы можно скачать, установить и подключить в свой скетч множество библиотек – рисунок 20.



Рисунок 20. Менеджер библиотек

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

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

Как уже отмечалось выше Arduino Nano имеет 14 цифровых и 8 аналоговых портов ввода вывода.

Некоторые датчики, используемые в проекте, требует дополнения штатного списка библиотек. Библиотеки работы датчиков и устройств находятся в “Libraries”.

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

Написание программы в Arduino IDE следует разделить на три этапа:

 в первом этапе подключаются библиотеки, а также назначаются
порты, в которые подключены датчики;

 во втором этапе необходимо определить режимы работы датчиков,
это делается в специальном цикле void setup();

третий этап проходит в специальном цикле void loop(), код

написанный в этой функции будет выполняться пока микроконтроллер

подключен к сети.

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

Proteus 8.5. Так как в стандартном наборе деталей отсутствует плата Arduino

Nano необходимо загрузить расширенную библиотеку, содержащую набор плат

и библиотек Arduino.

Инициализируем датчик температуры и влажности воздуха. Для этого

необходимо подключить библиотеки DHT.h. Однако данная библиотека не

входит в стандартный набор библиотек Arduino IDE. После загрузки и

установки DHT.h подключим ее к нашему проекту. Следующим шагом будет

утверждение директивы, соответствующей номеру бита порта, в который

приходит сигнал с датчика, инициализация датчика, указание используемого

датчика (DHT-11 или DHT-22). Значения получение с датчика записываем в

переменные t, h – температура и влажность соответственно. В нашем случае

для подключения DHT-11 используется контакт D2. Следует заметить, что

производитель не рекомендует опрашивать датчик чаще одного раза в две

секунды. Для выполнения этого условия сделаем задержку функцией

delay(2000).

Далее подключим LCD 2004. Так как в комплектующих к

разрабатываемой системе прилагается модуль преобразования сигнала IIC/I2C

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

отведённые под неё указаны в документации к конкретной платформе. В случае

Arduino Nano контакты SCL и SDA – А5 и А4 соответственно. Экран, как и

любое устройство, подключаемое к I2C шине, имеет свой ID. Так как

существует несколько производителей конвертеров для данного дисплея, ID так

же бывают разными. Самые распространённые ID – 0x38, 0x37. Так же

последние версии конвертеров выпускаются без резисторов регулировки

контрастности, так как данная регулировка осуществляется программнымисредствами. Для упрощения работы с LCD-дисплеем используется встроенная

библиотека Liquid Crystal_I2C. В ней также находятся ознакомительные

примеры с подробными комментариями.

Код программы подключения дисплея и датчика DHT-11 изображен на

рисунке 21.

Рисунок 21.

Так как написанный код требует проверки работоспособности,

смоделируем нашу систему в программе Proteus 8.5, загрузим

скомпилированный бинарный файл в эмулируемую плату Arduino Nano.

Проверим корректность работы кода, отвечающего за обработку сигналов с

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

Полученный результат изображен на рисунке 22.

Рисунок 22.

Так как описывалось ранее, для подключения LCD 2004 по шине I2C

необходим конвертер. Так как ID конвертера записано внутри конвертера,

производителя специально записывают фиксированые адреса. В случае

эмуляции в программе Proteus 8.5 ID конвертера (PCF8574) является 0x20. Для

сборки реально системы необходимо поменять ID при создании объекта lcd в

начале программы. Отличительной чертой эмулирования в САПР Proteus 8.5

является отсутствие необходимости разведения питания, так как эмулятор

предполагает подачу напряжения на необходимые контакты без необходимости

явной прокладки проводов.

Следующим этапом будет подключение датчика MQ-2. Серия датчиков

MQ отсутствует в стандартном наборе деталей, однако доступна для

скачивания в виде расширения на официальном форуме.

Подключить датчик можно к плате Arduino или напрямую к модулю реле.

В первом случае используется аналоговый выход А0 датчика, который

подключают к аналоговому входу на плате Arduino. В случае с реле используют

цифровой выход датчика.

Первоначально опишем директиву SmokePin А0, затем считываем

аналоговое значение с датчика. Значения датчика от 0 до 1023 где

максимальное значение соответствует максимальной концентрации

взрывоопасных веществ в воздухе. Для удобства чтения показателей переведём

значения в процентное соотношение. В программе Proteus у датчика MQ – 2

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

программы обработки аналогового сигнала. Принципиально, в ПО Proteus,

датчик MQ-2 является делителем сигнала TestPin. Изображение 23

демонстрирует работу датчика газа.


Рисунок 23

Принципом работы любого аналогового датчика является изменение

напряжения в диапазоне от 0в до 5в. Команда AnalogRead(номер контакта)

выполняет функцию преобразования полученного с указанного контакта

напряжения в числовое значение от 0 до 1023. Данная операция называется

аналогово-цифровое преобразование. Согласно технической документации, Arduino Nano имеет 10-битный встроенный АЦП, что, согласно формуле

точности АЦП позволяет отслеживать разницу напряжения в 5 милливольт.

Согласно ранее обозначенному, любой датчик можно заменить переменным

резистором. Главное условие – выходное напряжение не должно превышать

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

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

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

резистора.

Для обработки выходных сигналов с резисторов используется

аналогичная конструкция формирования АЦП как для любого аналогового

датчика. Так как экран поддерживает всего 4 строки, соответственно вывести

можно только 4 параметра, однако отображения уровня жидкости в поддоне не

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

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

подключению ко всем используемым датчикам, а также к дисплею.

На данной схеме RV1 – датчик уровня воды, RV2 – датчик влажности

почвы, отображаемый на экране как Moisture.

Рисунок 24
Следующим этапом проектирования системы автоматизированного

управления теплицей является создание кода управления исполнительными

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

В случае данной системы необходимо 5 портов на вывод:

Лампа

Вентилятор

Помпа системы автоматического полива

Помпа для откачки лишней воды из поддона

Клапан системы полива

Рассмотрим условия управления каналами. Для стабильного роста

растений требуется строго нормированный день. В качестве таймера будем

использовать оператор millis(); [13, C 288]. Данный оператор возвращает

количество прошедших миллисекунд со включения микропроцессора.

Алгоритмом таймера является выполнение необходимого действия при

условии, если разница результата millis(); превышает заданное значение. Расчёт

значения периода можно проводить непосредственно в момент создания

переменной. Тип переменной необходимо использовать long так как значение в

миллисекундах очень большое.

В нашей системе предусмотрено два механизма, работающих по

временному таймеру, а именно лампа и насос системы полива. Лампа должна

гореть 12 часов в сутки, а насос необходимо включать на 10 секунд один раз в

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

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

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

ресурсов принято решение использовать функцию delay(); для реализации 10

секундной работы насоса в тот момент, когда лампа выключается.

Соответственно, в период работы насоса необходимо осуществлять открытие

клапана подачи воды на распылитель.

В данной системе так же используется вытяжной вентилятор, основной

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

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

условием включения вентилятора условие включения лампы, так как

источником повышенной температуры может являться только лампа. На

рисунке 25 изображён участок кода, отвечающий за периодичность включения

лампы, вентилятора, клапана и насоса.



Рисунок 25

Для демонстрации работы представлена серия изображений. Каждое реле

подписано согласно выполняемой функции. Особенностью моделирования

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

к общему проводу GND. Для моделирования сети переменного напряжения 220

вольт использован генератор синуса. В качестве параметров указана частота 60

герц амплитуда 310 вольт. Необходимо отметить что в эмуляторе использованы

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

твердотельные реле с детектором перехода через ноль. Данные реле работают

абсолютно бесшумно, в связи с отсутствием контактных площадок исключается

возможность уменьшения проходного сечения в результате чего гарантируется

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

целом.

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

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

представляет собой элемент соединения контактов внутри ПО Proteus,

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

описывается окружностью диаметром соединительной точки, имеющей

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

демонстрирующих работу силовой части системы изображена на рисунке 26.

26а) демонстрирует систему в состоянии покоя, освещение

выключено.

26б) демонстрирует работу системы освещения и вентиляции.

26в) демонстрирует работу системы в течении заданного

времени delay(); после выключения освещения. Включена помпа и

клапан. Клапан схематично изображен в виде светодиода, для

демонстрации положения соленоида внутри клапана. Диод светится –

клапан открыт.

Рисунок 28

Следующийэтап разработки включает в себя добавление функции

принудительного включения вентилятора, при превышении заданного значения

влажности и температуры воздуха. В момент обнаружения повышенного

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

подключённые к сигнальным выводам с платы Arduino, кроме вентилятора, и,

если требуется, включить его. Если влажность воздуха находится на

минимальном уровне, а температура высокая, следует отключить все

потребители и вывести на дисплей оповещение о подозрении на пожар. Так же,

основываясь на снижении показателя датчика уровня воды ниже порогового,

включить откачной насос.

Используя условный оператор if были внесены все дополнительные

условия в код программы. Для очистки экрана использовалась функция

object.clear(); из библиотеки LiquidCrystal_I2C. Для корректного отображения

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

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

выполнение данных условий приведен на рисунке 27.

Рисунок 27

Данный алгоритм предусматривает возвращение в исходное состояние

системы. Состояние хранится в переменной lamp типа Boolean, где true

освещение включено, false выключено. Переменная dang может использоваться

для фиксации не штатной ситуации.

Включение откачной помпы основывается на датчике уровня жидкости,

опытным путём установлено пороговое значение, при достижении которого

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

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

скорости изменения уровня воды. Пороговым значенем для включения помпы

установлено 700, для выключения 500. Алгоритм продемонстрирован на

рисунке 28

1   2   3   4


написать администратору сайта