В предыдущих статьях цикла рассказывалось о том, как организовать связь через канал Bluetooth между двумя удаленными планшетами. Один из планшетов можно заменить устройством, содержащим МК и Bluetooth-модуль. Передача в МК управляющих команд от планшета предъявляет специфические требования к интерфейсу управления. Базой для этого служит сенсорный экран и датчики ориентации. Про их особенности пойдет речь дальше.
Сенсорный экран и датчики ориентации
Сенсорное управление в бытовой технике известно давно. К примеру, в цветные телевизоры семейства УЛПЦТ моделей 712, 718 были встроены блоки СВП-3, которые имели сенсорные кнопки, реагирующие на прикосновение пальца человека. Подобный принцип управления реализовывался и в некоторых регуляторах яркости для сетевых ламп накаливания 220 В.
Однако эти и другие устройства не получили широкого распространения, ввиду низкой помехоустойчивости, сложности подбора порогов чувствительности и отсутствия тактильной обратной связи.
Следующим этапом стал «шаг назад» — вместо сенсорного стали применять псевдосенсорное управление на основе легко нажимающихся кнопок и гибких пленочных клавиатур. Но затем последовали «два шага вперед» — технология достигла такого уровня, который позволил массово создавать дешевые сенсорные экраны.
С точки зрения теории управления, сенсорный экран можно представить в виде матрицы единичных датчиков. Имеется в виду прямоугольник с Х-датчиками по длине и Y-датчиками по ширине. Итого, каждая точка на экране может быть описана двумя координатами X и Y. Аналогия — игра «морской бой» или шахматная нотация.
Датчики пространственной ориентации, встроенные в планшеты и мобильные телефоны, позволяют к двум координатам X, Y добавить еще и значение условной высоты Z. Итого, управление из плоскости переходит в объем.
Постановка задачи
Предположим, имеется планшет и удаленное устройство, содержащее МК с Bluetooth-модулем. Требуется передать управляющие команды (числа) из планшета в МК для последующего выполнения определенных действий. Числа могут быть одинарные, двойные или тройные в зависимости от заданного закона управления, соответственно, линейного, на плоскости или в трехмерном пространстве.
Команды будут формироваться по принципу джойстика. Владельцы игровых приставок хорошо знакомы с механическими и оптико-механическими джойстиками («joy» — радость, «stick» — палка).
Здесь же будут рассматриваться сенсорные, пространственные и голосовые джойстики, причем в исполнении от 1D до 3D.
Программа в планшете должна перевести движения джойстика в числовую форму. Полученные числа координат передаются на удаленную сторону через канал Bluetooth и используются в МК для реализации поставленных задач — от включения настольной лампы до управления роботом.
1D-джойстики
«1D» расшифровывается, как «одно направление» (1-Dimension). В простейшем случае это линейный ползунок, каждому положению которого соответствует определенное число, монотонно увеличивающееся от значения MIN до значения МАХ.
В андроидных приложениях существует стандартный компонент «слайдер» (Slider). На экране планшета он выглядит длинной полоской с маркером положения. Передвигается маркер пальцем, то есть получается управление как в ползунковом регуляторе громкости или в эквалайзере тембра. Каждое положение слайдера в пространстве характеризуется одним единственным числом.
Аналоговый слайдер легко превратить в дискретный. Например, длинную полоску разбить на множество отдельных сенсоров и разместить их на поверхности слева направо или сверху вниз. Теперь, последовательно прикасаясь к каждому единичному сенсору, можно получить монотонно изменяющийся ряд чисел. Классический пример дискретного слайдера — клавиатура электронного пианино.
Но можно пойти еще дальше и вместо расположения датчиков «в одну шеренгу» выбрать конфигурацию «крестовина» по образцу механического джойстика с 5 кнопками (рис.38): «Вверх—Вниз—Вправо—Влево—Пуск». Каждой кнопке присваивается свое число, например, от 1 до 5. При замыкании контактов это число передается на противоположную сторону в виде команды.
Не суть важно, что физически кнопки размещаются не по прямой линии. Главное, чтобы соблюдался принцип: «Одно положение (команда, состояние, режим) — одно передаваемое число».
К категории 1 D-джойстиков можно также отнести так называемые «голосовые джойстики». Человек говорит в микрофон планшета числительное, программа отправляет интернет-запрос в службу «Google Speech recognizer» и мгновенно получает расшифровку ответа в виде конкретного числа.
В программе «JoystickID» (рис.38, 39) представлены все три модификации 1 D-управления: в верхней части — сенсорные кнопки крестовины, посередине — ползунковый регулятор слайдера (Sliderl, MinValue«6», MaxValue«106»), внизу —голосовой джойстик SpeechRecognizerl.
Искомые числа высвечиваются вверху экрана в титуле приложения: 1 — нажатие кнопки «Вверх», 2 — кнопки «Влево», 3 — «Вправо», 4 — «Вниз», 5 — «Пуск», 6… 106 — движение ползунка слева направо, любое число — голосом.
Полученные числа могут быть отправлены в МК через канал Bluetooth по рассмотренным ранее методикам (РА2-4, 9/2015). Это предлагается сделать самостоятельно, на свой вкус, поскольку знаний уже накоплено достаточно.
1,5D-джойстики
Судя из названия, к таким джойстикам должны относиться устройства, совмещающие в себе свойства 1D- и 20-джойстиков, то есть уметь генерировать линейный ряд одиночных чисел, но использовать пространственную технологию перемещения по плоскости.
В программе «Joystick 1_5D» (рис.40) показан вариант управления при помощи сенсорных жестов. Для нажатия кнопок условного джойстика используются короткие «мазки» пальцем по экрану на расстояние примерно 1…2 см. Здесь можно провести аналогию с пролистыванием фотографий в альбоме планшета.
Отвечает за пролистывание компонент Canvasl, он же «Холст». В его свойствах можно указать путь к файлу фоновой картинки Backgroundlmage с масштабированием Height/Width «Fill parent».
Холст в программе размещается вверху экрана, там где изображается фоновый рисунок в виде кнопки «Пуск». Если коротко махнуть пальцем по холсту сверху вниз, то в титуле приложения высветится слово «Вниз» (может быть любое другое слово или цифра, что задается в программе). Если провести пальцем снизу вверх, то появится слово «Вверх», слева направо — «Вправо», справа налево — «Влево», одиночный удар — «Пуск». Примечательно, что делать указанные действия можно под разными углами, включая диагональ, и в любой части экрана.
2D-джойстики
Управление в двух плоскостях хорошо известно владельцам ноутбуков, имеющих сенсорный тачпад. Пальцем на тачпаде можно нарисовать любую по сложности геометрическую фигуру. Каждой точке рисунка будет соответствовать не одно число, а пара из двух чисел — координата по оси X и координата по оси Y. Чем не сенсорный 20-джойстик с управлением по поверхности?
Задача программиста сводится к оцифровке получающегося рисунка, для чего в среде AI2 имеются готовые компоненты. В частности, «DrawingCanvas. Dragged» автоматически вычисляет координаты текущей и предыдущей точки рисуемой линии, а компонент «DrawingCanvas.Touched» возвращает координаты точки удара по экрану.
В программе «Joystick2D» (рис.41) результат работы высвечивается в верхней строке контейнера отдельно для X и для Y. Нажатие на кнопку «Пуск» имитируется коротким ударом по сенсорному полю (touch-событие), при этом появляются сверхбольшие координаты Х=999 и Y=999.
Цветфона и рисунка компонента «DravingCanvas» специально выбраны одинаковыми, поэтому следов от вождения пальцем по экрану видно не будет. Из замеченных особенностей компонента — оцифровка координат начинается не в точке прикосновения, а через расстояние при мерно 1… 2 см. Дальше .пока палец прижат к экрану, задержек не наблюдается.
3D-джойстики
В реальном мире человек постоянно сталкивается с трехмерными событиями. Каждая точка в объеме характеризуется вычислением трех чисел, отвечающих за положение объекта по осям X, Y, Z.
Сенсорный экран планшета здесь не поможет, нужны датчики ориентации. Наиболее известные из них — гироскоп, акселерометр и цифровой компас. Вереде AI2 поддерживаются первые два из них. Эти датчики иногда путают друг с другом за схожесть.
Акселерометр, он же G-сенсор, — это прибор для измерения ускорения (перегрузки). В планшете применяется трехосевой акселерометр, который вычисляет три вектора силы гравитации: Ах, Ay, Az. С его помощью можно узнать, какая часть корпуса планшета, образно говоря, больше всего «смотрит вниз», к Земле. К примеру, на горизонтальной поверхности в режиме покоя: Ах=Ау=0, Az=9,8g.
Гироскоп, он же гиродатчик, измеряет угловую скорость по азимуту, тангажу и крену. В отличие от акселерометра, он служит не только для определения ориентации устройства в пространстве, но и отслеживает его перемещение. Например, при повороте планшета на какой-либо угол на ровной поверхности акселерометр не изменит своих показаний, а в гироскопе станет другим азимут.
Считается, что гироскоп и акселерометр дополняют друг друга. Теоретически это должно повысить точность вычисления координат. Правда, если обратиться к программе «Joystick3D» (рис.42), то видно, что совместная работа гироскопа и акселерометра немного замедляет скорость смены пока заний на экране. Поэтому придется выбирать меж ду высокой скоростью или высокой точностью.
В программе отображаются 8 строк Label 1…8 с числами на месте комментариев. Три верхние строки относятся к гироскопу, три нижние — к акселерометру. Посередине размещаются строки «Magnitude» (это не магнитный компас!) и «Angle», которые являются производными от показаний гироскопа. Использовать для работы лучше те группы цифр, которые более стабильные во времени.
В глобальных свойствах приложения «Joystick3D» жестко задан портретный (вертикальный) режим ориентации экрана, иначе при повороте планшета на 90 градусов происходит смена изображения, и показания датчиков сбиваются.
Точность составляет 5 знаков после запятой. Но, как говорил Козьма Прутков: «Не верь глазам своим!» — последние цифры непредсказуемо «гуляют» во времени, даже при неподвижном планшете.
Вывод — для получения точного позиционирования нужна математическая обработка результатов.
Автор: Сергей Рюмик, г. Чернигов
Источник: журнал Радиоаматор №10, 2015