Емкостный датчик прикосновения. Емкостной сенсорный датчик своими руками. Используемые образцовые приборы и дополнительное оборудование

Емкостный датчик прикосновения. Емкостной сенсорный датчик своими руками. Используемые образцовые приборы и дополнительное оборудование

Наверное уже никому в наше время не нужно объяснять, что такое тачпад? Этим удобным манипулятором снабжены все современные ноутбуки. Вместо джойстика или мышки, для перемещения курсора и кликов мы используем тачпад, или, по-научному, сенсорную панель.

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

Для решения этой задачи нам понадобится соединить вместе контроллер Ардуино Уно, зуммер, и, собственно, сам датчик. В качестве последнего будем использовать небольшую платку на базе сенсорного чипа TTP223. Для питания устройства годится напряжение в диапазоне от 2 до 5.5 Вольт.

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

1. Подключение

Использованный нами в уроке ёмкостный датчик имеет три контакта:

  • VCC — питание +5В;
  • GND — земля;
  • OUT — сигнал.

Как и все прочие цифровые датчики, линию OUT мы подключаем к любому свободному цифровому входу Ардуино Уно. Традиционно, используем для работы с датчиком вход №2. Получившаяся схема будет иметь вид:

Внешний вид макета

2. Программа

Теперь попробуем оживить всё это. Все что нам потребуется — это считывать состояние вывода №2 на каждом такте программы, и в зависимости от полученного значения, включать или выключать зуммер. Вот что у нас получается:

Int capPin = 2; int buzzPin = 11; void setup() { pinMode(capPin, INPUT); pinMode(buzzPin, OUTPUT); } void loop() { if(digitalRead(capPin)) digitalWrite(buzzPin, HIGH); else digitalWrite(buzzPin, LOW); }

Наконец, записываем программу на Ардуино Уно, и смотрим что получилось!

О том, как прикрутить к микроконтроллеру ёмкостный сенсор прикосновения. Эта идея показалась мне довольно перспективной, некоторым приборам сенсорные клавиши подошли бы куда лучше механических. В этой статье я расскажу о своей реализации этой полезной технологии на основе отладочной платы STM32 Discovery.

Итак, только начав осваивать STM32, я решил в качестве упражнения добавить устройству способность определять прикосновения. Начав разбираться с теорией и практикой по вышеупомянутой статье, я повторил схему товарища "a. Она работала идеально, но мне, любителю минимализма, захотелось её упростить, избавившись от лишних элементов. Лишними на мой взгляд оказались внешний резистор и дорожка к питанию. Всё это уже есть в большинстве микроконтроллеров, в том числе в AVR и в STM32. Я имею в виду подтягивающие резисторы портов ввода/вывода. Почему бы не заряжать пластинку и наши пальцы через них? В ожидании подвоха я собрал на макетке схему, которая, к моему удивлению, заработала с первого же раза. Собственно говоря, схемой это называть даже смешно, ведь всё что нам нужно - это просто подсоединить контактную пластинку к ножке отладочной платы. Всю работу на себя возьмёт микроконтроллер.

Что же из себя представляет программа? Во первых две функции:
Первая выводит на ножку сенсора (нулевой пин регистра C) логический «0»

Void Sensor_Ground (void) { GPIOC->CRL = 0x1; GPIOC->BRR |= 0x1; }

Вторая настраивает тот же вывод на вход, с подтяжкой к питанию.

Void Sensor_InPullUp (void) { GPIOC->CRL = 0x8; GPIOC->BSRR |= 0x1; }

Теперь в начале цикла опроса вызовем Sensor_Ground(), и подождём некоторое время чтобы разрядить на землю весь остаточный заряд на сенсоре. Затем обнулим переменную count, которой будем считать время зарядки сенсора и вызовем Sensor_InPullUp().

Sensor_Ground(); Delay(0xFF); //простой пустой счётчик count = 0; Sensor_InPullUp();

Теперь сенсор начинает заряжаться через внутренний подтягивающий резистор номиналом порядка десятков КОм (30..50КОм у STM32). Постоянная времени такой цепи будет равняться считанным тактам, поэтому я поменял кварцевый резонатор на отладочной плате на более быстрый, 20МГц (кстати, я не сразу заметил, что оказывается на STM32 Discovery кварц меняется без пайки). Итак считаем такты процессора, пока на входе не появится логическая единица:

While(!(GPIOC->IDR & 0x1)) { count++; }

После выхода из этого цикла в переменной count будет храниться число, пропорциональное ёмкости сенсорной пластинки. В моём случае с чипом на 20МГц значение count равняется 1 при отсутствии нажатия, 7-10 при самом лёгком касании, 15-20 при нормальном прикосновении. Остаётся лишь сравнить её с пороговым значением и не забыть снова вызвать Sensor_Ground(), чтобы к следующему циклу опроса сенсор уже был разряжен.
Полученной чувствительности хватает для уверенного определения прикосновений к голым металлическим площадкам. При прикрытии сенсора листом бумаги или пластика чувствительность падает в три - четыре раза, хорошо определяются только уверенные нажатия. Чтобы увеличить чувствительность в случае, когда сенсор необходимо прикрыть защитным материалом, можно повысить тактовую частоту микроконтроллера. С чипом серии STM32F103, способном работать на частотах до 72МГц, помехой не будут и миллиметровые преграды между пальцем и сенсором.
По сравнению с реализацией "a, мой подход работает гораздо быстрее (порядка десятка тактов на опрос одного сенсора), поэтому я не стал усложнять программу, настраивая прерывания по таймеру.

Напоследок видео с демонстрацией работы сенсора.

Main.c тестовой программы.

На микроконтроллер

Cпасибо пользователю за очень полезную статью ARM-микроконтроллеры STM32F. Быстрый старт c STM32-Discovery , пользователю за идею и доходчивое теоретическое описание.

UPD. После комментариев "a я решил разобраться с тактированием и обнаружил, что по умолчанию STM32 Discovery настроен на тактовую частоту
(HSE / 2) * 6 = 24 MHz, где HSE - частота внешнего кварца. Соответственно поменяв кварц с 8 на 20 МГц, я заставил бедную STM"ку работать на 60 МГц. Так что во-первых, некоторые из выводов очевидно не совсем верны, во-вторых то чем я занимался может привести к сбоям чипа. На случай таких сбоев в микроконтроллере есть HardFault прерывание, воспользовавшись им, я проверил более высокие частоты. Так вот, сбоить чип начинает только на 70 МГц. Но хотя эту конкретную программу контроллер переваривает на 60МГц, при использовании периферии или работе с Flash памятью он может повести себя непредсказуемо. Вывод: относитесь к данному топику как к эксперименту, повторяйте только на свой страх и риск.

Датчик касания для Arduino

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

Управление ритмом воспроизведения мелодии

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

Характеристики

Напряжение питания 2,5 - 5,5 В
Время отклика на касание в различных режимах потребления тока
низкое 220 мс
обычное 60 мс
Выходной сигнал
Напряжение
высокий лог. уровень 0,8 Х напряжение питания
низкий лог. уровень 0,3 Х напряжение питания
Ток при питании 3 В и логических уровнях, мА
низкий 8
высокий -4
Размеры платы 28 x 24 x 8 мм

Контакты и сигнал

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

Почему это работает или немного теории

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

Режим пониженного потребления

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

Работа совместно с Arduino UNO

Загрузите в Arduino UNO следующую программу.

#define ctsPin 2 // Контакт подключения линии сигнала датчика касания
int ledPin = 13; // Контакт для светодиода

Void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(ctsPin, INPUT);
}

Void loop() {
int ctsValue = digitalRead(ctsPin);
if (ctsValue == HIGH){
digitalWrite(ledPin, HIGH);
Serial.println("TOUCHED");
}
else{
digitalWrite(ledPin,LOW);
Serial.println("not touched");
}
delay(500);
}

Соедините датчик касания и Arduino UNO как показано на рисунке. Схему можно дополнить включающимся при касании датчика светодиодом, подключенным через резистор 430 Ом к контакту 13. Сенсорные кнопки часто оснащают индикатором касания. Так удобней работать оператору. При нажатии на механическую кнопку мы чувствуем щелчок независимо от реакции системы. Здесь новизна технологии немного удивляет из-за нашей моторики сложившейся годами. Индикатор нажатия избавляет нас от излишнего ощущения новизны.

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

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

Описание работы сенсорного датчика прикосновения

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

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

Данный сенсорный датчик прикосновения достаточно прост вследствие применения полевого транзистора КП501А (Б, В). Данный транзистор обеспечивает пропускание тока до180 мА при предельном напряжении исток-сток до 240В для буквы А и 200В для букв Б и В. Для защиты от статического электричества на его входе имеется диод.

Полевой транзистор обладает большим входным сопротивлением, и для того чтобы управлять им хватает статического напряжения, которое больше порогового значения. Для данного типа полевого транзистора номинальное пороговое напряжение составляет 1…3 В, а максимально допустимое равно 20 В.

При прикосновении рукой к датчику Е1, степень наведенного потенциала на затворе является достаточной для открывания транзистора. При этом на стоке VT1 будут электрические импульсы продолжительностью 35 мс, и имеющие частоту электрической сети 50 Гц. Для переключения большинства электромагнитных реле необходимо всего 3…25 мс. Для предотвращения дребезга контактов реле, в момент прикосновения, в схему включен конденсатор C2. За счет накопленного заряда на конденсаторе, реле будет включенным даже в тот полупериод сетевого напряжения, когда VT1 будет закрыт. Пока есть прикосновение к датчику сенсора, реле будет во включенном состоянии.

Конденсатор C1 увеличивает помехоустойчивость сенсора к высокочастотным радиопомехам. Менять чувствительность прикосновения к сенсору можно путем изменения емкости C1 и сопротивления R1. Группа контактов К1.1 осуществляет управление внешними электронными устройствами.

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

Датчик касания для Arduino

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

Управление ритмом воспроизведения мелодии

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

Характеристики

Напряжение питания 2,5 - 5,5 В
Время отклика на касание в различных режимах потребления тока
низкое 220 мс
обычное 60 мс
Выходной сигнал
Напряжение
высокий лог. уровень 0,8 Х напряжение питания
низкий лог. уровень 0,3 Х напряжение питания
Ток при питании 3 В и логических уровнях, мА
низкий 8
высокий -4
Размеры платы 28 x 24 x 8 мм

Контакты и сигнал

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

Почему это работает или немного теории

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

Режим пониженного потребления

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

Работа совместно с Arduino UNO

Загрузите в Arduino UNO следующую программу.

#define ctsPin 2 // Контакт подключения линии сигнала датчика касания
int ledPin = 13; // Контакт для светодиода

Void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(ctsPin, INPUT);
}

Void loop() {
int ctsValue = digitalRead(ctsPin);
if (ctsValue == HIGH){
digitalWrite(ledPin, HIGH);
Serial.println("TOUCHED");
}
else{
digitalWrite(ledPin,LOW);
Serial.println("not touched");
}
delay(500);
}

Соедините датчик касания и Arduino UNO как показано на рисунке. Схему можно дополнить включающимся при касании датчика светодиодом, подключенным через резистор 430 Ом к контакту 13. Сенсорные кнопки часто оснащают индикатором касания. Так удобней работать оператору. При нажатии на механическую кнопку мы чувствуем щелчок независимо от реакции системы. Здесь новизна технологии немного удивляет из-за нашей моторики сложившейся годами. Индикатор нажатия избавляет нас от излишнего ощущения новизны.



просмотров