Сенсорная кнопка своими руками

Добавил пользователь Владимир З.
Обновлено: 08.09.2024

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

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



где 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 МГц.

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

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

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

Схема сенсорного переключателя

На рисунке 1 представлена схема сенсорного триггера с двумя сенсорами, иными словами сенсорное реле. Рассмотрим работу схемы на примере блока 1 (блок 2 аналогичен блоку 1).

С помощью коаксиального кабеля от телевизионной антенны конденсатор С1 подключают к небольшой токопроводящей площадке F1, с максимальными размерами 60x60 мм.

Длина коаксиального соединения может достигать 1 м. Экран кабеля подключают к общему проводу. Конденсатор С1 пропускает сетевые наводки от тела человека с частотой 50 Гц.

Принципиальная схема сенсорного переключателя с двумя кнопками

Рис. 1. Принципиальная схема сенсорного переключателя с двумя кнопками.

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

Резистор R2 необходим для нейтрализации ложных срабатываний от помех из-за колебания входных токов элемента D1.1. На выходе элемента импульсный сигнал свободно проходит через конденсатор С2 (гальваническую развязку) и уже имеет форму меандра сетевой частоты, который детектируется диодами VD3, VD4 и сглаживается конденсатором C3.

Далее фронт импульса (при касании сенсора) усиливается и дважды инвертируется логическими элементами D1.2, D1.3. С вывод 8 микросхемы К561ЛА7 фронт импульса проходит через диод развязки VD6 и управляет триггером Шмитта на элементе D2.1.

Элемент D2.1 находится в состоянии ожидания за счет делителя напряжения R4R5. Низкий логический уровень, поданный на вход D2.1 через диод VD7 от блока 2, переключит элемент (на его выходе появится и будет удерживаться состояние высокого логического уровня) - транзисторный ключ откроется, включит реле.

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

Диод VD5 препятствует броскам обратного напряжения при коммутации реле, защищая транзистор. Напряжение питания схемы может варьироваться от +5 до +15 В.

При максимальных значениях напряжения питания чувствительность сенсорного устройства уменьшается, поэтому необходимо точнее подобрать значения элементов R1, R2, R3 и конденсаторов С1, С2.

Наилучшие результаты получены при эксплуатации схемы с питающим стабилизированным напряжением в интервале +5. +8 В. Исполнительное реле также следует подбирать исходя из питающего напряжения схемы.

Чувствительный сенсор

На рисунке 2 представлена очень чувствительная сенсорная схема, реагирующая на прикосновение человека к сенсорной пластине Е1 даже через перчатки или одежду.

Схема простого самодельного сенсорного переключателя с высокой чувствительностью на 555

Рис. 2. Схема простого самодельного сенсорного переключателя с высокой чувствительностью на 555.

В схеме предусмотрены регулировки чувствительности (переменный резистор R4) и задержки срабатывания (переменный резистор R1). Популярная микросхема DA1 КР1006ВИ1 включена по стандартной схеме.

После воздействия на сенсор через 2. 10 с (задержка определяется значениями элементов времязадающей цепи R1R2C1) на выводе 3 появляется исходный низкий уровень напряжения.

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

Контакты реле К1 коммутируют цепь маломощной нагрузки. Схему можно использовать универсально - как сигнальное устройство или устройство управления любой маломощной активной нагрузкой.

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

Если все элементы схемы правее точки А (по схеме) исключить, то получится надежный сенсорный узел, где выход DA1 (вывод 3) будет способен управлять любыми электронными устройствами. Размах управляющего напряжения в этом случае составит 2/3 напряжения питания.

Сенсорный модуль на К1564ТЛ2

На рисунке 3 показана схема простого сенсора на микросхеме К1564ТЛ2 с передаточной характеристикой триггеров Шмитта. Касание сенсоров Е1 и Е2 вызывает устойчивое состояние соответственно высокого (лог. 1) и низкого (лог. 0) логического уровня на выходе элемента D1.1 (вывод 2).

Принципиальная схема простого сенсора на микросхеме К1564ТЛ2

Рис. 3. Принципиальная схема простого сенсора на микросхеме К1564ТЛ2.

При замыкании токопроводящим предметом (например, пальцем) сенсора подается лог. 0 на один из входов триггера. При одновременном замыкании обоих сенсоров система остается в первоначальном состоянии.

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

Немного покопался в своих видео и нашел еще одну простую и интересную самоделку на тему электроники.

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

Для самоделки понадобится всего три типа электронных компонентов и разная мелочевка.

1. Резистор на 1К- 1шт.
2. Транзистор 2N2222A- 1шт.
3. Транзистор 2N3055- 2шт.
Ну и немного проводов с кусочком металлической пластины.

Перед написанием статьи и снятием видео, я нарисовал вот такую простенькую схему, которую поймет даже первоклашка.

В первую очередь я приобрел все комплектующие, заказывал из Китая, т.к. у меня ничего из этого не было. Где заказывал, можете посмотреть в видео на Я.Эфире или на YouTube моих каналов OnlyKit.
Далее распечатал схему и для удобства монтажа, он будет навесным, наклеил на картонку.

На схеме, которая в видео, я допустил ошибку и перепутал маркировку полярности входного напряжения, но на схеме выше все исправлено.

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

Сенсорная кнопка “TTP223” выполнена на базе микросхемы “TTP223-BA6” в виде бескорпусной платы на емкостном принципе, и может работать в режиме с фиксацией и без фиксации включения при касании рукой или поднесении руки на небольшое расстояние (до 5 мм).

Датчик касания модуля “TTP223” имеет площадку в виде металлизированной поверхности печатной платы с надписью “touch”, при поднесении или касании его рукой, происходит включение светодиода на плате и на выходе “Q” появляется напряжение. На плате имеются две перемычки для настройки режимов выхода “Q” (перемычка A (AHLB) – настройка 0 или 1 на выходе и перемычка B – вкл./выкл. фиксации переключения)

TP223 Внешний вид
Принципиальная схема сенсорной кнопки “TTP223”
Внешний вид "TTP223" Принципиальная схема сенсорной кнопки “TTP223”

Технические характеристики TTP223

  • Напряжение питания постоянного тока, В: 2 – 5.5
  • Потребляемый ток (в покое, при VCC= 3 В), мкА: 70
  • Максимальное время срабатывания (при VCC= 3 В), мС: 220
  • Габаритный размер платы, мм: 11x15

Регулировка чувствительности емкостной кнопки

Чувствительность модуля “TTP223” зависит от размера сенсора и конденсатора – C3 (на плате не припаян), место под который расположено на плате между выводом 3 микросхемы и общим проводом (GND).

Для настройки чувствительности “TTP223” можно использовать несколько методов:

  1. для ее увеличения надо увеличить размер контактной площадки сенсора, для этого с помощью отверстия на площадке, к ней припаивается короткий провод, который соединяется с новой увеличенной контактной площадкой.
  2. также для увеличения чувствительности можно уменьшить толщину стенки корпуса, за которой будет находиться датчик
  3. еще один способ увеличения чувствительности – не использовать конденсатор C3 (когда его нет чувствительность максимальная, когда установлен C3 = 50 пикофарад – минимальная). С3 можно использовать в диапазоне от 0 до 50 пФ.

Вариант использования сенсорной кнопки

без использования Arduino


Использование сенсорной кнопки TP223 с Arduino

Схема подключения сенсорной кнопки к Arduino

Начнём с простого: при нажатии на кнопку загорается встроенный светодиод.

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

Читайте также: