Реклама ⓘ
Главная » Охрана
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Графический замок на дисплее Nextion HMI

Недавно мне попал в руки классный дисплей Nextion Enhanced HMI (NX8048K070_011C) диагональю 7 дюймов и емкостным тачскрином. Ниже я привел краткую табличку с характеристиками и фотографию дисплея. Ссылочка на дисплей: https://www.itead.cc/nextion-nx8048k070-011r-011c.html

Диагональ экрана, дюймы 7
Размер внутренней памяти, МБ 32
Размер оперативной памяти, байт 8192
Размер EEPROM памяти, байт 1024
Разрешение дисплея 800х480
Выводы, шт 8GPIO
Выводы ШИМ, шт 4
Тип сенсора емкостной

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

Тут все по стандартной схеме для экранов Nextion. ПЛИС, микроконтроллер на ARM микросхемы памяти, часы и т.д. Схема выверена до мелочей и это приятно, за что спасибо!

И да, я уже как-то рассказывал про дисплеи Nextion вот в этом видео: http://youtu.be/gNqT4LRnNC4

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

В Интернете гуляет множество электрических схем основанных на использовании электрозамков от автомобилей. Это очень интересно и классно, но я не хочу открывать дверь через Wifi, а хочу использовать для этого что-то красивое и понятное. Тут я вспоминаю про дисплеи Nextion. Далее сложилась концепция. Дисплеи Nextion имеют выводы GPIO, значит при правильных манипуляциях пользователя на одном из этих выводов будет появляться логическая единица открывающая дверь либо еще что-то. В добавок из 8 GPIO выводов 4 являются ШИМ выводами с регулируемой частотой и скважностью. Осталось придумать интерфейс.

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

Я начал искать и нашел проект одного парня, который используя ШИМ вывод дисплея сделал сенсорное пианино. Вот ссылочка кому интересно ознакомиться: http://support.iteadstudio.com/support/discussions/topics/11000008626 Дело в том, что ШИМ выводы у дисплеев Nextion имеют возможность изменять частоту в диапазоне от 1 ГЦ до 65536 Гц. На основе этого для каждой ноты зуммер будет пищать со своей частотой. Я бегло просмотрел его проект и в моей голове сложилась концепция графического интерфейса. Открытие двери будет выполнять при одновременном зажатии 4-х запрограммированных клавиш на пианино. И тут кроется еще один плюс используемого дисплея - мультитач. Теперь, когда все продуманно, можно преступать к работе.

Первым шагом нужно было переделать пианино под большее разрешение. Скачиваем Nextion Editor, устанавливаем и создаем проект нашего дисплея. Подгружаем в проект изображения клавиш пианино для удобства работы и подключаем его на фон страницы. Далее, у нас есть с десяток клавиш. Белые и черные. Нам необходимо создать нужное количество сенсорных областей. Часть этих областей будет на заднем плане, и это будут белые клавиши. Вторая часть будут впереди, и это будут черные клавиши.

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

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

Воспроизведение звука реализовано очень интересно. В функцию передается номер клавиши, далее идет расчет частоты ноты. Полученная частота задает частоту ШИМ выводов. Пока нажата клавиша, пищит зуммер. Со скважностью ШИМ сигнала можно по экспериментировать, чтобы добиться более приятного вашему уху звука. Ниже я привел код воспроизведения звука с помощью 7 GPIO настроенного на ШИМ вывод. Я решил использовать слайдер для настройки скважности ШИМ.

nnote.val=sys0
sys2=b[nnote.val+26].val/65536
pwm7=h0.val  // Set our duty cycle
cfgpio 7,3,0   // enable pwm on IO7
pwmf=b[sys0+26].val%65536*3 // set our pwm frequency
n0.val=b[sys0+26].val%65536*3  // Display our pwm freq in n0
n1.val=h0.val   // Display out Duty cycle in n1
n2.val=sys0   // Display our Key Number in n2
n3.val=b[sys0+26].val%65536 // Display our base note in n3

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

Все работает. Получившийся проект для Nextion Editor я прикрепил к статье.

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

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

Начнем с последнего. На странице открытия двери создаем кнопку "Закрыть дверь". В обработчике нажатия на кнопку выставляем на GPIO логический ноль и переходим на страницу с пианино. Достаем из закромов батарейку для дисплея и синхронизируем с помощью Nextion Editor время на дисплее. После этого на второй странице добавляем индикацию часов и даты. Время храниться в системных переменных rtc0-rtc6. Синхронизировать время можно в режиме Debug в Nextion Editor. Теперь осталось разобраться с энергосберегающим режимом. Во время написания программы я постоянно пользовался удобный справочником по командам среды Nextion Editor: http://www.itead.cc/wiki/Nextion_Instruction_Set Настраиваем выход из режима сна по касанию экрана и запускаем режим сна через минуту бездействия пользователя. Для этого в обработчика таймера вставляем две строчки:

thup=1
sleep=1

Наш графический интерфейс для замка готов. Осталось подключить к GPIO выводу реле и электрозамок, но в этом мало интересного.

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

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Алексей Павлов #
Привет. У меня не работает условие изменения значения в Xfloat окне.... вообще не реагирует на это!
If(x.val!=x.val) затем цикл не выполняется? Почему так? Это условие стандартное и приведено в описании дисплея на оффиц.сайте.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Бокс для хранения компонентов Макетная плата для пайки (10 шт)
вверх