Многоканальное управление сенсорными кнопками

Еще раз о емкостных сенсорах.

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

Вообще говоря, существует много емкостных методик определения касания. Самый древний подход — определение касания по наводкам от силовой сети, которые всегда присутствуют на теле человека (если он, конечно, не находится в чистом поле). Во вторую группу можно выделить QTouch’еобразные (основанные на перекачивании в накопительный конденсатор заряда с сенсора и последующем измерении его величины) подходы, отличающиеся алгоритмами обработки, формой датчиков, подходом к фильтрации помех, etc. Посмотреть на реализацию такой системы на коленке, а также почитать подробное описание идеи работы такой системы на русском можно тут. В этой же статье нас будет интересовать третий подход, менее продвинутый, но гораздо более простой относительно второго и надежный относительно первого — непосредственное измерение емкости пластины сенсора. В принципе, и об этом уже писал Elm-Chan. Но попробуем повторить то же самое по-русски и не глядя в чужие исходники.

Для опыта я буду использовать свою макетку с установленной ATmega48, так что пример будет под AVR.

Итак, идея состоит в том, что любой объект имеет емкость, а современные микроконтроллеры работают на такой скорости, которая позволяет измерить емкость даже отдельного кусочка фольги размером 1х1 см. — примерно такого размера обычно выбирается сенсор в этом методе, очевидно, по размеру пальца, ибо подобный подход пригоден прежде всего для реализации отдельных сенсорных кнопок. Когда к такой кнопке прикасается человек, ее емкость существенно возрастает, что и регистрирует контроллер, принимая решение о нажатии. Итак, включим все следующим образом:

Ножка микроконтроллера подтягивается к питанию резистором достаточно большого номинала (1 мегаом), и к ней же подключается площадка сенсора. Оценка емкости производится путем измерения времени заряда площадки до напряжения логической единицы — это возможно, поскольку выводы микроконтроллера обладают пороговыми свойствами, т.е., в регистре PIN будет читаться единица начиная с какого-то определенного уровня (около 1В, немного различается для разных кристаллов). Алгоритм опроса такого сенсора выглядит следующим образом:

1. Настроить ножку на выход;
2. Подать на нее логический ноль, чтобы гарантированно разрядить сенсор перед замером;
3. Настроить ножку на вход;
4. Посчитать, за сколько тактов напряжение на ней достигнет единицы.

Все вышесказанное я воплотил в такой код:

SNS_DDR, SNS_PORT и подобные — имена, заданные дефайнами. В функцию передается битовая маска вывода, который нужно опросить, что делает ее универсальной для опроса нескольких кнопок.

Но после опроса нам надо решить, нажата кнопка или нет. Очевидный подход — найти количество тактов цикла, соответствующее порогу нажатия, и сравнивать полученное значение с ним. Но такое решение получится нестабильным, потому что порог будет зависеть от силы нажатия на сенсор (рука эластична, с изменением силы нажатия меняется площадь соприкосновения, а, следовательно, и емкость). Потому лучше ввести гитерезис: выбрать значение, ниже которого сенсор гарантированно свободен, и значение, зарегистрировав число выше которого можно точно сказать, что к площадке прикасаются, после чего делать вывод, сравнивая результат опроса с этими двумя значениями. Возможно, звучит громоздко, но, надеюсь, код внесет ясность:

1. Опрашиваем сенсор;
2. Если значение выше порога касания — регистрируем касание и запоминаем это.
3. Если значение ниже порога свободного сенсора — регистрируем пустой сенсор и запоминаем это.
4. Выдаем запомненное значение.

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

Вышеприведенные участки кода — фрагменты проекта, который я по-быстрому набросал в AVR Studio + WinAVR и который приложен в аттаче.

cool-hacker › Блог › Емкостный сенсор на микроконтроллерах AVR и задержка итерациями. Примеры на Attiny13

Приветствую, любитель микроконтроллеров!

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

Сенсорная кнопка
Принцип сенсорной кнопки прост. Берем небольшую площадку не важно какой формы, я взял кусок фольгированного текстолита (далее — кнопка). Подпаиваем к ней резистор большого номинала, порядка 1 МОм. И подключаем кнопку через этот резистор к питанию. Подпаиваем к кнопке провод, который соединит кнопку с ножкой микроконтроллера (далее — МК). Площадку изолируем тонким изолятором, хотя и без него будет работать. Площадка кнопки имеет определенную емкость, которая увеличивается, когда на ней находится палец человека.

Алгоритм работы следующий:
1. Переводим ногу МК в режим выхода.
2. Подаем низкий уровень, чтобы разрядить емкость кнопки.
3. Переводим ногу МК в режим входа и ждем когда емкость кнопки зарядится через резистор 1 МОм и на входе появится верхний уровень. Ожидание производится в цикле, в котором инкрементируется счетчик.
4. Сенсор зарядился — по значению счетчика можно судить о состоянии сенсора.

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

Теперь для использования нашего алгоритма нам необходимо определить порог срабатывания кнопки. Для этого при инициализации мы выполняем калибровку. И берем в качестве порогового — значение на четверть большее, чем возвращается при свободном сенсоре.

Я проверял, на пустом сенсоре функция у меня возвращает стабильно 15. А когда кладешь на сенсор палец — около 30. Значит порог у нас будет где-то 15 + 15/4 = 18.

Ну а далее, в основном цикле программы нам остается проверять состояние сенсора и сравнивать его с пороговым значением. Если превысило — кнопка нажата, нужно отреагировать.

При необходимости, нужно в блок обработки нажатия добавить задержку, чтобы обработка не срабатывала несколько раз подряд.

Я, в течении нескольких дней, пользовался кнопкой, пока отлаживал прошивку для лампы — сенсор срабатывает четко!

Задержка итерациями основного цикла
Иногда в основном цикле требуется периодически производить какие-то действия с большой задержкой. Скажем 2 секунды. Однако, просто “спать” при этом нельзя, потому что можно проворонить, скажем, нажатие на сенсорную кнопку или другое событие. В этом случае есть простой выход. Берем счетчик, выставляем его в некоторое значение и каждую итерацию основного цикла декрементируем. Как только счетчик стал равен нулю — наша задержка истекла и пришло время для нашего действия. В основном цикле можно добавить минимальную задержку, которая не сделает появление ожидаемого события критическим.

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

Результат
Дабы разбавить сухой текст, я хочу показать результат сегодняшнего урока наглядно. Т.к. я делаю лампу настроения, то я использовал RGB-светодиод. В основном цикле будем менять 7 цветов радуги + розовый по кругу. А при нажатии на сенсорную кнопку будем просто моргать белым цветом. Микроконтроллер будет работать на частоте 9.6 МГц, для этого достаточно от фьюзов по умолчанию убрать делитель на 8 (сделать CKDIV8 = 1). Фьюз байты удобно рассчитывать вот этим калькулятором.

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

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

Смотрим результат на видео

Исходный код, схему, модель в протеусе можете скачать в архиве.

В преддверии Нового года, желаю вам довести все ваши проекты до конца!

Решения Microchip Teсhnology для реализации сенсорного управления на емкостных датчиках

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

Читайте также:  Установка для экспонирования фоторезиста

Строятся такие кнопки, как правило на емкостных сенсорах (рис. 1), принцип действия которых основан на изменении емкости при касании поверхности над токопроводящим покрытием [1].


Рис. 1. Устройство емкостного сенсора

Компания Microchip Technology Inc. предлагает ряд решений для реализации сенсорных элементов управления (кнопки, слайдеры, тачпады) на базе следующих периферийных модулей [2]:

  • один компаратор и таймер;
  • сдвоенный компаратор с RS-триггероми 2 таймера;
  • блок емкостных датчиков(CSM – capacitive sensing module);
  • блок измерения времени заряда(CTMU – charge time measurement unit).

Решение на базе микроконтроллера с одним компаратором и таймером

Если стоит задача внедрения в устройство одной сенсорной кнопки, то Microchip предлагает реализовать ее на одном компараторе с таймером на простейших микроконтроллерах Microchip со встроенным компаратором, например, на 6-выводных PIC10F204/6 (рис. 2) [3]. На интегрированном в микроконтроллер компараторе и внешней RC-цепочке построен генератор. Частота генератора определяется постоянной времени RC-цепочки, образованной резистором и суммарной емкостью сенсора, которая, в свою очередь, определяется емкостью сенсорной кнопки Ср (рис. 1) и емкостью Cf, вносимой при касании сенсора. Касание кнопки можно рассматривать какподключение параллельно еще одной емкости Cf (рис. 2), что ведет к изменению частоты генератора.


Рис. 2. Организация емкостного датчика на базе одного компаратора и таймера

Именно это изменение фиксируется микроконтроллером. Выход компаратора используется в качестве счетного входа таймера Timer 0, приращение таймера производится по перепаду из 0 в 1 на выходе компаратора. Зная емкость Cp и сопротивление резистора, можно вычислить ожидаемое значение таймера TMR0 за фиксированное время. Время измерения выбирается из соображений, чтобы прошло достаточно много циклов для обеспечения требуемой точности, но не произошло переполнение TMR0, из этих же соображений удобно установить делитель частоты TMR0в максимальное значение 1:256. Касание кнопки приводит к снижению частоты генерации и, соответственно, частоты переключения компаратора. Таким образом, считывая по циклу значение TMR0 через заданное фиксированное время и сравнивая его с ранее вычисленным, можно сделать выводо касании кнопки.

Компания Microchip предлагает схему реализации сенсорной кнопки и пример исходного кода модуля на базе дешевых 6-выводных микроконтроллеров PIC10F204/6 с подробным описанием принципа работы [3].

Решение на базе микроконтроллера со сдвоенным компаратором с RS-триггером и двумя таймерами

Для организации до четырех сенсорных кнопок Microchip предлагает решение на сдвоенном компараторе с двумя таймерами, которое реализуется на 8-битных микроконтроллерах семейств PIC16F887/690/616 (рис. 3) [4].


Рис. 3. Организация емкостного датчика на базе сдвоенного компаратора и двух таймеров

В данном примере Timer 0 задает частоту детектирования касания кнопки, а Timer 1 используется для обнаружения касания, аналогично Timer 0 в первом примере. Следует отметить, что PIC-микроконтроллеры имеют мультиплексор на входе сдвоенных компараторов, что позволяет обрабатывать большее количество кнопок. Полную схему для реализации сенсорных кнопок на базе PIC16F887/690/616 с примером исходного кода и подробным описанием принципа работы можно скопировать с сайта www.microchip.com/mtouch [4].

Решение на базе микроконтроллера с блоком емкостных датчиков (CSM)

Ввиду быстро растущего интереса разработчиков к сенсорному управлению, Microchip выпустила микроконтроллеры PIC16F со специальным модулем для создания емкостных датчиков – блоком CSM (рис. 4) [5].


Рис. 4. Организация емкостных датчиков на базе модуля CSM

Что дает применение блока емкостных датчиков (CSM):

  • возможность построения интегрированной схемы детектирования касания сенсорных кнопок, не требующей внешних элементов;
  • интегрированный мультиплексор для подключения до 16 емкостных сенсоров;
  • работу в режиме Sleep для снижения энергопотребления.

Детектирование касания при помощи блока емкостных датчиков CSM сходно с предыдущими методами, но не требует внешних элементов кроме самой кнопки. В качестве счетчика тактов, вырабатываемой генератором частоты, используется Timer 1. В качестве источника запуска и останова счетчика Timer 1 может использоваться Timer 0, Timer 2 или сторожевой таймер WDT. Алгоритм вычисления частоты и детектирования касания кнопки тот же. Возможность использования WDT позволяет определять наличие касания в режиме Sleep. При этом генератор CSM переводится в энергосберегающий режим, а при обнаружении касания кнопки микроконтроллер выходит из режима Sleep и обрабатывает событие нажатия в нормальном режиме. Преимуществом данного метода в сравнении с предыдущими является возможность работы сенсорных кнопок в режиме энергосбережения Sleep, а также отсутствие внешних элементов.

Решение на базе микроконтроллера с блоком измерения времени заряда (CTMU)

В новых 16-битных микроконтроллерах семейств PIC24FJ256GA110 (контроллер общего назначения – 4 UART, 3 SPI, 3 I2C) и PIC24FJ256GB106 (контроллер с USB OTG) добавлен блок измерения времени заряда (CTMU – Charge Time Measurement Unit) (рис. 5) [6].


Рис. 5. Организация емкостных сенсоров на базе модуля CTMU

Анализ состояния емкостного сенсора в CTMU принципиально отличается от ранее описанных методов, так как производится измерение не частоты, а напряжения, до которого зарядилась емкость за фиксированное время (рис. 6).


Рис. 6. Отличие работы CTMU от других методов: а) измерение частоты, б) измерение напряжения

Принцип действия заключается в следующем: разряженная до 0 В суммарная емкость схемы сенсора начинает заряжаться источником тока и заряжается в течение фиксированного времени; далее при помощи АЦП измеряется уровень напряжения, до которого зарядилась емкость CАЦП (рис. 7).


Рис. 7. Временные диаграммы работы модуля CTMU

CTMU отличается значительно большей функциональностью, детектирование сенсорных кнопок – лишь одно из ее возможных применений. Как вариант – микроконтроллер с CTMU может быть использован для управления емкостной тач-панелью дисплея. В совокупности с бесплатной графической QVGA-библиотекой Microchip это позволяет быстро разработать и внедрить в проектируемое устройство наглядный пользовательский интерфейс. Другие применения CTMU:

  • измерение абсолютного и относительногоизменения заряда, причем относительное не требует калибровки (для детектирования касания сенсорной кнопки);
  • измерение временных промежутков (динамический рефлектометр, измерение длины кабеля);
  • высокоскоростной ШИМ;
  • ЦАП;
  • измерение температуры при помощи одного диода.

Преимуществами данного метода являются возможность работы в режиме энергосбережения Sleep, отсутствие внешних элементов и существенно большая скорость реакции на касание кнопок.

Средства разработки и другие варианты применения

Для ознакомления и быстрого освоения работы с емкостными сенсорами на базе микроконтроллеров PIC16 со встроенными компараторами компания Microchip предлагает стартовый набор PICDEM Touch Sense 1 Development Kit (рис. 8) [7].


Рис. 8. Стартовый набор PICDEM Touch Sense 1 Development Kit

  • демонстрационная плата с полной поддержкой сенсорного управления mTouch;
  • графический пользовательский интерфейс для экспериментальных разработок;
  • управление типа “кнопка” и типа “слайдер”.

Для ознакомления и быстрого освоения работы с клавиатурами на основе модуля CTMU Microchip предлагает стартовый набор MPLAB Starter Kit for PIC24F (рис. 9) [8].


Рис. 9. Стартовый набор MPLAB Starter Kit for PIC24F

Его основные особенности:

  • интерактивное меню, выведенное на дисплей при помощи параллельного порта PMP;
  • управление емкостными сенсорами, реализованное при помощи CTMU;
  • отображение времени и даты с использованием модуля часов реального времени RTCC;
  • использование ШИМ и программного переназначения выводов (PPS) для управления RGB светодиодами;
  • встроенный USB host;
  • отображение данных в реальном времени в режиме multitasking (мультизадачность) – АЦП и PMP;
  • захват данных в реальном времени (multitasking – USB).

Компания Microchip Technology Inc. предоставляет ряд готовых схемотехнических решений, алгоритмов и примеров программ для конкретных микроконтроллеров – от базового семейства PIC10 до высокопроизводительных 16-битных PIC24 (таблица) для реализации всевозможных сенсорных кнопок, клавиатур, джойстиков, слайдеров и т. д.

Таблица. Сферы применения микроконтроллеров Microchip для емкостных датчиков

Метод реализацииМикроконтроллерКол-во каналов для кнопок*Особенности МКПрименение
1. один компаратор и таймерPIC10F204/61Простейшие 6-выводные МК, 4 I/O, 4 MHz (1 MIPS), EEPROM 256 bytes, RAM 16/24 bytes, Flash 0.25/0.5 KWords, Timer 1x8bit1-2 сенсорных кнопки
PIC12F с компаратором18 pins, 6 I/O, до20 MHz (5MIPS), 256 bytes EEPROM, 128 bytes RAM, 2 KWords Flash, Timers 2x8bit, 1x16bit, 1 ECCP
Любой PIC с компаратором1 шт./комп.Имеются представители во всех семействах.
2. cдвоенный компаратор с RS-триггером и 2 таймераPIC16F631/ 677/ 685/ 687/ 689/ 690420 pins, 18 I/O, до 20 MHz (5MIPS), 256 bytes EEPROM, 256 SRAM, 4 KWords Flash, Timers 2x8bit, 1x16bit, 10x12bit ADC, 1 ECCP, 1 EUSART, 1 SSPКлавиатура, 4-10 клавиш
PIC16F882/ 883/ 884/ 886/ 887428/40/44 pins, 24/35 I/O, до 20 MHz (5 MIPS), 256 bytes EEPROM, 368 bytes SRAM, 8 KWords Flash, Timers 2x8bit, 1x16bit, 14x10bit ADC, 1 ECCP, 1 EUSART, 1 MSSP
PIC16F610/ 616/ 16HV610/ 616414 pins, 11 I/O, до 20 MHz (5 MIPS), 128 bytes SRAM, 2 KWords Flash, Timers 2x8bit, 1x16bit, 8x10bit ADC
PIC18F13K50/ 14K50320 pins, 15 I/O, до 48 MHz (12 MIPS), 256 bytes EEPROM, 768 bytes SRAM, 8 KWords Flash, Timers 1x8bit, 3x16bit, 11x10bit ADC, 1 ECCP, 1 EUSART, 1 MSSP, USB
3. Блок емкостных датчиков(CSM)PIC16F722/ 3/ 4/ 6/ 7До 1628/40/44 pins, 25/36 I/O, 8/16xCSM, до 20 MHz (5 MIPS), 368 bytes SRAM, 8 KWords Flash, Timers 2x8bit , 1x16bit, 14x8bit ADC, 1 AEUSART, 2 CCP, 1 MSSPКлавиатура, более 15 клавиш
4. Блок измерения времени заряда (CTMU)PIC24FJ128/ 192/ 256GA106/ 08/10До 1664/80/100 pins, 53/69/85 I/O, 31/42/46 PPS pins, до 32 MHz (16 MIPS), 16 Kbytes SRAM, 256 Kbytes Flash, Timers 5x16bit, 9 CCP, 4 UART(+IrDA), 3 SPI/I2C, 16x10bit ADC/CTMU, 3 Comparators, 1 PMP/PSPКлавиатура, более 15 клавиш, в устройствах с высокой производительностью, графическим пользовательским интерфейсом, голосовым оповещением, USB и т.д.
PIC24FJ64/128/192/ 256GB106/08/10До 1664/80/100 pins, 52/68/84 I/O, 29/40/44 PPS pins, до 32 MHz (16 MIPS), 16 Kbytes SRAM, 256 Kbytes Flash, Timers 5x16bit, 9 CCP, 4 UART(+IrDA), 3 SPI/I2C, 16x10bit ADC/CTMU, 3 Comparators, 1 PMP/PSP, USB OTG
Читайте также:  Твердотельное реле своими руками – схема, видео

(*) – непосредственно количество каналов для подключения сенсорных кнопок.

Количество кнопок может быть увеличено за счет внешнего мультиплексора и разделения обработки каждой из них по времени, то есть снижения частоты сканирования. Также для увеличения количества кнопок при том же количестве каналов Microchip предлагает решения, основанные на учете воздействия двух сенсоров одновременно (рис. 10) [9].


Рис. 10. Влияние касания на состояние соседнего емкостного сенсора

К примеру, на рис. 11а на четырех емкостных датчиках (один цвет – один датчик) организовано 10 кнопок. На рис. 11б приведен метод для создания клавиатуры с количеством кнопок AхB, с использованием (A+B) каналов.


Рис. 11. Методы увеличения количества кнопок на канал

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

  • детектирование касания кнопки – только после сканирования состояния всех датчиков;
  • требуется более высокая скорость сканирования;
  • невозможно распознать касание нескольких кнопок одновременно.

Классическая реализация слайдера на емкостных сенсорах в зависимости от требуемой чувствительности требует достаточно много каналов для подключения датчиков. Компания Microchip Technology Inc. предлагает решение с использованием двух каналов (рис. 12), что позволяет выиграть как по количеству каналов, так и в чувствительности.


Рис. 12. Реализация чувствительного слайдера с использованием двух каналов

Для оптимального выбора критерия нажатия кнопки Microchip предоставляет программу mTouch Dainostic Tool (рис. 13) [10].


Рис. 13. Программное обеспечение от mTouch Dainostic Tool

Емкостные сенсоры активно вытесняют классические механические элементы управления. Например, в медицине это позволяет полностью стерилизовать терапевтические приборы, в промышленности – обеспечить надежность и вандалозащищенность, в офисах – создать привлекательный индивидуальный дизайн. Все это обусловливает быстрый рост сегмента емкостных сенсоров. Широкий выбор периферийных модулей, производительности, портов ввода/вывода и различных корпусов микроконтроллеров Microchip, на основе которых можно реализовать сенсорное управление, позволяет подобрать оптимальный для конкретной задачи контроллер. А специализированные модули для реализации сенсорного управления и наличие готовых схем с подробными описаниями и исходными кодами программ предоставляют разработчику дополнительные возможности. Наличие наглядного графического интерфейса для диагностики и отладки систем с сенсорным управлением делает их создание более простым и быстрым, а функционирование – надежным.

На пике развития и повсеместного внедрения систем с сенсорным управлением Microchip Technology Inc. активно завоевывает этот рынок, предлагая целый ряд специализированных решений, охватывая огромный сектор прикладных задач от простейших кнопок до сенсорных дисплеев.

Статья была опубликована в журнале Компоненты и Технологии №9 2008 год

Сенсорное управление

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

Радиолюбительские сенсорные кнопки:

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

Сенсорные кнопки и сенсорное управление можно встретить везде, начиная от микроволновок и заканчивая планшетами, или мобильными телефонами.

Сенсорное управление:

Емкостное – этот способ основан не том что контактное устройство срабатывает за счет касания металлической пластины (сенсора) при чём такую пластину-сенсор можно спрятать за тонким декоративным покрытием. Так как нам известно, что человеческое тело, обладает определенную (довольно большую) емкостью.

Рисунок №1 – Ёмкостной сенсор – общая схема

Резистивное – состоящее из двух металлических пластин (выступающих в роле сенсора). Так как, кожный покров человека имеет некоторое сопротивление (конкретно можно посмотреть в справочнике по медицине), срабатывание исполнительной части происходит вследствие замыкания пальцем, обоих пластин.

Пример схемы с сенсорной кнопкой:

Для включения различного рода устройств или механизмов можно использовать сенсорный датчик, схема которого приведена ниже.

Рисунок №3 – Схема с сенсорным датчиком вместо кнопки

Описание работы схемы:

Когда ваша схема находится режиме ожидания, ваш датчик Е1 (металлическая пластинка размером 10х14 мм) потребляет очень слабый ток, около 0,2 мА. Прикосновение пальцем к сенсору Е1 придаёт ему некоторое слабое переменное напряжение, (наведенное телом человека). Это напряжение попадает на базу транзистора VT1, после чего выпрямляется и усиливается им же.

При этом на резисторе R2 возникает постоянное напряжение которое в свою очередь открывает транзисторы VT2 и VT3, благодаря чему срабатывает электромагнитное реле К1, и тем самым включает остальную часть схемы (то чем вы собрались управлять, на пример двигатель).

Питать схему необходимо от очень стабильного источника питания 12 В. Статический коэффициент передачи тока у всех транзисторов должен лежать в пределах 80… 100.

В качестве электромагнитного реле можно использовать РЭС10 или РЭС9 (или другое реле, но тогда надо отстраивать схему под ваши реле). Все резисторы в схеме взяты типа MJIT-0,125. Главное учтите, что размещая сенсор на большом расстоянии от схемы (сантиметров 20 на пример), необходимо экранировать провод, и соединять его оплётку (экран) с минусом источника питания.

Это далеко не всё что можно рассказать о сенсорных кнопках так что,почаще заходите на https://bip-mip.com/ и вы узнаете ещё много нового и интересного.

  1. Простое устройство защиты от короткого замыкания схемаНачинающие радиолюбители часто делают ошибки при проектировании новых устройств, это.
  2. Двухпозиционное реле РЭС9 00 01РЭС 9 001 – Это обыкновенное двухпозиционное реле срабатывающее при.
  3. Генератор импульсов на таймере 555 схемаВ радиолюбительской практике часто применяются различного рода генераторы. В этой.
  4. Ножная педаль из дверного звонкаНожная педаль – применяется там, где необходимо оперативное управление без.
  5. Усилитель с общим истокомВ этой статье речь пойдёт об одном из трёх вариантов.

Введение

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

Принцип работы сенсорной кнопки

По сути, сенсорная кнопка – это сенсор, то есть какая-то проводящая поверхность, и контроллер, измеряющий его емкость (способность накапливать электрический заряд). При неизменных условиях внешней среды емкость сенсора не меняется. Но когда к нему подносится палец, его емкость увеличивается. По этому изменению контроллер “делает вывод”, что пользователь нажал на кнопку.
Емкость измеряется путем подсчета времени, которое требуется для ее заряда до определенного уровня напряжения. Это время зависит как от значения емкости, так и от величины зарядного тока, которая задается какой-то внешней цепью. В простейшем случае эту роль может выполнять резистор, подключенный одним концом к источнику питания, а другим к сенсору.

где Cs – емкость сенсора, Cf – емкости вносимые прикосновением пальца.

Поскольку емкость сенсора и ее изменения очень маленькие (единицы, десятки пикофарад), то время заряда тоже будет небольшим. Чтобы упростить измерение времени заряда, нужно увеличить его значение, а для этого необходимо заряжать емкость сенсора очень маленьким током (микроамперами).

Читайте также:  Плата для аниматроники: схемы, печатные платы

Конфигурация сенсорной кнопки

От конфигурации (от его формы и размера) сенсора зависит его емкость. У меня в проекте использовался сенсор в виде вытравленной круглой контактной площадки диаметром 1 см. Также я пробовал использовать прямоугольные кусочки фольгированного текстолита разного размера. Чем больше площадь сенсора, тем больше его емкость и тем более чувствительную сенсорную кнопку можно сделать.
Чувствительную в том плане, что она будет в состоянии срабатывать через толстый слой диэлектрика. Вообще на эту тему лучше почитать атмеловские материалы, поскольку сейчас я об этом мало что могу сказать.

Схема

Схема, которую использовал я, представлена на рисунке выше.
Сенсор через резистор подключен к выводу микроконтроллера, который подтянут высокоомным резистором к плюсу питания. Первый резистор служит простейшей защитой от электростатики (ESD), а второй ограничивает зарядный ток.
В начальный момент вывод микроконтроллера работает в режиме выхода и на нем установлен уровень логического нуля. Емкость сенсора, если она имеет какой-то заряд, быстро разряжается на внутренние цепи микроконтроллера. Когда она разрядится вывод микроконтроллера переключится в режим входа с отключенным подтягивающим резистором и емкость сенсора начинает заряжаться через внешний высокоомный резистор. В это время программа опрашивает состояние вывода микроконтроллера и подсчитывает количество циклов опроса. Когда емкость зарядится до напряжения логической единицы, микроконтроллер зафиксирует это и сравнит состояние счетчика с каким-то пороговым значением. По результату этого сравнения микроконтроллер определяет поднесен ли к сенсору палец или нет.

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

Чтобы добавить его в свой проект, нужно переписать заголовочный и сишный файл драйвера (sensor.c и sensor.h) в папку проекта, добавить сишный файл sensor.c к проекту внутри среды разработки и включить заголовочный файл драйвера sensor.h (с помощью директивы include) в свой файл, где будут использоваться функции драйвера.

Разберем как им пользоваться. Для хранения настроек сенсора используется структура данных sensor_t. В настройки сенсорной кнопки входит адрес порта, номер вывода в порте, пороговое значение и текущее состояние. Чтобы добавить к проекту сенсорную кнопку, нужно для начала создать переменную типа sensor_t.

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

Опрос одной сенсорной кнопки выполняет функция SENS_Poll(. ), которой нужно передать адрес переменной типа sensor_t. Эта функция возвращает состояние сенсорной кнопки. Для всех возможных состояний сенсорной кнопки объявлен специальный тип данных sensor_state_t. Но функция опроса возвращает только два состояния SENS_PRESSED и SENS_NOT_PRESSED. Остальные состояния сделаны на будущее.

Функция SENS_Poll(. ) выполняет один цикл разряда- заряда сенсора.

Для достоверного определения состояния сенсора, эту функцию лучше вызывать несколько раз. Так же как делается при опросе механических кнопок. Работу функции нежелательно прерывать прерываниями, иначе подсчет времени заряда будет некорректным. Частоту вызова функции опроса можно сделать такой же, как при работе с механическими кнопками. Функция не оптимальная, из-за того, что доступ к порту осуществляется через указатель. Но это позволяет упростить процедуру настройки сенсора, используя только адрес регистра PORTX, а адреса регистров DDRX и PINX вычисляются из него.
И последняя функция драйвера – это SENS_GetState(. ). Она просто возвращает текущее значение сенсорной кнопки.

Код самого тестового проекта очень простой. Инициализация выхода для светодиода, инициализация сенсорной кнопки и бесконечный опрос кнопки в цикле while(1). Никаких прерываний не используется. Частота работы микроконтроллера 9.6 МГц.

Простая сенсорная кнопка

Транзисторы любые NPN структуры: КТ315, КТ3102 или BC547 или любой другой. Резисторы 0,125-0,25 Ватт. Светодиод любого цвета, но лучше красный, так как падение напряжение падение у него минимальное. Питание 5 вольт, больше меньше можно и меньше тоже.

Все компоненты были компактно соединены между собой на миниатюрной печатной плате, которую можно сделать просто вырезав лишнюю медь резаком оставив таким способом остроугольные многоугольники. Детали, использованные для поверхностного монтажа, транзисторы в sot-26 npn, резисторы 0805, перемычки – кусочки провода, вместо них, если есть берите крупный 2512 резисторы с нулевым (условно) сопротивлением. Сенсорное устройство работает сразу, без настройки.

Объяснение работы схемы

Дотрагиваясь до базы транзистора Q3 вы наводками открываете его, вследствие чего через его КЭ и резистор 1 Мом течет ток, который открывает следующий полупроводник Q2, тот открываясь открывает Q3, который уже управляет светодиодом, открываясь через его КЭ течет ток, от минуса идет к катоду светодиода, а к аноду он уже подключен. Резистор 220 Ом здесь “токоограничительный”, на нём падает лишнее напряжение, что защищает диод от деградирования кристалла и полного выхода из строя LED1

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

Также организовать включение/отключение нагрузки можно с помощью оптопары, если отсутствует реле, тогда также будет гальваническая развязка. Эта прекрасная вещь состоит из светодиода и фототранзистора, когда первый светит, то это открывает транзистор и через его КЭ может течь ток. Включаем нужные выводы оптрона в схему сенсора вместо светодиода LED1, а остальные два в разрыв источника питания и любой нагрузки. Эту деталь можно изъять из зарядок от телефона. Возьмите, к примеру, PC-17L1.

Чуть ниже вы видите дополнение к основной схеме, где показано как нужно подключать оптопару к схеме сенсора, также добавлен один транзистор, это нужно для того чтобы вы могли подключать весомую нагрузку, а не просто светодиоды на 20 mA.

Еще вместо реле и оптопары возможно применение двух npn транзисторов. Я так и сделал, схему вы видите. Работает это так: Q5 всегда должен быть открыт, через резистор 10 кОм, но через КЭ открытого Q4 на базу Q5 поступает “минус” и из-за этого он закрыт. Когда же вы касаетесь сенсора – то минус поступает через открытый Q1 на базу Q4 и закрывает его, теперь уж ничто не мешает Q5 оставаться открытым – нагрузка работает, а в моем случае мощный 1 Ватт светодиод ярко светит.

Так это выглядит в собранном состоянии.

Сенсор не имеет фиксации, дотронулись – светит, отпустили – не светит. Коль желаете сделать фиксацию – просто добавьте в схему триггер, например, на микросхеме КМ555ТМ2 или любой другой (можно даже на таймере 555 реализовать это). С добавление триггерной системы при касании к сенсору нагрузка будет включена до тех пор, пока не произойдет следующее касание или исчезнет питание схемы.

На практике это можно применить для быстрого включения и отключения освещения в комнате. Очень удобно, коснулся небольшого чувствительного участка, и комната освещена, второе касание отключит свет. Небольшое количество энергии будет теряться, но этим можно пренебречь.

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

Как уже говорилось – открытие Q3 происходит за счет наводок, видеть это можно на видео, светодиод светит не постоянно, а подмигивает с большой частотой, но это хорошо заметно при съёмки.

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

Эта схема очень проста и предназначена лишь для понимания принципа работы электронных компонентов, применять в серьезных конструкциях не рекомендуется.


Ссылка на основную публикацию