Фильтр по тематике

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

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

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

Схемы и конструкция устройства

Функциональная схема модуля распознавания жестов показана на рисунке 5. Для аппаратной реализации устройства в качестве платформы был выбран микроконтроллерный модуль (отладочная плата) TE-TM4C123 [4]. Модуль выполнен на основе микроконтроллера (МК) TM4C123GH6PZI семейства TIVA компании Texas Instruments. Этот МК имеет процессорное ядро Cortex-M4 с максимальной тактовой частотой 80 МГц и память трёх типов: FLASH объёмом 256К, SRAM – 32К, EEPROM – 2К. Кроме МК плата TE-TM4C123 также содержит цветной ЖК-дисплей Nokia с диагональю 1,8 дюймов и разрешением 128 × 160 пикселей, пять пользовательских кнопок, кнопку сброса и четыре пользовательских светодиода. Цепи питания, общий провод и все линии ввода-вывода МК выведены на две линейки разъёмов на плате модуля. Программирование и отладка управляющей программы МК осуществляется с помощью встроенного в модуль JTAG-отладчика ICDI с внешним интерфейсом USB.

Модуль Grove-Gesture v1.0 в устройстве подключён к плате TE-TM4C123 по шине I2C. Кроме того, используется его выход прерываний INT, подключённый к цифровому входу PC4 МК. К четырём штатным светодиодам платы, подключённым к линиям ввода-вывода МК, добавлено ещё шесть внешних, которые также подключены к линиям ввода-вывода, заданным в качестве выходов распознавания жестов и выхода электронного замка. На функциональной схеме выходы распознавания жестов условно разделены на две шины: шина с штатными и шина с внешними светодиодами.

Принципиальная схема всего устройства показана на рисунке 6. Схема состоит из трёх частей: главный конт­роллер – модуль TE-TM4C123, модуль преобразователя уровней UART-RS-232 MOD-RS232 производства Olimex [5] (обведены на рисунке жирной рамкой) и внешние по отношению к ним элементы и цепи. Обозначения и нумерация элементов внутри модулей TE-TM4C123 и MOD-RS232 на рисунке соответствуют обозначениям и нумерации на их оригинальных принципиальных схемах. На схеме внутри TE-TM4C123 условно не показаны элементы и цепи, не используемые в данном приложении, а также цепи JTAG-отладчика ICDI. Обозначения и нумерация элементов, внешних по отношению к модулям TE-TM4C123 и MOD-RS232 цепей, самостоятельная и никак не связана с обозначениями и нумерацией элементов модулей.

Входное питающее напряжение поступает на вход первичного стабилизатора DA2 устройства через диодный мост VD1, что позволяет подавать его в любой полярности. Напряжение +5 В с выхода стабилизатора поступает на вход питания модуля Grove-Gesture v1.0, а также через разъём XT71 на вход встроенного стабилизатора +3,3 В модуля TE-TM4C123. Напряжением с выхода этого стабилизатора питаются МК DD3 и ЖКИ HG1. Этим же напряжением, снимаемым с контакта XT70 «+3V3» TE-TM4C123, питается модуль MOD-RS232.

Задание режима устройства осуществляется с помощью перемычки XT1 «Mode», замыкающей на общий провод вход PF1 МК (вывод 41 DD3). При снятой до старта начальной инициализации устройства перемычке оно переходит в режим простого распо­знавания жестов, при установленной – в режим распознавания жестов и электронного замка. Перемычка XT1 установлена параллельно штатной кнопке SW3 модуля, поэтому при её отсутствии для загрузки режима электронного замка достаточно в интервале времени от момента включения питания до момента появления на ЖКИ начальной заставки просто удерживать кнопку нажатой.

Подключённый к модулю TE-TM4C123 через токовый ключ VT1 внешний звуковой электромагнитный излучатель BQ1 «озвучивает» ход начальной инициализации устройства при включении питания, а также реакцию электронного замка на поступление комбинаций жестов. В качестве BQ1 используется «спикер» от материнской платы ПК. Внутреннее сопротивление BQ1 должно быть не менее 15 Ом.

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

Необходимо заметить, что в случае использования устройства в качестве электронного замка все варианты конструкции его корпуса должны преду­сматривать невозможность физического доступа извне к элементам схемы. Прежде всего, от физического доступа должны быть защищены линия выхода замка и шина I2C, поскольку такой доступ открывает путь к программному или аппаратному «взлому» замка. (Кроме того, окно датчика должно быть надёжно защищено от возможных загрязнений и повреждений, иначе замок просто перестанет отпираться. – Прим. ред.)

Встроенная управляющая программа

Встроенная управляющая программа устройства осуществляет задание его режима в зависимости от состояния перемычки XT1 «Mode», запись и чтение регистров датчика PAJ7620U2, обработку прерываний от него по линии INT, вывод на ЖКИ распознанных датчиком жестов в виде прописных латинских букв U, D, L, R, F, B, C, A, генерацию активных уровней на соответствующих выходах, анализ и сравнение поступивших комбинаций жестов с отпирающим кодом электронного замка, хранящимся в EEPROM МК (последнее только в режиме электронного замка), отпирание или неотпирание замка по итогам этого сравнения, вывод соответствующих сообщений на ЖКИ и генерацию соответствующих звуковых сигналов. Жест «волнообразное движение» (W) в перечень распознаваемых устройством жестов решено было не включать, поскольку, на взгляд автора, датчик PAJ7620U2 распознает его нестабильно, часто принимая за другие жесты. Однако соответствующий жесту W выход на схеме модуля имеется.

Программа также осуществляет выдачу через UART МК информации о распознанных датчиком жестах в виде прописных латинских букв U, D, L, R, F, B, C, A, сообщений об отпирании или неотпирании замка (последнее только в режиме электронного замка). Через UART осуществляется и конфигурирование устройства, состоящее в задании и контроле его параметров: отпирающего кода и интервала отпирания электронного замка, пароля доступа в режим администратора.

После включения питания и инициализации процессорного ядра и используемых в данном приложении периферийных узлов МК (аппаратные модули I2C1, UART7, таймер системных сигналов времени SysTick, EEPROM), цветного ЖКИ, программа производит вывод аппаратно подключённого к МК датчика PAJ7620U2 из состояния сна – передаёт по шине I2C адрес ведомого Slave ID = 0×73, для чего используется функция передачи по шине одного байта WR_1_byte_Slave_I2C(). Затем программа отслеживает окончание пробуждения PAJ7620U2, производя циклическое чтение регистра датчика с адресом 0×00 с помощью функции чтения одного регистра PAJ7620_ReadReg(). Если в пределах заданного лимита попыток чтения возвращается результат 0×20, то программа считает PAJ7620U2 пробудившимся и включает его путём записи значения 0×01 в его регистр с адресом 0×72 из банка «1». Для этого используется функция записи одного регистра PAJ7620_WriteReg(). Затем во включённый датчик загружается двумерный массив настроек инициализации для распознавания жестов initRegisterArray1[ ][2]. В ходе пробуждения и инициализации на ЖКИ выводится информация, отражающая старт и завершение указанных процессов («TEST PAJ7620...», «TEST–>OK», «INIT PAJ7620...», «INIT–>OK»), а также прочитанные программой значения регистров с адресом 0×00 («WAKE_UP=0032») и с адресом 0×72 из банка «1» («ENABLE=0001»). Программа полагает PAJ7620U2 исправным и готовым к работе, когда выводит на ЖКИ итоговое сообщение «INIT–>OK». Процесс пробуждения и инициализации длится около трёх секунд и сопровождается звуковыми сигналами высокого тона. Выведенный на ЖКИ набор значений регистров PAJ7620U2 и сообщений, соответствующих исправному датчику и успешному завершению инициализации периферии МК, показан на рисунке 8.

Если в ходе пробуждения при превышении заданного лимита попыток чтения прочитанное из регистра с адресом 0×00 значение не будет равно 0×20, то на ЖКИ выводится сообщение «TEST–>NO OK» и программа переходит к выполнению бесконечного пустого цикла. Использование модуля по назначению в этом случае невозможно.

После успешного завершения начальной инициализации устройство, в зависимости от наличия перемычки XT1 «Mode», автоматически переходит в состояние ожидания поступления жеста в одном из двух возможных режимов: простое распознавание жестов (заставка ЖКИ при загрузке «GESTURE Vx.x») или электронный замок (заставка «GESLOCK Vx.x»). В обоих режимах в центре экрана индицируется приглашение сделать жест – прописная буква G. При распознавании устройством сделанного жеста приглашение на экране немедленно заменяется на соответствующую этому жесту латинскую букву. Одновременно такая же буква однократно передаётся через UART, а соответствующий распознанному жесту цифровой выход МК примерно на 0,5 с переходит в активное (высокое) состояние. В режиме простого распознавания функционал устройства этим исчерпывается.

Дополнительно в режиме электронного замка при распознавании любого жеста в верхней части ЖКИ индицируется признак начавшегося накопления комбинации жестов – строка «Wait». Если в течение двух секунд следующий жест не поступает, строка «Wait» гаснет, а программный счётчик жестов накопленной комбинации обнуляется, то есть процесс накопления сбрасывается. Если до пропадания строки «Wait» поступает следующий жест, счётчик жестов инкрементируется, а индицируемое строкой «Wait» состояние накопления продляется ещё на две секунды. При накоплении таким образом комбинации из заданного количества жестов производится её сравнение со считанным из EEPROM МК отпирающим кодом электронного замка. В случае их совпадения в нижней части ЖКИ в течение некоторого заданного интервала времени (интервала отпирания) индицируется строка «Open», такая же строка однократно передаётся через UART, цифровой выход электронного замка на указанный интервал переходит в активное (высокое) состояние, то есть замок открывается, генерируется звуковой сигнал высокого тона. При несовпадении комбинации в нижней части ЖКИ в течение такого же интервала времени индицируется строка «No Open», такая же строка однократно передаётся через UART, цифровой выход электронного замка остаётся в пассивном (низком) состоянии, генерируется звуковой сигнал низкого тона. И в первом, и во втором случаях по истечении интервала открывания через UART однократно передаётся строка «Closed». В ходе интервала открывания, вне зависимости от того, открывался замок или нет, жесты пользователя устройством не воспри­нимаются.

Если в ходе набора отпирающей комбинации пользователь по показаниям ЖКИ видит, что какой-то его жест распознан устройством неверно или сам случайно делает неверный жест, то ему необходимо просто дождаться пропадания на экране строки «Wait», что указывает на сброс накопления, а затем заново набрать всю комбинацию.

Остановимся на особенностях работы интерфейса конфигурирования устройства с внешнего терминала, подключённого через RS-232. В качестве терминала можно использовать персональный компьютер с запущенной на нём программой эмуляции простого терминала. В качестве терминальных программ были успешно опробованы свободно распространяемые в Интернете программы Terminal v1.9b, CnCTerm v1.20, ModemSE v.2.1, Extem v1.2 и X-CTU v5.1.4.1.

Интерфейс представляет собой упрощённое подобие операционной системы, состоящей всего из нескольких команд. При обмене через RS-232 модуль может находиться в одном из двух возможных режимов: пользовательском (устанавливается по умолчанию после включения питания или сброса МК) и административном. В пользовательском режиме через RS-232 во внешнее устройство передаются символы распознанных жестов и строки изменения состояния выхода электронного замка. В административном режиме помимо этого поддерживается возможность задания отпирающего кода электронного замка, просмотра действующего отпирающего кода, задания пароля для входа в административный режим, а также задания интервала открывания замка. В пользовательском режиме приглашение устройства для ввода команд имеет вид «>», в административном – «#». В административный режим можно перейти из пользовательского, введя соответствующую команду, содержащую пароль. Обратный переход ввода пароля не требует. Все команды имеют следующий формат:

%xxxxYY.......Y,

где % – обязательный признак начала команды, xxxx – поле кода команды (поле фиксированной длины – четыре символа), YY.......Y – поле данных команды (поле переменной длины). Последнее может содержать значение пароля, отпирающего кода или интервала открывания электронного замка. Это поле является значащим только для команд, вводящих или задающих перечисленные параметры. Такие команды в конце трёхсимвольного поля кода содержат четвёртый символ – двоеточие. Команды, содержащие в конце трёхсимвольного поля кода четвёртый символ – знак вопроса, вводятся без поля данных.

Поддерживаются следующие коды команд:

  • adm: – перейти из пользовательского в административный режим (команда поддерживается только в пользовательском режиме);
  • pas: – задать (записать в EEPROM) пароль доступа в административный режим (команда поддерживается только в административном режиме);
  • usc: – задать (записать в EEPROM) отпирающий код электронного замка (команда поддерживается только в административном режиме);
  • usc? – показать (считать из EEPROM) действующий отпирающий код электронного замка (команда поддерживается только в административном режиме);
  • tim: – задать (записать в EEPROM) временно¢й интервал открывания электронного замка (команда поддерживается только в административном режиме);
  • tim? – показать (считать из EEPROM) временнóй интервал открывания электронного замка (команда поддерживается только в административном режиме);
  • ver? – показать номер версии встроенной управляющей программы (команда поддерживается только в административном режиме);
  • exit – вернуться из административного в пользовательский режим (команда поддерживается только в административном режиме).

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

В составе пароля могут быть использованы как цифры, так и строчные и прописные русские и латинские буквы. Другие символы в составе пароля использовать не рекомендуется. Нельзя также использовать в пароле символ признака начала команды «%». Допустимая длина пароля составляет от 2 до 11 символов. В составе отпирающего кода могут быть использованы только прописные латинские буквы U, D, L, R, F, B, C, A. Допустимая длина отпирающего кода также составляет от 2 до 11 символов. Временно¢й интервал открывания электронного замка задаётся одним символом – десятичным числом от 1 до 8, равным требуемой длительности интервала открывания в секундах. При попытке ввести пароль, отпирающий код или интервал с длинами, выходящими за указанные пределы, интерфейс выдаст сообщение об ошибке, а команда воспринята не будет. Сообщение об ошибке также будет выдано в случае попытки ввода отпирающего кода или интервала, содержащих недопустимые символы.

Реакция интерфейса на ввод команд может иметь следующий вид:

  • «OK» – введённая команда корректна и воспринята интерфейсом;
  • «ERR SIZE COMM», «ERR FORM COMM» – введённая команда неправильна или некорректна (имеет неверное содержание или неверную длину) и не воспринята интерфейсом;
  • «ERR PASS», «ERR FORM CODE», «ERR SIZE CODE», «ERR FORM TIME», «ERR SIZE TIME» – введённый в команде пароль, код, интервал неправилен или некорректен и не воспринят интерфейсом.

При переходе в административный режим интерфейс выдаёт сообщение «OK: MODE ADMIN», при возврате обратно в пользовательский – «OK: MODE USER». Заметим, что перед завершением сеанса конфигурирования в целях соблюдения секретности замка необходимо вернуться из административного в пользовательский режим, введя команду %exit.

В случае, например, корректного ввода команды показа (считывания из EEPROM) отпирающего кода интерфейс выдаёт сообщение в формате: «USER CODE: YY.......Y».

При успешном завершении записи в EEPROM, например, отпирающего кода, интерфейс выдаёт сообщение «OK: PROG CODE EEPROM».

Необходимо заметить, что при первом включении устройства в EEPROM МК ещё не содержатся заданные пользователем значения отпирающего кода, пароля доступа и интервала открывания замка. Управляющая программа узнаёт об этом при выполнении команд интерфейса или отпирании замка, читая из EEPROM массивы данных по адресам хранения перечисленных параметров. Одна ячейка в каждом из этих массивов является контрольным маячком. Если по адресу маячка программа считывает значения, отличные от значений констант EEPROM_USER_CODE_ACTIVE, EEPROM_ADM_PASS_ACTIVE, EEPROM_TIME_LOCK_ACTIVE, то далее она начинает использовать в качестве активных значений соответствующих параметров жёстко заданные по умолчанию значения (массивы значений), прописанные в исходном коде: USER_CODE_ARR_DEFAULT[], ADM_PASS_ARR_DEFAULT[] и EEPROM_TIME_LOCK_DEFAULT. Отпирающий код по умолчанию представляет собой последовательность из шести жестов: F, B, F, B, F, B. Пароль доступа по умолчанию – PASSWORD. Значение интервала открывания замка по умолчанию – две секунды. Однако после первой же записи пользователем в EEPROM своего собственного отпирающего кода, пароля доступа или интервала открывания замка содержимое соответствующего маячка автоматически модифицируется значением соответствующей константы. Таким образом, при следующих чтениях из EEPROM программа уже начинает использовать в качестве активных значений не заданные по умолчанию, а считанные из EEPROM величины.

Необходимо заметить, что среди команд интерфейса отсутствует команда показа (считывания из EEPROM) пароля доступа в административный режим – для просмотра он недоступен. В случае его утраты единственный способ входа в административный режим заключается в перепрошивке флэш-памяти МК кодом программы, в исходном тексте которой произвольно изменено значение константы EEPROM_ADM_PASS_ACTIVE (содержится в файле GESLOCK_I2С.h). После такой перепрошивки и до первой записи пароля в EEPROM программа снова заменит утраченное значение пароля заданным по умолчанию значением PASSWORD.

Исходный текст управляющей программы модуля распознавания жестов версии 3.0 (и файл прошивки МК) содержится в каталоге проекта GESLOCK_I2С, архив которого доступен для загрузки с сайта журнала (дополнительные материалы к статье). Проект был подготовлен и отлажен в интегрированной среде разработки IDE µVision4 V4.72 от Keil Software (бесплатная версия с ограниченным размером кода). Программирование и отладка производились с помощью встроенного JTAG-отладчика ICDI.

Литература

  1. www.pixart.com.tw/sensor.asp.
  2. www.seeedstudio.com/wiki/File:PAJ7620U2_Datasheet_V0.8_20140611.pdf.
  3. www.seeedstudio.com/wiki/Grove_-_Gesture_v1.0.
  4. www.terraelectronica.ru/catalog_info.php?CODE=1210657.
  5. www.olimex.com/Products/Modules/Interface/MOD-RS232/open-source-hardware.
Комментарии
Рекомендуем

  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться