Приложение к ОПОП ВО
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ Лабораторный
«БАШКИРСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ» практикум
Кафедра электрических машин
и электрооборудования
Б1.О.32 ЦИФРОВЫЕ УСТРОЙСТВА
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
Направление подготовки
35.03.06 Агроинженерия
Профиль подготовки
Электрооборудование и электротехнологии
Квалификация (степень) выпускника
Бакалавр
Уфа 2022
Рекомендовано к изданию методической комиссией энергетического
факультета, протокол № 7 от 24 марта 2022 г.
Составители: канд. техн. наук, доцент Ярмухаметов У.Р.
Рецензент: канд. техн. наук, доцент кафедры электроснабжения и
автоматизации технологических процессов Ахметшин А.Т.
Ответственный за выпуск: и.о. зав. кафедрой электрических машин и
электрооборудования Акчурин С.В.
2
ОГАВЛЕНИЕ
ВВЕДЕНИЕ 4
1 Изучение возможностей микроконтроллерного модуля Arduino 5
2 Изучение портов ввода-вывода микроконтроллерного модуля
Arduino 10
3 Получение данных с датчиков 22
4 Системы отображения информации 28
5 Управление приводами 35
6 Изучение сетей связи 42
7 Изучение сенсорного дисплея Nextion и программного обеспечения
Nextion Editor 52
8 Информационно-управляющие системы 68
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 77
3
ВВЕДЕНИЕ
Лабораторный практикум по дисциплине «Цифровые устройства»
предназначен для студентов очной и заочной форм обучения и призван
способствовать освоению рабочей программы по указанной дисциплине.
Тематика лабораторных работ полностью соответствует содержанию
рабочей программы дисциплины Б1.О.32 Цифровые устройства по
направлению 35.03.06 Агроинженерия профиля подготовки
«Электрооборудование и электротехнологии».
Содержание лабораторного практикума направлено на углубленное
изучение студентами наиболее важных модулей теоретического курса и
включает: цель и программу работы, краткие теоретические сведения, задания
на самостоятельную работу, требования к содержанию отчета по работе,
контрольные вопросы, а также библиографический список.
Перед началом цикла лабораторных работ студенты проходят первичный
инструктаж по технике безопасности согласно требованиям. Перед началом
каждой лабораторной работы студенты проходят текущий инструктаж по
технике безопасности непосредственно на рабочем месте.
4
1 ИЗУЧЕНИЕ ВОЗМОЖНОСТЕЙ МИКРОКОНТРОЛЛЕРНОГО
МОДУЛЯ ARDUINO
Лабораторная работа № 1
1 Цель работы
Ознакомиться с техническими характеристиками платы Arduino Uno, ее
особенностями и средой программирования Arduino IDE.
2 Программа работы
2.1 Изучить плату Arduino Uno.
2.2 Изучить среду программирования Arduino IDE.
2.3 Освоить работу с программой Arduino IDE.
2.4 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- USB-кабель.
3 Краткие теоретические сведения
Arduino – общее название аппаратно-программных средств для
построения систем автоматики и робототехники, а также решений в области
Интернета вещей (интернет вещей — это, согласно определению Роба Ван
Краненбурга, «концепция пространства, в котором все из аналогового и
цифрового миров может быть совмещено» …).
Существует много разновидностей микроконтроллеров, это связано с
открытой лицензией оригинальной версии Arduino, единственное условие
которой – не использовать официальное название Arduino в своих
микроконтроллерах без разрешения, чтобы не запутать конечного потребителя
в множестве существующих микроконтроллерах.
Arduino Uno — модуль, основанный на микроконтроллере ATmega328P с
частотой 16 МГц и памятью 32 кБ. Имеет отдельный разъем питания и
полноценный USB порт. Выбор питания происходит автоматически. На плате
находятся 14 цифровых входов/выходов [из которых 6 могут использоваться
как выходы широтно-импульсной модуляции (ШИМ)], 6 аналоговых входов.
Считается наиболее подходящей платой для знакомства с Arduino (рисунок 1).
5
Рисунок 1 Плата Arduino Uno
На данной платформе имеются 14 цифровых контактов (пинов/выводов),
все они могут выдавать напряжение от 0 В (логический ноль) до напряжения
питания 5 В (логическая единица). Максимальная сила тока, выдаваемая
каждым пином - 40 мА. Некоторые из них имеют дополнительные функции:
1. Пины 0 и 1 могут использоваться для приѐма/передачи данных по USB.
2. Пины 2 и 3 могут использовать функцию внешних прерываний.
3. Пины 3, 5, 6, 9, 10, 11 могут являться выходами с ШИМ.
4. Пин 13 – светодиодный индикатор, расположенный на плате (при
подаче на данный контакт логической единицы индикатор загорается, при
подаче логического нуля гаснет).
Некоторые выводы (обозначенные буквой А) подключены к
мультиплексору аналого-цифрового преобразователя (АЦП) разрешением 10
бит (может принимать 1024 различных значений). По умолчанию у выводов
диапазон измерения от 0 до 5 В, так же есть возможность изменить верхнюю
границу путем подачи требуемого напряжения на контакт AREF.
6
Рисунок 2 Среда разработки Arduino IDE
Отличительной особенностью данной платформы является простота
программирования, подробная документация и реализация аппаратной
платформы в различных вариациях. Для программирования микроконтроллеров
используется Arduino IDE (рисунок 2) с поддержкой множества языков
программирования, но фактически все программы пишутся на C/C++.
В Arduino IDE по умолчанию уже содержатся примеры различных
программ-скетчей (sketch) для проверки работоспособности микроконтроллера
или быстрого создания своей программы на базе существующей. Файлы с
программой сохраняются с расширением «.ino».
В данной лабораторной работе используются следующие функции:
1) void setup( ). Используется для инициализации переменных,
определений работы выводов и т.д. Данная функция используется только один
раз после каждой подачи питания или сброса платы. Внутри функции void setup
используется функция pinMode(контакт, режим) которая служит для
конфигурирования режима работы контакта. Режим работы может принимать
значения OUTPUT (выход), INPUT (вход) или INPUT_PULLUP (вход с
программным подключением внутреннего подтягивающего резистора).
2) void loop ( ). Функция вызывается после setup ( ) в бесконечном цикле в
течение всего времени работы микроконтроллера.
3) Функция digitalWrite(контакт, значение) отправляет на цифровой
порт значение, которое было заранее сконфигурировано: HIGH (+5 В) или LOW
(0 В).
4) При быстром включении и выключении светодиода без задержки
человеческий глаз не увидит изменения, для этого используем функцию
7
задержки delay(время в мс) для того чтобы можно было заметить изменение
светодиода.
Интерфейс имеет простую структуру. В верхней части расположена
панель навигации, ниже кнопки для сохранения и загрузки программы в
Arduino, следом текстовый редактор для написания программ, зеленая область
под текстовым редактором отображает информацию о загрузке программы на
Arduino, последняя часть — это консоль для вывода служебной информации. В
нижнем правом углу показывается информация о порте, к которому
подключена Arduino.
Для платформы Arduino UNO существуют различные электронные
модули для осуществления индикации и измерения различных свойств. Данные
модули являются законченными устройствами и располагаются на плате
расширения, они подключаются к контролеру с помощью соединительных
проводов, беспаечной макетной платы или платы расширения. Для соединения
нескольких модулей или отдельных электронных компонентов применяют
беспечную макетную плату.
4 Задание на самостоятельную работу
Изучите программу «Blink», которая позволит «мигать» светодиодом на
плате Arduino. Данную программу удобно использовать для проверки
работоспособности платы. Для этого рассмотрим панель управления, она
представлена кнопками (рисунок 3).
Рисунок 3 Панель управления
Первая кнопка, в виде «галочки», осуществляет проверку написанного
кода, следующая (стрелочка) тоже проверяет код, но сразу после проверки
осуществляет его загрузку в микроконтроллер. Следующие три кнопки по
порядку: создать новый документ, открыть существующий, сохранить текущий.
Введите код программы (рисунок 4).
Рисунок 4 Стандартная программа Blink
8
Подключите Arduino к персональному компьютеру (ПК). Обратите
внимание, если всѐ подключено правильно и питания для платы достаточно, то
загорится зеленый светодиод напротив надписи «On» (рисунок 5).
Рисунок 5 Подключение платы Arduino к ПК
Настроим среду разработки Arduino для загрузки программного кода
(скетча). Для этого выполняем следующий алгоритм работы:
1. Зайти в выпадающее меню инструменты, выбрать пункт плата, и
выбрать «Arduino/Genuino Uno».
2. В выпадающее меню инструменты, выбрать пункт порт, и выбрать
последовательный порт (COM-порт), к которому подключена наша плата.
Если всѐ настроено верно, то в Arduino IDE в левом нижнем углу
определится платформа и порт, к которому она подключена (рисунок 6).
Рисунок 6 Определение платформы и порта при подключении Arduino
Скетч необходимо проверить с помощью кнопки «проверить» на панели
инструментов или с помощью горячей клавиши «Ctrl+R».
Если после проверки не обнаружились ошибки в окне консоли, то следует
нажать кнопку «загрузка» на панели управления или с помощью горячей
клавиши «Ctrl+U», загрузить программу на платформу. Строка сообщений
уведомляет о начале компиляции и завершении компиляции, затем происходит
загрузка кода на плату Arduino (рисунок 7). При загрузке на плату Arduino
мигают светодиоды «TX/RX». После окончания загрузки написанная
программа автоматически начинает выполняться.
9
Рисунок 7 Уведомление о начале компиляции и загрузке программы на плату
Arduino
Как только программа будет загружена светодиод на плате начнет мигать
с задержкой в 1 секунду. Это говорит нам о том, что плата работает нормально
и готова для создания новых проектов.
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- листинг программ;
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Что выполняет функция void setup( )?
2. Что делает функция digitalWrite(13, LOW)?
3. Что делает функция delay(500)?
4. Что делает функция pinMode(13, OUTPUT)?
5. Что означает режим работы INPUT_PULLUP?
6. Что означает режим работы OUTPUT?
2 ИЗУЧЕНИЕ ПОРТОВ ВВОДА-ВЫВОДА МИКРОКОНТРОЛЛЕРНОГО
МОДУЛЯ ARDUINO
Лабораторная работа № 2
1 Цель работы
Познакомиться с принципом работы аналоговых и цифровых портов
ввода/вывода микроконтроллерного модуля Arduino, широтно-импульсной
модуляцией. Научится управлять светодиодами и считывать сигнал с тактовых
кнопок.
10
2 Программа работы
2.1 Изучить информацию о портах ввода вывода Arduino Uno.
2.2 Создать проект мигания светодиодом в среде FLProg.
2.3 Создать проект для снятия показаний с потенциометра и считывания
данных с монитора последовательного COM-порта Arduino в среде FLProg.
2.4 Создать проект плавного управления яркостью светодиода
посредством широтно-импульсной модуляции (ШИМ).
2.5 Выполнить задание на самостоятельную работу.
2.6 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- 4 тактовые кнопки;
- беспаечная макетная плата;
- провода (джамперы);
- 2 светодиода;
- USB-кабель;
- потенциометр;
- 4 резистора на 10 кОм и 2 резистора на 220 Ом.
3 Краткие теоретические сведения
3.1 Цифровые порты ввода-вывода
Изначально все порты (пины) Arduino Uno определяются как входы, и нет
нужды задавать это в программном коде.
Есть три режима в которых может работать порт:
- вход, в этом режиме происходит считывание данных с датчиков,
состояния кнопок, аналогового и цифрового сигналов (порт находится в т.н.
высокоимпедансном состоянии, простыми словами – у входа высокое
сопротивление);
- выход, в зависимости от команды, прописанной в коде, порт принимает
значение единицы или нуля (выход становится своего рода управляемым
источником питания и выдаѐт максимальный ток (в нашем случае 20 мА и 40
мА в пике) в подключенную к нему нагрузку);
- порт работает как вход, но к нему подключается подтягивающий
резистор в 20 кОм (INPUT_PULLUP).
Самый главный момент касательно цифровых пинов: микроконтроллер –
это логическое устройство, которое создано для управления другими
устройствами при помощи логических (цифровых) сигналов. Под словом
логическое мы подразумеваем не силовое, то есть питать что-то от
микроконтроллера нельзя, за редким исключением.
Пример: создадим проект мигания светодиодом.
1. Соберите схему, показанную на рисунке 1. Светодиод LED0 анодом
(положительным электродом) подключен к 8-му цифровому порту. Катод
11
(отрицательный электрод подключен к общему выводу GND через
токоограничивающий резистор R1 на 220 Ом.
Рисунок 1 Схема проекта мигания светодиодом
2. Запустите FLProg на персональном компьютере.
3. Цифровой пин 8 должен быть настроен как выход, поэтому создайте
выход LED0 в окне Tags.
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
4. Перенесите созданный цифровой выход LED0 на поле программы.
5. Для того, чтобы светодиод мигал, необходимо во встроенных
библиотеках в папке Таймеры выбрать блок Generator и разместить его на поле
программы перед блоком цифрового выхода.
6. Соедините выход блока Generator со входом LED0.
7. В настройках блока Generator выберите тип генератора –
симметричный мультивибратор, длина импульса – константа и установите
время – 1 сек.
8. Для активации блока Generator его вход необходимо инвертировать.
9. В результате блок схема проекта мигания светодиодом примет
следующий вид (рисунок 2).
12
Рисунок 2 Блок-схема проекта мигания светодиодом
10. Проверьте проект на наличие ошибок, произведите компиляцию и
загрузку кода в модуль Arduino Uno. Светодиод при поданном питании будет
мигать с длительностями горения и паузы в 1 секунду.
3.2 Аналоговые порты
У микроконтроллера есть аналоговые входы, т.е. входы, подключенные к
АЦП – аналогово-цифровому преобразователю. На платах Arduino это пины,
маркированные буквой А.
Аналоговые пины могут принимать напряжение от 0 (GND) до опорного
напряжения и преобразовывать его в цифровое значение. АЦП в Arduino имеет
разрядность в 10 бит (т.е. диапазон выдаваемых значений равен 210=1024), т.о.
мы получаем измеренное напряжение в виде числа от 0 до 1023.
Пример: снять показания с потенциометра и считать данные с монитора
последовательного COM-порта Arduino.
Потенциометр – самое простое аналоговое устройство. Область
использования – стереосистемы, термостаты и т.д. Потенциометр представляет
собой регулируемый делитель напряжения и снабжен ручкой-регулятором.
а) б)
Рисунок 3 Потенциометр: а) с поворотной ручкой; б) ползунковый
13
Потенциометр имеет 3 вывода. Крайние выводы подключаются к
питанию и земле, при чем, соблюдение полярности не имеет значения. Средний
вывод соединяется с любым аналоговым пином платы Arduino, например А0
(рисунок 4).
Рисунок 4 Схема соединения потенциометра к плате
Откроем пакет FLProg на персональном компьютере и создадим новый
проект.
Во вкладке Tags создадим новый аналоговый вход с именем
«Потенциометр» и номером контакта A0. Разместим данный блок на поле
программы.
Рисунок 5 Создание аналогового входа
Для отправки считываемых значений с потенциометра в COM-порт во
встроенных библиотеках найдем папку UART и разместим на свободном поле
окна программы блок «Отправка в UART».
14
Обычно для загрузки программ в микроконтроллер нужны внешние
аппаратные средства, такие как программатор. Особенность любой платы
Arduino – уже встроенный программатор, что дает возможность напрямую
подключаться к интегрированному универсальному синхронно/асинхронному
приемопередатчику (USART). Через этот последовательный интерфейс
можно обмениваться данными между Arduino и ПК или между Arduino и
другими устройствами. У микроконтроллера ATmega328, который установлен
на плате Arduino Uno, есть один аппаратный последовательный порт. Он
соединен с контактами Tx (передача) и Rx (прием), к которым можно
получить доступ на цифровых пинах 0 и 1.
Прежде чем соединить между собой блоки «Потенциометр» и «Отправка
в UART», настроим последний, согласно приведенному ниже рисунку.
Рисунок 6 Настройка блока «Отправка в UART»
После установки настроек у блока будет два входа «send» и «D». Для
того, чтобы порт находился в активном состоянии вход «send» необходимо
инвертировать. Готовая блок-схема приведена на рисунке 7.
15
Рисунок 7 Блок-схема проекта
После проверки на отсутствие ошибок, проект компилируется, и
программа загружается в микроконтроллерный модуль.
Для того чтобы считать показания с потенциометра необходимо открыть
в пакете FLProg Монитор COM-порта (рисунок 8). Монитор COM-порта
служит для работы с последовательным портом RS-232 компьютера.
Рисунок 8 Открытие Монитора COM-порта
При корректном отображении порта и скорости обмена информации 9600
бит/сек., после нажатия на голубой поплавок , на экране, в соответствии с
установленным нами интервалом времени в 1 секунду, должны появиться
цифры: в поле «ASCII» информация, принятая с COM-порта, отображается в
16
виде кодировки ASCII. В полях «DEC», «HEX», «BIN» принятая информация
отображается соответственно в десятичном, шестнадцатеричном и двоичном
форматах.
Рисунок 9 Активация Монитора COM-порта
Код ASCII был создан в 1967 году Американским обществом стандартов,
как средство, которое позволило бы обмениваться текстовыми сообщениями
любым компьютерам, независимо от их операционной системы. Этот код
присваивает каждой букве, цифре и знаку препинания латинского алфавита
однозначное число.
Теперь, если вращать ручку потенциометра, цифры в поле ASCII будут
меняться в диапазоне от 0 до 1023, что соответствует интервалу напряжений
0… 5 В.
3.3 Широтно-импульсная модуляция
Широтно-импульсная модуляция (ШИМ, pulse-width modulation, PWM)
— это операция получения изменяющегося аналогового значения посредством
цифровых устройств, в нашем случае микроконтроллера. Устройства
используются для получения прямоугольных импульсов - сигнала, который
постоянно переключается между максимальным и минимальным значениями.
Данный сигнал моделирует напряжение между максимальным значением (5 В)
и минимальным (0 В), изменяя при этом длительность времени включения 5 В
относительно включения 0 В. Длительность включения максимального
значения называется шириной импульса. Для получения различных аналоговых
величин изменяется ширина импульса.
Пример: Посредством ШИМ создадим проект плавного управления
яркостью светодиода LED0 посредством 2-х кнопок. При нажатии и удержании
одной кнопки SB1 яркость светодиода увеличивается от 0 до максимального
17
значения, и наоборот – при нажатии и удержании другой кнопки SB2 – яркость
светодиода уменьшается от максимума до 0.
1. Соберем схему проекта (рисунок 10).
Рисунок 10 Схема проекта управления яркостью светодиода
1. Откроем пакет FLProg на персональном компьютере и создадим новый
проект.
2. Во вкладке Tags создадим 2 новых цифровых входа SB1 и SB2 для 12-
го и 13-го пинов соответственно. Разместим данные блоки на поле программы и
инвертируем их выходы.
3. Создадим ШИМ-выход и назовем его LED0. ШИМ-пины на плате
Arduino Uno помечены символом ~. В нашем случае это 9-й пин.
Рисунок 11 Настройки ШИМ-выхода LED0
18
4. Во встроенных библиотеках блоков в папке Таймеры находим блок
Generator и размещаем его на поле программы после блоков-кнопок SB1 и SB2.
Выставляем настройки блока согласно рисунку 12.
Рисунок 12 Настройки блока Generator
Блок генератора формирует импульсы напряжения длительностью 30 мс.
5. Во встроенных библиотеках блоков в папке Счетчики находим блок
Счетчик и размещаем его за блоком Generator. Счетчик необходим для подсчета
количества импульсов. Выставляем настройки Счетчика согласно рисунку 13.
Рисунок 13 Настройка блока Счетчик
Поскольку плата Arduino Uno поддерживает восьмибитную ШИМ, это
позволяет выбрать переменную в диапазоне значений от 0 до 255. Поэтому
верхнюю границу в настройках Счетчика ограничиваем цифрой 255, нижнюю –
19
0 (28=256). Направление счета зависит от наличия сигнала на входе "UD". При
наличии логической 1 счетчик считает на увеличение, при отсутствии - на
уменьшение.
6. Выбираем заключительный блок ИЛИ. После выполнения всех
соединений итоговая блок-схема проекта будет выглядеть как показано на
рисунке 14.
Рисунок 14 Блок-схема проекта управления яркостью светодиода
7. После компиляции и загрузки скетча в модуль Arduino Uno, при
нажатии на кнопку SB1 яркость светодиода LED0 будет увеличиваться, а при
нажатии на SB2 – уменьшаться.
4 Задание на самостоятельную работу
4.1 Задание на самостоятельную работу
«Работа с цифровыми портами»
1. Соберите схему, показанную на рисунке 15.
3. В среде FLProg создайте новый проект.
3. Реализуйте блок-схемы для работы двух светодиодов LED0 и LED1:
- в ходе работы микроконтроллера светодиоды должны загораться
одновременно с длительностями горения и паузы в 2 секунды (результат
сохраните в файл Lab02_1.flp);
- в ходе работы микроконтроллера светодиоды должны загораться по
очереди с длительностями горения и паузы в 1 секунду (результат сохраните в
файл Lab02_2.flp).
4. Реализовать блок-схему для работы с тактовыми кнопками:
- при нажатии кнопки LEFT загорается светодиод LED0;
- при нажатии кнопки RIGHT загорается правый светодиод LED1;
20
- при нажатии кнопки UP светодиоды загораются по очереди с
длительностями горения и паузы в 1 секунду;
- при нажатии кнопки DOWN светодиоды загораются одновременно с
длительностями горения и паузы в 1 секунду.
Результат сохраните в файл Lab02_3.flp.
Рисунок 15 Схема лабораторного макета
4.2 Задание на самостоятельную работу
«Работа с аналоговыми портами. ШИМ»
1. Соберите схему, показанную на рисунке 16.
2. В среде FLProg создайте новый проект Lab02_4.flp.
3. Самостоятельно изучите работу блока Scale из папки
Масштабирование библиотеки встроенных блоков.
3. Реализуйте блок-схему для управления яркостью светодиода LED0
вращением ручки потенциометра R:
- при вращении в одну сторону яркость светодиода должна
увеличиваться;
- при вращении в другую сторону яркость светодиода должна
уменьшаться;
4. Реализуйте возможность наблюдения за изменением цифровых
значений ШИМ на экране ПК.
21
Рисунок 16 Схема лабораторного макета для управления яркостью
светодиода с помощью потенциометра
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схемы в виде отдельных файлов Lab02_1.flp, Lab02_2.flp,
Lab02_3.flp и Lab02_4.flp
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Режимы работы портов микроконтроллерного модуля Arduino Uno.
2. Конфигурирование портов микроконтроллерного модуля Arduino Uno.
3. Сколько аналоговых входов у модуля Arduino Uno?
4. Что такое широтно-импульсная модуляция?
5. Назначение UART.
6. Что такое ASCII?
3 ПОЛУЧЕНИЕ ДАННЫХ С ДАТЧИКОВ
Лабораторная работа № 3
1 Цель работы
Познакомиться с принципом работы измерительных датчиков на примере
температурного датчика DS18B20.
22
2 Программа работы
2.1 Изучить информацию о датчике температуры DS18B20.
2.2 Создать проект для снятия показаний с датчика температуры DS18B20
и считывания данных температуры окружающей среды с монитора COM-порта
Arduino Uno в среде FLProg.
2.3 Выполнить задание для самостоятельной работы.
2.4 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- датчик температуры DS18B20;
- беспаечная макетная плата;
- провода (джамперы);
- светодиод;
- USB-кабель;
- 1 резистор на 4,7 кОм и 1 резистор на 220 Ом.
3 Краткие теоретические сведения
3.1 Датчик температуры DS18B20
Пример: снять показания с датчика температуры DS18B20 и считать
данные температуры окружающей среды с монитора COM-порта Arduino Uno.
Рассмотрим пример работы с температурным датчиком DS18B20
(рисунок 1). Он позволяет определить температуру окружающей среды в
диапазоне от -55°C до +125°C и получать данные в виде цифрового сигнала.
Рисунок 1 Температурный датчик DS18B20
Можно выбрать любой другой аналоговый датчик, последовательность
действий, описанная далее, практически одинакова для любого аналогового
датчика. Соберите схему, показанную на рисунке 2. Обратите внимание, что
для работы датчика необходим резистор номиналом 4,7 кОм, подключенный
между выводами, соединяемыми к цифровому пину (в нашем случае 4-му) и
питанию 5 В. В случае использования модуля датчика температуры
DS18B20 подключение резистора не требуется, т.к. он уже предусмотрен на
плате.
23
Откроем пакет FLProg на персональном компьютере и создадим новый
проект.
DS18B20 обменивается данными с микроконтроллером по
однопроводной линии связи, используя протокол интерфейса 1-Wire
корпорации Dallas.
Для линии связи требуется слабый подтягивающий резистор т.к. все
устройства физически подключены к одной общей шине и используют выход с
тремя состояниями или выход типа открытый сток. В этой системе с одной
шиной, микроконтроллер (ведущее устройство или «мастер») определяет
наличие устройств на шине и обменивается с ними, используя уникальный
адрес для каждого устройства - 64-разрядный код. Т.к. каждый термодатчик
имеет уникальный код, то число устройств, подключенных к шине,
практически ничем не ограничено.
Рисунок 2 Схема подключения датчика температуры DS18B20
Определим уникальный адрес датчика. Для этого подадим питание на
схему посредством USB кабеля, подключенного к ПК и во вновь созданном
проекте FLProg зайдем в меню Инструменты → Шины данных →
Сканирование шины OneWire.
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
24
Рисунок 3 Сканирование шины OneWire
Следующим шагом последовательно выбирается плата
микроконтроллера, номер пина платы, к которому подключен сигнальный
провод датчика температуры (в нашем случае 4-й пин). Третьим шагом
автоматически формируется скетч (программный код в среде Arduino IDE) и
после его загрузки нажимаем кнопку Далее и производим сканирование шины -
.
Если нет конфликтов, определится уникальный адрес датчика, его тип и
текущее значение температуры в ºС.
Рисунок 4 Сканирование шины
Адрес устройства необходимо запомнить или сохранить в виде
отдельного файла в папке с текущим проектом.
25
Далее создадим блок-схему для определения показаний температуры
окружающей среды с отправкой данных в последовательный порт ПК. Во
встроенных библиотеках в папке Датчики → Датчики температуры находим
блок DS18x2x и перенесем его на свободное поле окна программирования. Блок
датчика температуры имеет 1 выход. Зайдем в настройки блока и выставим
значения согласно рисунку 5. Адрес устройства можно набрать вручную или
указать местоположение ранее сохраненного файла с адресом датчика.
Обязательно указываем номер пина с шиной OneWire (в нашем случае 4-й пин).
Время опроса датчика установим 1 сек.
Рисунок 5 Настройки блока Датчик температуры DS18x2x
Блок Отправка в UART настраивается аналогично предыдущему проекту
(см. лабораторную работу № 2). Конечный вид блок-схемы представлен на
рисунке 6.
Рисунок 6 Блок-схема проекта измерения температуры окружающей
среды
26
Готовый проект компилируется и загружается в плату Arduino Uno.
Теперь цифры в поле ASCII будут отображать показания температуры (рисунок
7).
Рисунок 7 Монитор COM-порта с выводом значений температуры
4 Задание на самостоятельную работу
1. Самостоятельно изучить во встроенных библиотеках FLProg блок
сравнения Comparator (информацию о нем можно получить, нажав на кнопку
Информация в настройках указанного блока).
Рисунок 8 Схема устройства
27
2. Реализовать работу устройства, сигнализирующего пользователю о
превышении температуры порогового значения с использованием блока
Comparator:
- схема устройства представлена на рисунке 8;
- данные о текущей температуре должны отправляться в
последовательный порт ПК с интервалом 3 сек.;
- пороговое значение температуры +30ºС;
- при превышении порогового значения должен загораться светодиод
LED0.
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схему устройства в виде отдельного файла в формате Lab03_1.flp;
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. С помощью чего происходит преобразование аналогового сигнала,
формируемым датчиком в цифровой?
2. Какой протокол интерфейса используется датчиком DS18B20 для
обмена данными с микроконтроллером?
3. Порядок определения уникального адреса датчика DS18B20.
4. Назначение блока Comparator.
5. Как изменить интервал времени опроса датчика?
4 СИСТЕМЫ ОТОБРАЖЕНИЯ ИНФОРМАЦИИ
Лабораторная работа № 4
1 Цель работы
При помощи микроконтроллера научиться выводить символьную и
цифровую информацию на жидкокристаллический дисплей LCD1602.
2 Программа работы
2.1 Изучить информацию о ЖК-дисплее LCD1602 с интерфейсом I2C.
2.2 Изучить схему подключения ЖК-дисплея к плате Arduino Uno.
2.3 Освоить работу по выводу информации на ЖК-дисплей.
2.4 Оформить отчет и ответить на контрольные вопросы.
28
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- датчик температуры DS18B20;
- ЖК-дисплей LCD1602 с интерфейсом I2C;
- беспаечная макетная плата;
- провода (джамперы);
- USB-кабель;
- резистор на 4,7 кОм.
3 Краткие теоретические сведения
При проектировании автономных устройств разработчики стараются
сделать так, чтобы их работа не зависела от ПК. До недавних пор для
отображения информации, более сложной, чем отображение индикатора, нам
требовался внешний компьютер. Добавив жидкокристаллический дисплей
(LCD) на плату Arduino, можно отображать сложную информацию (показания
датчиков, отсчет временных промежутков, настройки и т.д.) непосредственно в
устройстве без привязки к монитору компьютера.
Выбирая дисплей, следует основываться на его технических
характеристиках, указанных в документации (Datasheet), таких как: назначение
внешних выводов и классификация дисплея из документации (Datasheet).
Особое внимание следует обратить на следующие параметры:
- какое напряжение питания подается на ЖКИ и на какие выводы;
- сколько символов и строк отображается на дисплее;
- имеется ли русификация знакогенератора.
Питание на разных дисплеях подаѐтся на разные выводы. Если
перепутать землю и питание, то дисплей очень быстро выйдет из строя. Потому
обязательно внимательно следите за правильным подключением питания к
дисплею.
3.2 Подключение ЖК-дисплея к плате Arduino Uno
Рассмотрим наиболее часто встречающийся в проектах с использованием
Arduino ЖК-дисплей LCD1602, содержащий 16х2 символов, на экране которого
одновременно может отображаться 32 символа (16 столбцов и 2 строки).
Рисунок 1 ЖК-дисплей LCD1602
29
LCD 1602 представляет собой электронный модуль, основанный на
драйвере HD44780 от Hitachi. LCD1602 имеет 16 контактов и может работать в
4-битном режиме (с использованием только 4 линии данных) или 8-битном
режиме (с использованием всех 8 строк данных), так же можно использовать
интерфейс I2C.
Стандартная схема присоединения дисплея напрямую к
микроконтроллеру выглядит следующим образом.
Рисунок 2 Схема подключения ЖК-дисплея к плате Arduino
Тот факт, что дисплей имеет 16 цифровых выводов, из которых
обязательно подключают к плате минимум 6, является самым главным
недостатком этого экрана и поэтому использование этого LCD добавляет
серьезные ограничения для плат Arduino Uno в плане экономии контактов.
Выходом в этой ситуации может стать I2C/IIC переходник, который
подключает практически стандартный для Arduino экран 1602 к платам Uno,
Nano или Mega всего лишь при помощи 4 пинов. В нашей лабораторной работе
мы посмотрим, как можно подключить LCD экран с интерфейсом I2C.
I2C/IIC (Inter-Integrated Circuit) – это протокол, изначально
создававшийся для связи интегральных микросхем внутри электронного
устройства. Разработка принадлежит фирме Philips. В основе I2C протокола
является использование 8-битной шины, которая нужна для связи блоков в
управляющей электронике, и системе адресации, благодаря которой можно
общаться по одним и тем же проводам с несколькими устройствами. Мы просто
передаем данные то одному, то другому устройству, добавляя к пакетам данных
идентификатор нужного элемента.
Самая простая схема I2C может содержать одно ведущее устройство
(чаще всего это микроконтроллер Arduino) и несколько ведомых (например,
30
дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух
устройств с одинаковым адресом в одной схеме быть не должно.
Плата Arduino поддерживает I2C на аппаратном уровне. Вы можете
использовать пины A4 и A5 для подключения устройств по данному протоколу.
Самый быстрый и удобный способ использования I2C дисплея в Arduino
– это покупка готового экрана со встроенной поддержкой протокола.
3.3 Вывод информации на ЖК-дисплей
Соберите схему (рисунок 3) для подключения дисплея LCD1602 с
модулем I2C к плате Arduino Uno.
Рисунок 3 Схема подключения дисплея LCD1602 с модулем I2C к плате
Arduino Uno
Откроем среду FLProg на персональном компьютере и создадим новый
проект.
Поскольку нам необходимо знать уникальный адрес дисплея, для этого
просканируем шину, аналогично сканированию шины OneWire в предыдущем
проверочном задании.
Во встроенных библиотеках в папке Дисплеи выбираем блок Дисплей на
чипе HD44780 и переносим его на поле программы.
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
Подадим питание на схему посредством USB кабеля, подключенного к
ПК и во вновь созданном проекте FLProg заходим в меню Инструменты →
Шины данных → Сканирование шины I2C (рисунок 4).
31
Рисунок 4 Сканирование шины I2C
Следующим шагом последовательно выбирается плата
микроконтроллера, для подключенного дисплея программа автоматически
формирует скетч, который загружается в плату. Далее производим
сканирование шины - .
Рисунок 5 Сканирование шины I2C
Адрес устройства (в нашем случае 27) необходимо запомнить или можно
сохранить его в виде отдельного файла в папке с текущим проектом.
После этого можно выводить на экран дисплея данные строкового типа.
Для этого заходим в настройки дисплея, выбираем новый дисплей,
32
подключение через I2C, вводим адрес устройства (27 в нашем случае). В строке
Данные ставим галочку Вход. Строка 1, столбец 1.
Рисунок 6 Настройки дисплея
После настройки у блока дисплея появляется 2 входа: EN и D. Для
активации дисплея (включения) вход EN необходимо инвертировать (правой
кнопкой мыши). Правой кнопкой мыши на входе D введем для примера данные
строкового типа (String) «Hello, world!».
Рисунок 7 Окончательный вид настроенного блока Дисплей
Готовый проект компилируется и загружается в плату Arduino Uno.
Теперь на экране дисплея в первой строке слева должна отображаться надпись
Hello, world!.
33
Стоит учитывать, что в большинстве модулей нет поддержки русского
алфавита (только английский), но эту проблему также можно решить,
используя расширенные библиотеки. В рамках нашего курса этим мы
заниматься не будем.
Экспериментально самостоятельно настройте дисплей для случаев:
- вывода надписи во второй строке;
- вывода надписи по центру в первой и второй строке.
- вывода вашего имени в английском формате.
4 Задание на самостоятельную работу
1. Самостоятельно изучить во встроенных библиотеках FLProg блоки
Сложение строк и Конвертация строк (информацию о блоках можно
получить, нажав на кнопку Информация в настройках указанного блока).
2. Реализовать работу цифрового термометра (схема устройства
представлена на рисунке 8), который выводит на экран дисплея значение
температуры окружающей среды в следующем формате: t 26.70 C.
- информация должна выводиться в центре первой строки;
- данные температуры окружающей среды должны обновляться с
интервалом 3 сек.
Рисунок 8 Схема цифрового термометра
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схему в виде отдельного файла в формате Lab04_1.flp;
34
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Схема подключения ЖК-дисплея LCD1602.
2. Что такое I2C?
3. Как определить адрес ЖК-дисплея LCD1602?
4. Какого типа данные выводятся на экран ЖК-дисплея?
5. Какие настройки есть у блока «дисплей на чипе HD44780»?
5 УПРАВЛЕНИЕ ПРИВОДАМИ
Лабораторная работа № 5
1 Цель работы
Познакомиться с принципами управления серводвигателями и
униполярными шаговыми двигателями с помощью микроконтроллера.
2 Программа работы
2.1 Изучить информацию о сервомоторах и шаговых двигателях.
2.2 Реализовать проект управления углом поворота вала сервопривода от
ручки потенциометра.
2.3 Реализовать проекты:
- непрерывного вращения шагового двигателя по часовой и против
часовой стрелки;
- вращения шагового двигателя по часовой стрелке на определенное
количество шагов.
2.4 Выполнить задание на самостоятельную работу.
2.5 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- сервомотор SG90;
- шаговый двигатель 28BYJ-48 с драйвером ULN2003;
- беспаечная макетная плата;
- провода (джамперы);
- USB-кабель.
3 Краткие теоретические сведения
3.1 Сервопривод
35
Двигатели постоянного тока прекрасно зарекомендовали себя в качестве
моторов, но очень неудобны для точных работ, т.к. не имеют обратной связи.
Другими словами, без какого-нибудь внешнего датчика нельзя определить
положение вала двигателя постоянного тока. Серводвигатель (сервомотор)
отличается тем, что с помощью команд его можно установить в определенное
положение, в котором он будет находиться до поступления новой команды.
Серводвигатели (рисунок 1), которые мы будем использовать, имеют
фиксированный угол поворота вала (от 0 до 180º) и содержат соединенный с
выходным валом потенциометр (позиционер), который определяет угол
поворота привода. Управляется серводвигатель с помощью ШИМ сигнала. Но,
в отличие от обычного двигателя постоянного тока, здесь уровень ШИМ задает
не скорость вращения, а угол поворота. Кроме того, так как серводвигатель
содержит всю необходимую силовую электронику, управлять им можно
непосредственно с порта микроконтроллера. Без потенциометра получится
серводвигатель непрерывного вращения, который сможет вращаться
постоянно, длительность импульса будет определять скорость вращения.
Рисунок 1 Серводвигатель
Схема подключения серводвигателя к плате Arduino Uno показана на
рисунке 2. Однако, чтобы не перегружать плату, в проектах рекомендуется
использовать отдельное питание для приводов.
Дополнительно в схеме присутствует потенциометр R1.
Рисунок 2 Схема подключения серводвигателя
36
Пример: реализовать проект управления углом поворота вала
сервопривода от ручки потенциометра.
После сборки схемы, запустим среду FLProg и создадим новый проект.
Для потенциометра во вкладке Tags создадим новый аналоговый вход R1
и разместим его на свободном поле программы.
Рисунок 3 Созданный аналоговый вход R1 потенциометра
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
Во встроенных библиотеках во вкладке Моторы находим блок
ServoMotor и также перенесем его на поле программы. Настроим блок согласно
рисунку 4.
Рисунок 4 Настройки блока управления серводвигателем
37
После настройки у блока появится два входа EN (активация мотора) и A
(сигнальный вход). Для активации сервомотора вход EN необходимо
инвертировать.
Поскольку мы знаем, что АЦП Arduino Uno выдает значения в цифровом
формате в диапазоне от 0 до 1023, а угол поворота сервомотора ограничен
интервалом от 0 до 180 градусов в схему введем дополнительный блок
масштабирования Scale. В настройках Scale верхний и нижний пределы
входного сигнала устанавливаем, соответственно 1023 и 0, а верхний и нижний
пределы выходного сигнала, соответственно на 180 и 0. Далее блоки
последовательно соединяем между собой, как показано на рисунке 5.
После проверки проекта, его компиляции и загрузки в плату Arduino Uno
можно управлять углом поворота вала сервопривода посредством вращения
ручки потенциометра.
Рисунок 5 Готовая блок-схема проекта
3.2 Шаговый двигатель
Шаговый двигатель (ШД) представляет собой электромеханическое
устройство, задачей которого является преобразование электрических
импульсов в перемещении вала двигателя на определенный угол. ШД
применяются там, где требуется высокая точность перемещений или скорости
(например, принтеры, факсы, копировальные машины, станки с ЧПУ). ШД –
синхронный бесщеточный электродвигатель с несколькими обмотками, в
котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию
ротора. Последовательная активация обмоток двигателя вызывает дискретные
(прерывистые) угловые перемещения ротора (шаги).
Нам уже известно, что микроконтроллер — это устройство, которое
оперирует малыми токами и напряжениями. Так большинство современных
38
микроконтроллеров работают с напряжениями 5 В, 3.3 В либо еще меньше. При
этом сила тока, проходящего через выводы микроконтроллеров, обычно не
должна превышать 20…40 мА. Такого тока достаточно, чтобы зажечь
светодиод. Однако для управления электрическим двигателем мощности
микроконтроллера недостаточно.
Поэтому для управления двигателем нужно использовать
дополнительные устройства, которые бы позволили управлять большими
токами, проходящими через двигатель. В самом простом случае в роли такого
ключа можно использовать мощные транзисторы. Однако удобнее
использовать специальные микросхемы-драйверы двигателей (рисунок 6).
Такие микросхемы содержат все необходимые компоненты для коммутации
тока и позволяют управлять направлением и скоростью вращения двигателя.
Рисунок 6 Драйвер шагового двигателя ULN2003
В нашем курсе мы рассмотрим работу униполярного шагового двигателя
28BYJ-48 (рисунок 7) с драйвером ULN2003.
Рисунок 7 Униполярный шаговый двигатель
Пример: реализовать проекты:
- непрерывного вращения шагового двигателя по часовой и против
часовой стрелки;
- вращение шагового двигателя по часовой стрелке на 800 шагов.
39
Рисунок 8 Схема подключения шагового двигателя
После сборки схемы, запустим среду FLProg и создадим новый проект.
Во встроенных библиотеках во вкладке Моторы находим блок StepMotor
и перенесем его на поле программы. Перейдем к настройкам блока.
Производим выбор пинов к которым подключен драйвер шагового двигателя.
Опция Количество шагов на оборот двигателя – 64 указано без учета
редуктора. Максимальная скорость – 400 мин-1.
При выборе опции Вращение можно управлять вращением по часовой
или против часовой стрелки. При выборе опции Шаги можно управлять
количеством шагов.
Если опция Установить скорость не выбрана, то двигатель будет
вращаться с максимальной скоростью 400 мин-1.
40
Рисунок 9 Настройка блока StepMotor для непрерывного вращения по
часовой стрелке
После выставления настроек, вход En необходимо инвертировать для
активации шагового двигателя.
Далее проект компилируется и загружается в плату Arduino Uno.
Соответственно при выборе в настройках Против часовой шаговый
двигатель будет осуществлять непрерывное вращение в противоположную
сторону.
Для осуществления управления шагами, необходимо выбрать опцию
Шаги и выставить нужное количество шагов.
Рисунок 10 Настройка управления шаговым двигателем на определенное
количество шагов
4 Задание на самостоятельную работу
1. Реализуйте проект Lab05_1.flp поворота вала сервопривода на
установленный заранее угол (120º) при подаче питания на схему. Сигнальный
вывод сервопривода подключить к 7 цифровому пину Arduino.
2. Реализуйте проект Lab05_2.flp управления углом поворота вала
сервопривода от тактовой кнопки SB1, подключенной к 4 цифровому пину.
Сигнальный вывод сервопривода подключить к 7 цифровому пину Arduino.
При каждом нажатии на тактовую кнопку SB1 вал сервопривода должен
поворачиваться по часовой стрелке на угол 90 º и фиксироваться в этом
положении.
3. Реализовать проект Lab05_3.flp управления шаговым двигателем от
двух тактовых кнопок SB1 (4 цифровой пин) и SB2 (5 цифровой пин):
- при нажатии на кнопку SB1 шаговый двигатель вращается по часовой
стрелке;
41
- при нажатой SB1 и одновременном нажатии на кнопку SB2 направление
вращения меняется на противоположное. Схема подключения шагового
двигателя представлена на рисунке 8.
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схемы в виде отдельных файлов Lab05_1.flp, Lab05_2.flp,
Lab05_3.flp;
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Преимущества сервомоторов по сравнению с другими типами.
2. Принцип работы сервомотора.
3. Преимущества шагового двигателя по сравнению с другими типами.
4. Принцип работы шагового двигателя.
5. Особенности подключения моторов к микроконтроллерам.
6 ИЗУЧЕНИЕ СЕТЕЙ СВЯЗИ
Лабораторная работа № 6
1 Цель работы
Изучить способ передачи данных и обмена информацией на примере
многоуровневого беспроводного протокола связи Bluetooth.
2 Программа работы
2.1 Изучить информацию о протоколе связи Bluetooth.
2.2 Изучить приложение RemoteXY.
2.3 Реализовать проект беспроводного управления нагрузкой со
смартфона с операционной системой Android.
2.4 Выполнить задание на самостоятельную работу.
2.5 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- модуль Bluetooth HC-05 (06);
- смартфон с операционной системой Android (iOS);
- беспаечная макетная плата;
42
- 3 светодиода;
- провода (джамперы);
- USB-кабель
- 3 резистора на 220 Ом.
Примечание: Устройства iOS не поддерживают модули HC-05(06).
Вместо них вы можете использовать модуль Bluetooth BLE HM-10.
3 Краткие теоретические сведения
3.1 Протокол связи Bluetooth
Для любого цифрового устройства, каким бы простым оно не было,
требуется протокол связи. Даже такая простая команда, как просьба включить
свет, требует, чтобы как отправитель, так и получатель знали, как сказать
«включить свет».
Многоуровневый протокол связи Bluetooth призван заменить проводные
соединения для некоторых приложений. Поэтому протокол разделен на
несколько подпротоколов для потенциальных приложений, которые
называются профилями. Самые простые устройства Bluetooth – это устройства
для последовательного обмена данными, подобные используемому в этой
работе модулю. Такие устройства реализуют профиль Bluetooth SPP (Serial Port
Profile – профиль последовательного порта). Другие устройства Bluetooth
реализуют иные профили протокола: беспроводная гарнитура – аудиопрофиль
HSP (Headset Profile – профиль наушников), а беспроводные мыши и
клавиатуры – профиль HID (Human Interface Device – интерфейс «человек-
машина»). Поскольку устройство Bluetooth может поддерживать несколько
профилей протокола, существует протокол обнаружения сервисов SDP (Service
Discovery Protocol), с помощью которого радиоустройства обмениваются
информацией о поддерживаемых ими возможностях Bluetooth.
Технология Bluetooth используется для передачи данных между двумя
устройствами, которые находятся в непосредственной близости друг с другом,
причем необязательна прямая видимость. Bluetooth обеспечивает хорошую
устойчивость к широкополосным помехам, что позволяет множеству устройств,
находящихся в одном месте, одновременно общаться между собой, не мешая
друг другу. Очень широко данная технология используется в телефонах,
планшетах, ноутбуках.
Одно из лучших решений для организации двусторонней связи по
Bluetooth вашего Arduino-устройства с планшетом, ноутбуком или другим
Bluetooth-устройством – Bluetooth-модуль HC-05, который может работать как
master (осуществлять поиск Bluetooth-устройств и инициировать установку
связи), так и slave (ведомое устройство).
43
Рисунок 1 Bluetooth модуль HC-05
Технические характеристики Bluetooth модуля HC-05:
Диапазон частот радиосвязи: 2,4–2,48 ГГц.
Мощность передачи: 0,25–2,5 мВт.
Напряжение питания: 3,3–5 В.
Потребляемый ток: 50 мА.
Радиус действия: до 10 метров.
Интерфейс: последовательный порт.
Режимы: master, slave.
Рабочий диапазон температур: –25…75 °C.
3.2 Общие сведения о RemoteXY
RemoteXY - это система разработки и использования мобильных
графических интерфейсов для управления контроллерами со смартфона или
планшета. Бесплатная версия позволяет запускать графические интерфейсы,
содержащие до 5 графических элементов без каких-либо ограничений.
В состав системы входят:
- редактор мобильных графических интерфейсов для контроллеров,
размещенный на сайте [Link]
- мобильное приложение RemoteXY, позволяющее подключаться к
контроллеру и отображать графические интерфейсы
[Link]
Отличительные особенности:
1. Конфигурация графического интерфейса хранится в контроллере. При
подключении нет никакого взаимодействия со сторонними серверами для того,
чтобы загрузить графически интерфейс. Конфигурация графического
интерфейса загружается в мобильное приложение из контроллера.
2. С одного мобильного приложения вы можете управлять всеми своими
устройствами. Количество устройств не ограничено.
3. Поддерживаются следующие способы связи между контроллером и
мобильным устройством:
- Bluetooth;
- WiFi в режиме клиента и точки доступа;
- Ethernet по IP адресу или URL;
- Интернет из любого места через облачный сервер.
- USB (доступно только для Android с поддержкой USB OTG).
44
Поддерживаются следующие модули связи:
- Bluetooth HC-05, HC-06 и совместимые;
- WiFi ESP8266;
- Ethernet Shield W5100.
Поддерживаемые IDE:
- Arduino IDE;
- FLProg;
- MPIDE;
Поддерживаемые мобильные операционные системы:
- Android;
- iOS.
3.3 Разработка графического интерфейса в графическом редакторе
RemoteXY и получение исходного кода
Пример: разработать проект беспроводного управления нагрузкой
(светодиодом) со смартфона с операционной системой Android.
Соберите схему подключений проекта (рисунок 2). Подключите модуль
HC-05(06) к Arduino Uno. Контакты RX-TX соединяются перекрестно.
Рисунок 2 Схема проекта беспроводного управления нагрузкой
Войдите в редактор RemoteXY. Установите в поле смартфона одну
кнопку. Выделите эту кнопку, затем в правой панели во вкладке «Элемент»
выберите свойство «Привязать к выводу» в значение 12(LED).
45
Рисунок 3 Создание кнопки LED0
В правой панели во вкладке «Конфигурация», выберите следующие
настройки.
Рисунок 4 Настройки конфигурации
В правой панели во вкладке «Подключение модуля» установите
следующие настройки.
46
Рисунок 5 Настройки «Подключение модуля»
Настройки указывают, что модуль HC-05(06) подключается к Arduino
через программный последовательный порт SoftwareSerial используя контакты
2 и 3 на скорости 9600. Это стандартная скорость для модулей HC-05(06).
Кликните на кнопку «Получить исходный код».
Рисунок 6 Исходный код проекта
3.4 Создание блок схемы проекта в FLProg
Запустите среду FLProg и создайте новый проект.
Для нагрузки – светодиода создайте новый цифровой выход LED0 и
перенесите его на свободное поле программы. Номер контакта определяется
согласно схеме проекта (в нашем случае – 12).
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
Во встроенных библиотеках блоков в папке Готовые сервисы выберите
блок Удаленное управление через «RemoteXY» и перенесите его на поле
программы перед блоком светодиода LED0.
47
Рисунок 7 Компоновка блоков
Настроим блок RemoteXY. Во вкладке Коммуникационный модуль
выберите используемый в проекте HC-05(06) Bluetooth module.
Рисунок 8 Выбор коммуникационного модуля
Во вкладке «Выбрать UART» выбираем Software Serial. Выставляем
настройки последовательного интерфейса согласно рисунку 9.
48
Рисунок 9 Настройки последовательного интерфейса
Перейдите во вкладку Входы/выходы. Кликните на опцию Загрузить
описание, затем скопируйте и вставьте в поле исходный код интерфейса
RemoteXY.
Рисунок 10 Загрузка описания блока RemoteXY
Соедините выход блока RemoteXY с входом блока LED0. Готовая блок-
схема проекта представлена на рисунке 11.
49
Рисунок 11 Блок-схема проекта
Проверьте проект на наличие ошибок, скомпилируйте и загрузите в
модуль Arduino Uno.
3.5 Реализация беспроводного управления нагрузкой
Установите на смартфоне с операционной системой Android приложение
RemoteXY. Включите на смартфоне режим Bluetooth и запустите
установленное приложение. Произведите соединение смартфона с устройством
Bluetooth – модулем Arduino Uno.
Рисунок 12 Соединение смартфона с устройством Bluetooth
50
После некоторого времени, необходимого на соединение с модулем, вам
будет предложено ввести пароль для сопряжения. Модули серии HC-05/06)
имеют запрограммированный пароль "1234". Если соединение произошло
успешно, поскольку конфигурация графического интерфейса хранится в
контроллере, на смартфоне появится ваш разработанный интерфейс. Теперь вы
можете управлять нагрузкой со своего смартфона.
4 Задание на самостоятельную работу
Разработать устройство с управлением через смартфон. Устройство
включает в себя микроконтроллерный модуль с подключенными к нему
датчиком температуры, например DS18B20, и тремя нагрузками –
вентилятором (Fan), освещением (Led) и насосом для полива (Water). На экране
смартфона должна отображаться текущая температура окружающей среды.
Роль нагрузки выполняют три светодиода (Led1…Led3), подключенные к
произвольным цифровым портам микроконтроллера. При нажатии и удержании
пальцем соответствующей кнопки (bt1…bt3), должны загораться светодиод на
плате Arduino Uno и световая индикация на экране смартфона. При отпускании
кнопки светодиод и световая индикация должны гаснуть.
Графический интерфейс для смартфона в RemoteXY разработать согласно
рисунку 13.
Вывод значения
температуры
Световая
индикация
Кнопки
управления нагрузкой
Рисунок 13 Графический интерфейс для смартфона
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схему в виде отдельного файла Lab06_1.flp;
- ответы на контрольные вопросы;
- выводы по работе.
51
6 Контрольные вопросы
1. Особенности протокола связи Bluetooth.
2. Особенности среды разработки RemoteXY.
3. Порядок реализации беспроводного управления нагрузкой по
протоколу связи Bluetooth с использованием среды разработки RemoteXY.
7 ИЗУЧЕНИЕ СЕНСОРНОГО ДИСПЛЕЯ NEXTION И
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ NEXTION EDITOR
Лабораторная работа № 7
1 Цель работы
Изучить функциональные возможности сенсорного дисплея Nextion и
приобрести навыки его программирования.
2 Программа работы
2.1 Изучить информацию о цветных TFT дисплеях Nextion.
2.2 Изучить программу Nextion Editor.
2.3 Реализовать проект управления нагрузками с помощью сенсорного
дисплея Nextion.
2.4 Выполнить задание на самостоятельную работу.
2.5 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- сенсорный дисплей Nextion;
- карта памяти microSD;
- беспаечная макетная плата;
- 3 светодиода;
- провода (джамперы);
- USB-кабель
- 3 резистора на 220 Ом.
3 Краткие теоретические сведения
3.1 Общие сведения о дисплеях Nextion
Цветные TFT дисплеи Nextion это модули, оснащѐнные 32-разрядным
микроконтроллером, контроллером сенсорного экрана, флеш-памятью, часами
реального времени и разъемами: SD-карты, шины UART и выводов GPIO.
52
Рисунок 1 Дисплей Nextion
Модули дисплеев способны самостоятельно обрабатывать поступающую
информацию (касание элементов экрана и команды поступающие по шине
UART), управлять элементами экрана (менять картинки, текст, цвет, состояние
кнопок, положение слайдеров, выводить время, значение таймеров и
переменных, и т.д.) и управлять внешними устройствами (отправлять команды
по шине UART, управлять выводами GPIO).
Программа Nextion Editor для работы с дисплеями Nextion позволяет
создать как интерфейс пользователя (используя различные библиотечные
элементы: кнопки, слайдеры, картинки, графики, текст и т.д.), так и прописать
алгоритм поведения дисплея (написав код для различных событий элементов
участвующих в интерфейсе дисплея). Для проверки работы написанного Вами
кода нет необходимости загружать данные в дисплей, так как в программе
имеется встроенный эмулятор, который отображает не только поведение
элементов интерфейса, но и получает/отображает принимаемые/возвращаемые
данные по шине UART.
3.2 Создание интерфейса в Nextion Editor
Для создания интерфейса дисплея требуется скачать и установить
программу Nextion Editor V1.61.1 с официального сайта.
Зайдите на сайт Nextion ([Link]
нажмите на кнопку «EXE DOWNLOAD» и согласитесь с установкой
программы.
Запустите программу Nextion Editor, после еѐ установки на Ваш
компьютер.
53
Рисунок 2 Начальное окно программы
Создадим новый проект выбрав пункт меню «File > New» > [Link].
При создании проекта откроется окно для выбора директории и имени
создаваемого файла проекта. Укажите их и нажмите на кнопку «Сохранить».
Откроется окно настроек «Setting» для выбора типа используемого в
проекте дисплея. Для дисплея Nextion 240×400 3,2” нужно выбрать линейку
дисплеев «Basic» и модель «NX4024T032_11», после чего нажать на вкладку
«DISPLAY» для перехода к выбору ориентации дисплея.
Рисунок 3 Выбор модели дисплея
Выберите требуемую ориентацию дисплея (в примере используется
горизонтальная ориентация - 90) и кодовую страницу для вывода текста
54
(кириллицу поддерживает кодовая страница iso-8859-5). После чего
подтвердите свой выбор нажав на кнопку «Ok».
Теперь все окна программы станут активными.
Рисунок 4 Окна программы
Вернуться к окну «Setting» для изменения типа дисплея, его ориентации и
кодовой страницы можно нажав на кнопку «Device» в главном меню редактора.
Для первого знакомства с Nextion Editor наибольший интерес
представляет окно библиотеки элементов, в нем содержатся элементы, которые
можно размещать на экране дисплея.
55
Text - текстовое поле
Scrolling text - текстовое поле с
прокруткой (бегущая строка)
Number - поле с числовыми
значениями
Button - кнопка без фиксации
Progress bar – область,
заполненная на заданное значение %
Picture - картинка (отображает
изображение, выбранное из списка
загруженных картинок)
Crop - часть картинки
(область, вырезанная из указанной
картинки)
Hotspot - невидимая кнопка
Gauge - стрелка
Waveform - поле построения
графика по точкам
Slider - слайдер, это область с
ползунком который можно двигать
Timer - размещается под
экраном, вызывает событие через
определѐнные промежутки времени
Variable - размещается под
экраном, переменная для хранения
данных
Dual-state button - кнопка с
фиксацией
Checkbox - флажок (поле
множественного выбора)
Radio - переключатель (поле
одиночного выбора)
В проекте будут использоваться картинки и шрифты, которые можно
загрузить в проект по ссылке ([Link]
Загруженные картинки и шрифты можно увидеть в окне со списком
загруженных картинок и шрифтов. В процессе создания интерфейса, картинки
и шрифты можно добавлять, удалять, и заменять.
Загрузим в проект картинки нажав на кнопку «Add» (Добавить) в окне
«Picture». Обратите внимание на то, что в нижней части окна должна быть
активна вкладка «Picture», а не «Fonts».
56
Рисунок 5 Добавление рисунков
Откроется окно выбора файлов. Укажите путь к папке с файлами
картинок, выделите все картинки, которые требуется добавить в проект, и
нажмите на кнопку «Открыть». Программа выдаст сообщение «import
successfully 7 pieces» информируя Вас об успешной загрузке семи картинок.
Теперь в окне «Picture» появился список из 7 картинок, которым вместо
имѐн присвоены номера от 0 до 6, после номера указан размер картинок в
пикселях. Если Вы захотите использовать картинку в элементах проекта, нужно
будет указать еѐ номер из этого списка.
Рисунок 6 Добавленные рисунки в окне «Picture»
Нажмите на вкладку «Fonts» в нижней части списка загруженных
картинок, для перехода от списка загруженных картинок к списку загруженных
шрифтов.
57
Рисунок 7 Вкладка «Fonts»
Окно «Picture» заменилось на окно «Fonts» список шрифтов которого
пуст, так как шрифты еще не загружены в проект. Загрузить можно только
шрифты с расширением «*.zi», если у Вас таких шрифтов нет, то их можно
создать из любого шрифта установленного на Вашем компьютере.
Для создания шрифта откроем генератор шрифтов из пункта меню «Tools
> Font Generator».
В окне генератора шрифтов нужно выбрать имя системного шрифта (в
поле «Preview Area») который Вы хотите использовать, высоту для
создаваемого шрифта (в поле «Height») и придумать имя создаваемого шрифта
(в поле «Font Name»). Если требуется, то можно изменить кодировку (в поле
«Code») и выбрать полужирное начертание (установив галочку «Bold»). После
чего создать шрифт нажав на кнопку «Generate font».
Рисунок 8 Генерация шрифта
58
Откроется окно сохранения файла. Укажите путь к папке, в которую Вы
желаете сохранить файл сгенерированного шрифта, и имя файла, после чего
нажмите на кнопку «Сохранить».
Чтоб не запутаться, лучше использовать папку, в которой находится файл
проекта, а в качестве имени файла использовать название системного шрифта.
Теперь можно загрузить шрифт (шрифты) в список шрифтов проекта
нажав на кнопку «Add» (Добавить) в окне «Fonts», так же как Вы ранее
добавляли картинки в окне «Picture».
После выбора файла шрифта, в окне «Fonts» появится список из 1
шрифта, которому будет присвоен номер 0, после номера указано имя шрифта,
размер символа, кодировка и размер файла. Если Вы захотите использовать
шрифт в элементах проекта, нужно будет указать его номер из этого списка.
Если вы загрузите еще один шрифт, он отобразится в списке под номером 1 и
т.д.
Рисунок 9 Добавленный шрифт в окне «Fonts»
Интерфейс пользователя состоит из элементов. В нашем примере
используется два элемента: текстовое поле и кнопка с фиксацией. Так как в
примере используется только одна страница «page0», то все элементы будут
добавлены именно в неѐ.
Добавим элемент «Text» (текстовое поле) однократно нажав на нѐм в
окне «Toolbox» (библиотека элементов). Выбранный элемент появится на
активной странице и будет виден в области отображения экрана дисплея.
Элементу автоматически присвоится имя «t0».
Выберите элемент текстовое поле, находящееся в области отображения
экрана дисплея нажав на него мышкой или выбрав поле «t0(Text)» из верхнего
списка в окне «Attribute» (редактор атрибутов элементов).
Установим текстовое поле в нужную позицию на экране (присвоив
значение атрибутам x=16, y=195). Можно просто перемещать слайдер по
экрану мышкой.
Зададим размеры текстового поля по ширине и высоте (w=100, h=30).
59
Укажем текст, который будет отображаться в поле при старте
(txt="вентиляция").
Тип шрифта устанавливается присвоением атрибуту «font» номера
шрифта. Так как в примере был загружен только один шрифт, то можно
присвоить единственный возможный номер (font=0). Номер шрифта можно
посмотреть в окне «Fonts» содержащем список загруженных шрифтов.
Назначим область видимости значений текстового поля как глобальная
(присвоив атрибуту «vscope» значение «global»).
Можно изменить имя текстового поля присвоив новое значение атрибуту
«objname», тогда команды на изменение его атрибутов во время работы, нужно
будет отправлять с указанием нового имени.
Значение атрибута «id» изменить нельзя, оно присваивается
автоматически по порядку добавления элементов, в нашем примере это: 0-
страница, 1-текст, 2-слайдер, 3-кнопка.
После редактирования атрибутов текстового поля, на экране изменятся
его положение, внешний вид и размеры.
Рисунок 10 Добавление текстового поля
Добавим элемент «Dual-state button» (кнопка с фиксацией) однократно
нажав на нѐм в окне «Toolbox» (библиотека элементов). Выбранный элемент
появится на активной странице и будет виден в области отображения экрана
дисплея. Элементу автоматически присвоится имя «bt0».
Выберите элемент кнопка с фиксацией, находящийся в области
отображения экрана дисплея нажав на него мышкой или выбрав поле
«bt0(Dual)» из верхнего списка в окне «Attribute» (редактор атрибутов
элементов).
Установим кнопку в нужную позицию на экране (присвоив значение
атрибутам x=35, y=126). Можно просто перемещать кнопку по экрану мышкой.
Зададим размеры кнопки по ширине и высоте (w=50, h=50).
60
Укажем что кнопка будет содержать картинки (присвоив атрибуту «sta»
значение «image»).
Выберем для не нажатой кнопки картинку с не работающим
вентилятором (присвоив атрибуту «pic» номер этой картинки). Номер картинки
можно посмотреть в окне «Pictute» содержащем список загруженных картинок.
Выберем для нажатой кнопки картинку с работающим вентилятором
(присвоив атрибуту «pic2» номер этой картинки). Номер картинки можно
посмотреть в окне «Pictute» содержащем список загруженных картинок.
Атрибуты «pic» и «pic2» становятся доступными, только после
присвоения атрибуту «sta» значения «image».
Для присвоения значений атрибутам «pic» и «pic2» нужно дважды нажать
на поле атрибута и выбрать нужную картинку из появившегося списка
картинок.
Сотрѐм надпись с кнопки очистив значение атрибута «txt».
Назначим область видимости значений кнопки как глобальная (присвоив
атрибуту «vscope» значение «global»).
Можно задать состояние кнопки при старте установив значение атрибута
«val» в 1 (нажата) или 0 (отпущена).
Можно изменить имя кнопки присвоив новое значение атрибуту
«objname», тогда команды на изменение еѐ атрибутов во время работы, нужно
будет отправлять с указанием нового имени.
Значение атрибута «id» изменить нельзя, оно присваивается
автоматически по порядку добавления элементов, в нашем примере это: 0-
страница, 1-текст, 2-слайдер, 3-кнопка.
Рисунок 11 Добавление элемента Кнопка с фиксацией
После редактирования атрибутов кнопки, на экране изменятся еѐ
положение, внешний вид и размеры.
61
Таким же образом добавьте еще две кнопки: освещение и полив (с
рисунками для выключенного и включенного состояний). Также добавьте
соответствующие текстовые поля для указанных кнопок.
Рисунок 12 Добавленные элементы
Выберите единственную страницу нажав мышкой на область
отображения экрана дисплея в месте свободном от других элементов или
выбрав поле «page0(Page)» из верхнего списка в окне «Attribute» (редактор
атрибутов элементов).
Укажем что фон страницы будет состоять картинки (присвоив атрибуту
«sta» значение «image»).
Выберем картинку для фона страницы (присвоив атрибуту «pic» номер
этой картинки). Номер картинки можно посмотреть в окне «Pictute»
содержащем список загруженных картинок.
Значение атрибута «id» изменить нельзя, оно присваивается
автоматически по порядку добавления элементов, в нашем примере это: 0-
страница, 1-текст, 2-слайдер, 3-кнопка.
62
Рисунок 13 Добавление фона страницы
После редактирования атрибутов страницы, на экране появится фоновое
изображение.
В программе Nextion Editor имеется встроенный симулятор, в котором
можно проверить поведение элементов и выполнение кода не загружая проект в
дисплей.
Для запуска симулятора нажмите на кнопку «Debug» в главном меню
программы. В открывшемся окне видно изображение дисплея, на котором
можно нажимать на кнопки.
При каждом нажатии на кнопку будет меняться еѐ картинка.
Если Вас устраивает поведение дисплея в симуляторе, можно приступать
к загрузке данных непосредственно в дисплей. Загрузить проект в дисплей
можно двумя способами: через MicroSD-карту или по шине UART. Первый
способ предпочтительней, так как он занимает меньше времени.
Скомпилируйте проект нажав на кнопку «Compile» в главном меню
программы.
После компиляции в окне «Output» Вы увидите результат компиляции:
количество байт, занимаемое глобальными переменными, картинками,
шрифтами, количество страниц в проекте, ошибки, размер файла и т.д.
Если ошибок нет (нет строк, помеченных красным цветом), то можно
сохранить скомпилированный файл в корень MicroSD-карты.
Файл имеет имя проекта с расширением «tft» и лежит в директории
которую можно открыть выбрав пункт меню «File > TFT file output».
Сохраните файл из открывшейся папки в корень MicroSD-карты. В корне
должен находиться только один файл с разрешением *.tft. MicroSD-карта
должна быть предварительно отформатирована в FAT32 и не может превышать
размер в 32 ГГб. Установите MicroSD-карту в слот дисплея и подайте питание.
63
По окончании загрузки на дисплее отобразится надпись: Check Data... 100%
Update Successed!
Теперь можно отключить питание дисплея и извлечь MicroSD-карту (при
подаче питания без MicroSD-карты, на нѐм будет отображаться интерфейс
загруженного проекта).
3.3 Создание блок-схемы в FLProg
Соберите схему подключения согласно рисунку 14.
Рисунок 14 Схема подключений проекта
Создайте в FLProg новый проект Lab_07.flp.
Добавьте 3 цифровых выхода с номерами контактов: вентилятор - 5,
светильник - 8 и вентиль - 12.
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
Во встроенных блоках библиотеки в папке «Панель Nextion HMI» во
вкладке «Элементы» найдите элемент «Получить параметр» и пометите его на
поле программы перед выходом «вентилятор».
64
Рисунок 15 Размещение элемента «Получить параметр»
Рисунок 16 Настройка параметров Панель Nextion HMI
65
Рисунок 17 Настройка страницы и элемента «вентилятор»
Настройка элемента ведется в соответствии с параметрами,
присвоенными кнопке с фиксацией «вентилятор» в программе Nextion Editor (в
нашем случае Имя – bt0, ID – 2). Обращаем внимание, что у вас эти
параметры могут отличаться.
Рисунок 18 Итоговые настройки элемента «Получить параметр»
Соедините выход блока «Получить параметр» с входом блока
«вентилятор».
66
Рисунок 19 Блок-схема проекта с соединенными элементами
Аналогично добавьте и настройте еще 2 элемента «Получить параметр»
для блоков «светильник» и «вентиль».
Рисунок 20 Итоговая блок-схема проекта
Проверьте проект на наличие ошибок, скомпилируйте и загрузите скетч в
плату Arduino Uno. В результате при нажатии на кнопку «вентиляция»
сенсорного дисплея Nextion должен загораться и погасать светодиод LED2, при
нажатии на кнопку «освещение» – светодиод LED1, кнопки «полив» – LED0.
4 Задание на самостоятельную работу
67
Отправьте на проверку разработанный выше интерфейс панели Nextion в
файле [Link].
Отправьте на проверку блок-схему проекта в файле Lab07_1.flp.
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схему в виде отдельного файла Lab07_1.flp и интерфейс панели
Nextion в виде отдельного файла [Link];
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Особенности дисплеев Nextion.
2. Порядок разработки интерфейса дисплеев в среде Nextion Editor.
3. Порядок загрузки разработанного интерфейса в дисплей Nextion.
4. Настройка параметров Панель Nextion HMI в среде FLProg.
8 ИНФОРМАЦИОННО-УПРАВЛЯЮЩИЕ СИСТЕМЫ
Лабораторная работа № 8
1 Цель работы
Получение практических навыков по созданию человеко-машинного
интерфейса (ЧМИ) с помощью сенсорного дисплея Nextion.
2 Программа работы
2.1 Разработать проект устройство с сенсорным дисплеем Nextion,
позволяющее управлять вентиляционной установкой по датчику температуры
окружающей среды DS18B20.
2.2 Выполнить задание на самостоятельную работу.
2.3 Оформить отчет и ответить на контрольные вопросы.
Необходимые детали и компоненты:
- микроконтроллерный модуль Arduino Uno;
- сенсорный дисплей Nextion;
- датчик температуры DS18B20;
- карта памяти MicroSD;
- беспаечная макетная плата;
- 1 светодиод;
68
- провода (джамперы);
- USB-кабель
- 1 резистор на 220 Ом и 1 резистор на 4,7 кОм.
3 Краткие теоретические сведения
3.1 Построение ЧМИ
Человеко-машинный интерфейс (ЧМИ) (англ. Human-machine interface,
HMI) — широкое понятие, охватывающее инженерные решения,
обеспечивающие взаимодействие человека-оператора с управляемыми им
машинами.
Задание: разработать устройство с сенсорным дисплеем Nextion,
позволяющее управлять вентиляционной установкой по датчику температуры
окружающей среды DS18B20. Текущая температура должна отображаться на
дисплее. Предусмотреть 2 режима работы: ручной и автоматический. В
автоматическом режиме вентилятор (светодиод LED0) включается при
достижении температуры 30ºС и выключается при опускании температуры до
значения 25ºС. В ручном режиме включение и выключение вентилятора
производится с сенсорного дисплея при помощи программной кнопки.
Соберем схему подключений проекта (рисунок 1).
Рисунок 1 Схема проекта
Разработаем интерфейс панели управления устройством в Nextion Editor.
69
Создадим новый проект выбрав пункт меню «File > New» > [Link].
Последовательность выбора дисплея, настройки ориентации дисплея, загрузки
шрифтов и рисунков не приводится (см. предыдущее проверочное задание).
Добавим фон главной страницы (все рисунки находятся в специальной
папке, ссылка на скачивание: [Link]
Рисунок 2 Фон главной страницы
Добавим элементы: текстовые блоки Text (5 шт.), кнопки с фиксацией
Dual-state button (2 шт.).
Рисунок 3 Компоновка страницы элементами
Добавим код для события «нажатие» и «отпускание» элемента bt0
«кнопка с фиксацией».
70
Выберите элемент bt0 «кнопка», находящийся в области отображения
экрана дисплея, щелкнув по нему мышкой.
Введите следующий код в окно «Touch Press Event»:
if([Link]==1)
{
vis bt1,0
vis t2,0
}else
{
vis bt1,1
vis t2,1
}
При переключении режима работы устройства на автоматический, этот
код скрывает объект bt1 «кнопку» ручного управления вентилятором и
текстовый блок t2. В ручном режиме надпись и кнопка видна и функционирует.
Рисунок 4 Добавление кода события
Разработка графического интерфейса устройства закончена. Загрузите
интерфейс в дисплей с помощью MicroSD-карты.
Запустите программу FLProg и создайте новый проект Lab08_1.flp.
Создайте 1 цифровой выход с номером контакта для вентилятора (LED0) - 5.
Обратите внимание, что для каждого блока, используемого в наших
проектах, в его настройках имеется возможность ознакомиться с описанием его
работы, кликнув на кнопку «Информация».
Найдите во встроенных блоках библиотеки и разместите на поле
программы блок датчика температуры DS18x2x. Просканируйте шину OneWire
и определите уникальный адрес датчика (см. проверочное задание № 7).
71
Рисунок 5 Окно настроек блока Датчик температуры
Составим блок-схему для вывода значений текущей температуры
окружающей среды на дисплей. Для этого во встроенных блоках библиотеки в
папке «Панель Nextion HMI» во вкладке «Элементы» найдите элемент «Задать
параметр» и поместите его на поле программы перед выходом «вентилятор».
Настройку данного блока начинаем с вкладки Панель Nextion HMI.
Рисунок 6 Настройка вкладки Панель Nextion HMI
72
Рисунок 7 Настройка вкладки Элемент
Обратите внимание, что при разработке графического интерфейса блок
для вывода значений температуры – текстовый, поэтому будьте внимательны
при выставлении указанных настроек. Также обратите внимание на имя блока
(в нашем случае это t4) и ID – 7. В вашем случае эти параметры могут быть
отличными.
Рисунок 8 Итоговые настройки блока «Задать параметр»
Отправка нового значения температуры производится при поступлении
переднего фронта импульса на вход "Send". Поэтому для обнаружения
изменения значения температуры необходимо ввести в программу специальный
блок «Детектор изменения числа», который находится во встроенной
73
библиотеке блоков в папке «Базовые элементы». Кроме того, для конвертации
переменной из числа с плавающей запятой в строковую переменную выберем
из папки «Конвертация типов» блок «Конвертация строк».
Рисунок 9 Размещение блоков Number Change (детектор изменения
числа) и SConv (конвертация строк) и их соединение
Настроим работу устройства в автоматическом режиме. Для этого под
блоком датчика температуры разместим 2 блока «Компаратор» из папки
Сравнение и выставим их настройки, согласно приведенному рисунку.
Рисунок 10 Размещение блоков сравнения
Если температура превысит 30 ºС, на выходе верхнего блока сравнения
появится логическая 1 – это будет сигнал на включение вентилятора. Если
температура понизится до 25 ºС – логическая 1 появится на выходе нижнего
74
блока сравнения и этот сигнал должен отключить вентилятор. Для реализации
данного алгоритма выберем из папки «Триггеры» блок «RS-триггер»,
разместим его перед выходами блоков сравнения и произведем
соответствующие соединения.
Рисунок 11 Соединение блока RS-триггер
Загрузите данную блок-схему в Arduino Uno, переведите с помощью
сенсорного дисплея устройство в автоматический режим работы и убедитесь в
корректной ее работе, нагревая и охлаждая датчик температуры. Следите за
изменением показаний температуры на дисплее.
Доработаем блок-схему, в части реализации ручного режима работы
системы. Для этого на сенсорном дисплее переключатель режимов работы
должен быть в положении «Ручн.». Включение и отключение вентилятора в
этом случае можно производить нажатием кнопки «Вкл./Выкл».
Для этого разместим в нижней части окна программы 2 блока «Получить
параметр» из папки «Панель Nextion HMI». Один блок будет отслеживать
события кнопки bt0 – переключатель режимов работы, второй – отслеживать
события кнопки bt1 – «Вкл./Выкл.».
75
Рисунок 12 Настройка блока «Получить параметр» для кнопки bt0
Рисунок 12 Настройка блока «Получить параметр» для кнопки bt1
На заключительном этапе настроим логику работы устройства. Для этого
введем логические блоки И и ИЛИ. Окончательно блок-схема выглядит
следующим образом.
76
Рисунок 13 Блок-схема проекта
Проверьте проект на наличие ошибок, скомпилируйте и загрузите скетч в
плату Arduino Uno.
4 Задание на самостоятельную работу
Отправьте на проверку разработанный выше интерфейс панели Nextion в
файле [Link].
Отправьте на проверку блок-схему проекта в файле Lab08_1.flp.
5 Содержание отчета
Отчет по лабораторной работе должен содержать:
- цель работы;
- краткие теоретические сведения;
- блок-схему в виде отдельного файла Lab08_1.flp и интерфейс панели
Nextion в виде отдельного файла [Link];
- ответы на контрольные вопросы;
- выводы по работе.
6 Контрольные вопросы
1. Назначение человеко-машинного интерфейса (ЧМИ).
2. Назначение вкладки Event в среде Nextion Editor.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Хитров, А.И. Цифровые устройства и микропроцессоры: Рабочая
программа и практикум/A.И Хитров, А.А. Хитров. – Псков: Издательство
Псковского государственного университета, 2012. – 48 с.
77
2. Пухальский, Г.И. Проектирование дискретных устройств на
интегральных микросхемах. Справочник/Г. И. Пухальский, Т.Я. Новосельцева.
M.: Радио и связь, 1990 г.- 304 с.
3. Подбельский, В. В. Язык Си++ [Текст]: учеб. пособие для студ. вузов,
обуч. по напр. "Прикладная математика" и "Вычислительные машины,
комплексы, системы и сети"/ В. В. Подбельский. - 5-е изд. - М.: Финансы и
статистика, 2007. - 559 с.
3. Электроника и микропроцессорная техника. Дипломное
проектирование систем автоматизации и управления [Текст]: учебник для студ.
вузов, обуч. по напр. "Автоматизация и управление" / [С. Г. Григорьян и др.];
под ред. В. И. Лачина. - Ростов н/Д: Феникс, 2007. - 568 с.
4. Информационно-измерительная техника и электроника [Текст]:
учебник для студ. вузов, обуч. по напр. подготовки дипломированных спец.
"Электроэнергетика"/ [Г. Г. Раннев [и др.]; под ред. Г. Г. Раннева. - 2-е изд.,
стер. - М.: Академия, 2007. - 511 с.
5. Блум Джереми. Изучаем Arduino: инструменты и методы технического
волшебства: Пер. с англ. – СПб.: БХВ-Петербург, 2015. – 336 с.
78