Данное методическое пособие посвящено изучению принципов построения человеко-машинного интерфейса (ЧМИ) с применением сенсорных дисплеев Nextion и микроконтроллеров Arduino. В работе рассматривается создание системы управления вентиляционной установкой с двумя режимами работы: ручным и автоматическим. Материал включает пошаговую инструкцию по проектированию интерфейса в Nextion Editor, настройку логики в среде FLProg и практические рекомендации по подключению датчиков.
- Цель работы
- Необходимые детали и компоненты для выполнения проверочного задания:
- 12.1 Построение ЧМИ
- Разработка интерфейса в Nextion Editor
- Настройка событий кнопок
- Программирование в FLProg
- Вывод температуры на дисплей
- Детекция изменений и конвертация
- Автоматический режим работы
- Тестирование и ручной режим
- Завершение проекта
- 12.2 Задание на самостоятельную работу
Цель работы
Получение практических навыков по созданию человеко-машинного интерфейса (ЧМИ) с помощью сенсорного дисплея Nextion.
Необходимые детали и компоненты для выполнения проверочного задания:
- микроконтроллерный модуль Arduino Uno;
- сенсорный дисплей Nextion (при наличии возможности);
- датчик температуры DS18B20;
- карта памяти MicroSD;
- беспаечная макетная плата;
- 1 светодиод;
- провода (джамперы);
- USB-кабель;
- 1 резистор на 220 Ом и 1 резистор на 4,7 кОм.
12.1 Построение ЧМИ
Человеко-машинный интерфейс (ЧМИ) (англ. Human-machine interface, HMI) — широкое понятие, охватывающее инженерные решения, обеспечивающие взаимодействие человека-оператора с управляемыми им машинами.
Задание: Разработать устройство с сенсорным дисплеем Nextion, позволяющее управлять вентиляционной установкой по датчику температуры окружающей среды DS18B20. Текущая температура должна отображаться на дисплее. Предусмотреть 2 режима работы: ручной и автоматический. В автоматическом режиме вентилятор (светодиод LED0) включается при достижении температуры 30ºС и выключается при опускании температуры до значения 25ºС. В ручном режиме включение и выключение вентилятора производится с сенсорного дисплея при помощи программной кнопки.
Соберем схему подключений проекта

.
Рисунок 1 Схема проекта
Разработка интерфейса в Nextion Editor
Разработаем интерфейс панели управления устройством в Nextion Editor. Создадим новый проект выбрав пункт меню «File > New» > Proj2.HMI. Последовательность выбора дисплея, настройки ориентации дисплея, загрузки шрифтов и рисунков не приводится (см. предыдущее проверочное задание).
Добавим фон главной страницы (все рисунки находятся в специальной папке, ссылка на скачивание: https://disk.yandex.ru/d/OKoRAUOw8ty2Ow).

Рисунок 2 Фон главной страницы
Добавим элементы: текстовые блоки Text (5 шт.), кнопки с фиксацией Dual-state button (2 шт.).

Рисунок 3 Компоновка страницы элементами
Настройка событий кнопок
Добавим код для события «нажатие» и «отпускание» элемента bt0 «кнопка с фиксацией». Выберите элемент bt0 «кнопка», находящийся в области отображения экрана дисплея, щелкнув по нему мышкой.
Введите следующий код в окно «Touch Press Event»:
if(bt0.val==1)
{
vis bt1,0
vis t2,0
}else
{
vis bt1,1
vis t2,1
}
При переключении режима работы устройства на автоматический, этот код скрывает объект bt1 «кнопку» ручного управления вентилятором и текстовый блок t2. В ручном режиме надпись и кнопка видна и функционирует.

Рисунок 4 Добавление кода события
Программирование в FLProg
Разработка графического интерфейса устройства закончена. Загрузите интерфейс в дисплей с помощью MicroSD-карты.
Запустите программу FLProg и создайте новый проект Lab12_1.flp. Создайте 1 цифровой выход с номером контакта для вентилятора (LED0) — 5.
Обратите внимание, что для каждого блока, используемого в наших проектах, в его настройках имеется возможность ознакомиться с описанием его работы, кликнув на кнопку «Информация».
Найдите во встроенных блоках библиотеки и разместите на поле программы блок датчика температуры DS18x2x. Просканируйте шину OneWire и определите уникальный адрес датчика (см. проверочное задание № 7).

Рисунок 5 Окно настроек блока Датчик температуры
Вывод температуры на дисплей
Составим блок-схему для вывода значений текущей температуры окружающей среды на дисплей. Для этого во встроенных блоках библиотеки в папке «Панель Nextion HMI» во вкладке «Элементы» найдите элемент «Задать параметр» и поместите его на поле программы перед выходом «вентилятор».
Настройку данного блока начинаем с вкладки Панель Nextion HMI.


Рисунок 6 Настройка вкладки Панель Nextion HMI
Рисунок 7 Настройка вкладки Элемент
Обратите внимание, что при разработке графического интерфейса блок для вывода значений температуры – текстовый, поэтому будьте внимательны при выставлении указанных настроек. Также обратите внимание на имя блока (в нашем случае это t4) и ID – 7. В вашем случае эти параметры могут быть отличными.

Рисунок 8 Итоговые настройки блока «Задать параметр»
Детекция изменений и конвертация
Отправка нового значения температуры производится при поступлении переднего фронта импульса на вход «Send». Поэтому для обнаружения изменения значения температуры необходимо ввести в программу специальный блок «Детектор изменения числа», который находится во встроенной библиотеке блоков в папке «Базовые элементы». Кроме того, для конвертации переменной из числа с плавающей запятой в строковую переменную выберем из папки «Конвертация типов» блок «Конвертация строк».

Рисунок 9 Размещение блоков Number Change (детектор изменения числа) и SConv (конвертация строк) и их соединение
Автоматический режим работы
Настроим работу устройства в автоматическом режиме. Для этого под блоком датчика температуры разместим 2 блока «Компаратор» из папки Сравнение и выставим их настройки, согласно приведенному рисунку.

Рисунок 10 Размещение блоков сравнения
Если температура превысит 30 ºС, на выходе верхнего блока сравнения появится логическая 1 – это будет сигнал на включение вентилятора. Если температура понизится до 25 ºС – логическая 1 появится на выходе нижнего блока сравнения и этот сигнал должен отключить вентилятор. Для реализации данного алгоритма выберем из папки «Триггеры» блок «RS-триггер», разместим его перед выходами блоков сравнения и произведем соответствующие соединения.

Рисунок 11 Соединение блока RS-триггер
Тестирование и ручной режим
Загрузите данную блок-схему в Arduino Uno, переведите с помощью сенсорного дисплея устройство в автоматический режим работы и убедитесь в корректной ее работе, нагревая и охлаждая датчик температуры. Следите за изменением показаний температуры на дисплее.
Доработаем блок-схему, в части реализации ручного режима работы системы. Для этого на сенсорном дисплее переключатель режимов работы должен быть в положении «Ручн.». Включение и отключение вентилятора в этом случае можно производить нажатием кнопки «Вкл./Выкл».
Для этого разместим в нижней части окна программы 2 блока «Получить параметр» из папки «Панель Nextion HMI». Один блок будет отслеживать события кнопки bt0 – переключатель режимов работы, второй – отслеживать события кнопки bt1 – «Вкл./Выкл.».


Рисунок 12 Настройка блока «Получить параметр» для кнопки bt0
Рисунок 12 Настройка блока «Получить параметр» для кнопки bt1
Завершение проекта
На заключительном этапе настроим логику работы устройства. Для этого введем логические блоки И и ИЛИ. Окончательно блок-схема выглядит следующим образом.

Рисунок 13 Блок-схема проекта
Проверьте проект на наличие ошибок, скомпилируйте и загрузите скетч в плату Arduino Uno.
12.2 Задание на самостоятельную работу
Разработать устройство с сенсорным дисплеем Nextion, позволяющее управлять насосной установкой по датчику уровня воды (в качестве датчика уровня используем потенциометр на 10 кОм). Текущий уровень должен отображаться на дисплее. Предусмотреть 2 режима работы: ручной и автоматический. В автоматическом режиме насос (светодиод LED0) включается при опускании уровня до 50 л. и выключается при достижении уровня воды до значения 200 л. В ручном режиме включение и выключение насоса производится с сенсорного дисплея при помощи программной кнопки.
Отправьте на проверку разработанный уникальный интерфейс панели Nextion в файле Proj2.HMI.
Отправьте на проверку блок-схему проекта в файле Lab12_1.flp.
