Сенсорные клавиши, тачпады, тачскрины и прочие сенсорные устройства прочно и необратимо входят в нашу жизнь. От них никуда не деться, вот и мы пробуем соорудить что то из этой области.
Но, перед тем как мы начнем сооружать наш сенсорный девайс, хотелось бы узнать как Вы относитесь к сенсорным устройствам вообще? Честно говоря, у меня отношение к сенсорным клавишам довольно неоднозначное. Давайте вместе оценим, сильные и слабые стороны.
Плохое:
Итак, первым из плохого сразу стоит отметить отсутствие факта «проседания» при нажатии на кнопку. Долгими годами, общаясь с электронными устройствами, мы привыкли тактильно ощущать факт нажатия кнопки и чем более отчетлив факт нажатия (плоть до слышимого щелчка), тем боле приятно нам работать с клавишами. В сенсорной кнопке нужно себя приучить, что факт нажатия мы осознаем для себя косвенно, через реакцию устройства (озвучивание нажатия сенсора или по эффекту, оказанному нажатием сенсора). Это непривычно и поначалу довольно неудобно – приходится себя приучать.
Второй недостаток, вытекает из первого. Так как для «нажатия» сенсора нет необходимости прикладывать физическое усилие, то случайные прикосновения к сенсорным клавишам будут вызывать ненужные срабатывания. Есть способы борьбы с этим, но по факту это необходимо учитывать при разработке устройств – продумывать блокировку или ограничение контакта с сенсорами.
Большим недостатком является необходимость применения электронного устройства (драйвера) без которого сенсорные клавиши будут просто куском печатной платы. Это, конечно, усложняет и делает дороже устройство.
Хорошее:
О плохом поговорили, давайте теперь хвалить сенсорные устройства.
Самое главное, что сенсорные устройства – это вечные устройства (если не принимать во внимание электронику). Что может статься с куском фольгированного текстолита? Нет механических движений — нет износа!
Простота и дешевизна конструкции позволяет такие устройства широко использовать в «домашних» условиях.
Так как сенсоры, по сути, являются всего лишь вытравленными площадками на фольгированном текстолите, они могут быть любой конфигурации (на сколько позволит фантазия и конструкция устройства). Устройство сенсоров позволяет придать им любой внешний вид, что может подчеркнуть/выделить функциональность устройства.
Если учесть все отрицательные стороны, то сенсоры могут стать очень полезным устройством для Ваших электронных проектов. Значит, решено – будем их использовать!
Начнем, пожалуй, с классики — стандартного кейпада на 12 клавиш (как на телефоне). Раньше я уже делал драйвер для механического кейпада – будет с чем сравнить. Сенсорный кейпад (как, впрочем, и остальные сенсорные устройства) состоит из двух частей: драйвера и сенсорной панели.
1 «TOUCH ME» ДРАЙВЕР
— электронное устройство, которое будет «чувствовать» наши сенсорные площадки и реагировать на «нажатые» клавиши. В нашем случае это устройство работает по принципу замера паразитной емкости площадки сенсора. Как сделать драйвер сенсорных устройств, «Touch Me driver», я описал немного раньше. Конструкция драйвера проста и универсальна, ее можно применять для различных сенсорных устройств, будет меняться только прошивка. Под каждое сенсорное устройство я буду выкладывать свою прошивку. Считаю, что драйвер Вы уже собрали. Если кто не помнит — он выглядит вот так:
Теперь прошиваем его прошивкой для управления сенсорным кейпадом.
В процессе обкатки устройства появились новые идеи (и баги). Вышла вторая версия прошивки — добавлено несколько новых плюшек (смотрим ниже). Первую версию все еще можно скачать в конце статьи.
061-T2313-keypad-sense-.zip (5267 Загрузок)
Микроконтроллер работает от внутреннего задающего генератора 8МГц.
061-fuse-keypad-sense.png (4344 Загрузки)
Фьюз байты: Lock Bits = 0x 3F; High Fuse = 0x DF; Low Fuse = 0x E4; Ext. Fuse = 0x FF
1.1 Работа драйвера.
В работе программы реализовано:
— общение с «внешним миром» по интерфейсу UART (возможно будут версии и с другими интерфейсами – позже решим);
— автоповтор нажатой клавиши;
— Shift-режим (при удержании нажатой клавиши «*» включается Shift-режим. В Shift-режиме при нажатии на клавиши выдаются по UART не цифры (0, 1, 2,…9), а буквы (A, B, C, …J);
— озвучивание нажатой клавиши;
— индикация нажатой клавиши и включения Shift-режима;
— подсветка клавиатуры;
— возможность управления драйвером по UART;
— возможность сохранения и восстановления настроек сенсорных каналов в EEPROM.
1.2 Возможные варианты работы драйвера и управления им:
Во второй версии прошивки добавлена возможность определения нерабочих каналов.
При старте устройства, в процессе автоматической настройки, по UART передаются результаты тестов сенсорных каналов. Это должно помочь определить проблемы с работой устройства. Формат посылки следующий:
_xxxxxxxxxxxx_
, где х состояние каждого сенсорного канала и может принимать одно из трех значений:
N — все нормально, канал нормально работает;
O — переполнение. Канал не может зарядиться до единицы за заданное время. Причины могут быть следующими: канал «прижимается» к «земле» или утечками на плате или неисправными внутренними цепями порта микроконтроллера; еще может быть слишком большая паразитная емкость канала — длинные соединительные провода, большая контактная площадка;
S — канал мгновенно заряжается до единицы. Такое может быть если запускается «голый», без сенсорной панели, драйвер. Канал «прижимается» к +питанию или утечками на плате или неисправными внутренними цепями порта микроконтроллера.
— При нормальном старте устройства по UART пройдет строка:
_NNNNNNNNNNNN_
и последует два коротких звуковых сигнала.
— При старте с ошибками в строке сообщения выдадутся ошибки в сенсорных каналах и будут непрерывно следовать звуковые сигналы.
— При восстановлении значений чувствительности сенсорных каналов из EEPROM, по UART передается строка:_EE_ и нет никаких сигналов.
Прием по UART:
0 — отключение подсветки;
1, 2, 3, 4, 5, 6, 7, 8, 9 — регулировка яркости подсветки;
Н — включение Shift-режима;
L — выключение Shift-режима;
S — сохранение настроек чувствительности каналов в EEPROM (при старте устройства не будет производится автоматическая настройка — значения восстановятся из EEPROM) (v2.0.);
R — возврат автоматической настройки каналов при старте (отмена S-команды) (v2.0).
Драйвер, в данной реализации, общается с внешним миром по UART, но в последующем я планирую сделать вариант, где нажатиями кнопок можно будет «дрыгать» различными ножками микроконтроллера (подключив реле или симистор можно будет управлять мощной нагрузкой – освещение, моторы и т.д.)
1.3 Настройка работы, защита от ошибок и помех (переступаем через грабли).
В программе реализовано сразу несколько защитных алгоритмов препятствующих ложному или ошибочному срабатыванию сенсоров.
— Так как порта «сенсорных» каналов находятся в высокоимпедансном состоянии, и фактически являются антеннами, на которые «ловится» весь окружающих электрический шум, то замеры емкости, в некоторой степени, «плавают». Для получения достоверных значений емкости программа делает усреднение 32 замеров.
— «Сенсорные» контактные площадки срабатывают без «нажатия» — достаточно прикосновения. Возможна ситуация когда к панели клавиш случайно прикоснулись ладонью или при нажатии коснулись сразу двух клавиш. Программа «видит» сразу все «нажатия» сенсоров и в случае, когда нажато более одной кнопки, не выполняет ни каких действий.
— В программе реализовано устранение «дребезга контактов». Странно звучит для бесконтактных клавиш, но у «сенсоров» есть определенный порог (расстояние от пальца до контактной площадки) нестабильности при котором «клавиша» может неустойчиво определятся как «нажатая». Хотя у порта микроконтроллера входные буферы всех выводов построены по схеме триггера Шмита, что, в некоторой степени, является защитой от дребезга, дополнительная программная защита не помешает.
— Драйвер будет корректно работать с различными вариантами разводки контактных (сенсорных) площадок, шлейфов, внешних условий и условий эксплуатации. Это возможно благодаря тому, что при запуске драйвер автоматически настраивает чувствительность каждого сенсорного канала индивидуально.
— Благодаря автоподстройке драйвера к условиям работы, схема не нуждается в какой либо настройке после сборки и не критична к применяемым в схеме радиоэлементам.
2 СЕНСОРНАЯ ПАНЕЛЬ КЕЙПАДА
— очень проста конструктивно. Это всего лишь печатная плата.
061-sense-keypad-plate.zip (6714 Загрузок)
Для платы можно использовать любой текстолит, материал не имеет значения.
2.1 После того, как вытравили плату припаиваем к ней шлейф для связи с драйвером. В данном случае я поставил разъем, но если драйвер не планируется использовать для других устройств – можно паять напрямую, без разъема.
2.2 Сенсорная плата готова, нужно нанести на нее диэлектрическое покрытие.
Вот тут начинается самое интересное и креативное. Для покрытия можно применить различные способы и материалы: лаки, пленки, скотч, … — ваша фантазия поможет.
Я предлагаю следующий вариант «облицовки» сенсорной панели.
Для начала рисуем наши клавиши. Это можно сделать в любой программе в которой вы умеете рисовать, одно условие – размеры рисунка должны совпадать с сенсорной панелью. Далее рисунок распечатываем. Печатать можно как на струйных, так и на лазерных принтерах – разницы нет. Распечатанный рисунок нужно приклеить к сенсорной панели. Тут соображайте сами как это сделать – вариантов множество.
Я, для упрощения процесса, печатаю клавиатуру на специальной самоклеющейся бумаге, на лазерном принтере. Делаю я это в копировальном центре, так как ни такой бумаги, ни цветного лазерного принтера у меня нет. Далее я просто снимаю защитную пленку и приклеиваю «клавиши» к сенсорной панели.
Если у кого нет возможности распечатать клавиатуру, не отчаивайтесь – ее можно просто нарисовать на листке бумаги маркером или ручкой. Это, конечно, будет не так гламурно, но на функциональности, никак не скажется.
Рисунок на плату наклеен, нужно его защитить от загрязнений. Если этого не сделать, то обычная бумага от прикосновений пальцами быстро затирается и загрязняется, превращаясь в непрезентабельное серое пятно. Тут все просто – сверху бумаги клеем прозрачную пленку. В самом простом случае это может быть широкий скотч, или прозрачная самоклеющаяся пленка. Я использую прозрачную самоклеющуюся пленку с матовой поверхностью – это дает наилучшие результаты, так как матовая поверхность более приятна.
Если использовать тонкий фольгированный текстолит и есть возможность заламинировать плату в пластик (как это предложил elektromonstr) получиться вообще не убиваемая клавиатура!
Если кому лениво рисовать самому клавиши – я тут набросал несколько вариантов рисунков кейпадов — просто выберите более подходящий.
Рисунки сделаны в Ворде, поэтому никому не составит труда их подкорректировать под свои нужды.
061-sense-keypad-desine.doc (4009 Загрузок)
3. СОВМЕСТНАЯ РАБОТА
Устройство в сборе выглядит следующим образом:
Готовую сенсорную панель можно клеить к любой поверхности, будь то пластик, дерево или металл. Самое простое — это приклеить ее на двусторонний скотч, но и другие способы возможны.
3.1 Особенности конструкции сенсорной панели.
Правильным решением будет изготовить всю лицевую панель Вашего устройства из цельного куска текстолита вытравив в нужных местах сенсорные площадки. Устройство будет выглядеть просто отлично!
Замечательным свойством сенсорной панели является то, что дизайн кнопок ни чем не ограничен и зависит только от Вашей фантазии. Посмотрите, как преобразится наш прибор если немного пофантазировать:
А если пофантазировать еще чуть-чуть – получим оригинальный, не на что не похожий прибор:
Драйвер собран, собрана сенсорная панель.
Осталось только посмотреть как это все работает вместе:
http://www.youtube.com/watch?v=ynS1z5Rf6Xc
Для проверки работы сенсорной панели через COM порт (или преобразователь USB to UART) подойдет обычная программа терминала.
Для упрощения процесса проверки я набросал небольшую программку. Она очень проста и предназначена специально для проверки этого кейпада.
TouchMe-Tester.exe (3802 Загрузки)
Выводы.
Сенсорная панель вышла простой и доступной. Благодаря автоподстройке сенсорных каналов драйвера нет ограничения в конфигурации сенсорных площадок, что позволяет гибко использовать драйвер для различных нужд. По UART выдаются однобайтовые (односимвольные) сообщения, на приемной стороне нет необходимости в создании буфера (принялся символ — вызвалось прерывание — прямо в прерывании выполнилось нужное действие или установился флаг). Есть возможность подстройки панели «на лету» по UART.
РАБОТА НАД ОШИБКАМИ.
Данное устройство совсем новое и мною толком не тестировалась, а значит будут вылазить какие-то баги (некоторые узкие места я уже вижу). Так как данный принцип и плата Touch Me driver`a будут дальше использоваться во многих устройствах хотелось-бы максимально обкатать плату и прошивку сейчас, чтобы потом было меньше ошибок. Поэтому буду благодарен за любые (особенно критические) замечания и предложения по конструкции и работе устройства. Если все получилось — тоже пишите, не стесняйтесь. Вместе оно у нас заработает как надо! 🙂
Ссылки:
Как сделать драйвер «Touch Me driver»