В этой статье мы поговорим о сенсорных кнопках в ардуино. С помощью этого несложного и недорогого компонента можно создавать простые и очень эффектные проекты. Чаще всего такие кнопки используются для создания всевозможных удобных сенсорных интерфейсов, например в системах умного дома. Давайте узнаем, как можно подключать сенсорные кнопки к ардуино, напишем простой скетч и обязательно рассмотрим принцип их работы.
Сенсорная кнопка
Ни для кого не секрет, что прогресс не стоит на месте. Постоянно появляются новые технологии, совершенствуются старые. Сенсорные экраны появились совсем недавно (по меркам человечества), но уже прочно вошли в нашу повседневную жизнь. Телефоны, телевизоры, терминалы и прочие в большинстве своём используют «беcкнопочные» технологии. В кавычках это слово по той причине, что они всё-таки используют кнопки, только сенсорные. О них в данной статье как раз и пойдёт речь, а если точнее, о Touch module для Arduino.
Принцип работы сенсорных кнопок
Модули с сенсорными кнопками в большинстве своём используют проекционно-ёмкостные сенсорные экраны (https://ru.wikipedia.org/wiki/Сенсорный_экран). Если не вдаваться в пространственные объяснения их работы, для регистрации нажатия используется вычисление изменения ёмкости конденсатора (электрической цепи), при этом важной особенностью является возможность выставлять различную начальную ёмкость, в чём мы убедимся далее.
Человеческое тело обладает некоторой электрической емкостью, а следовательно, и невысоким реактивным сопротивлением для переменного электрического тока. Если прикоснуться пальцем либо каким-либо электропроводящим объектом, то через них потечет небольшой ток утечки от устройства. Специальный чип определяет эту утечку и подаёт сигнал о нажатии кнопки. Плюсами данной технологии являются: относительная долговечность, слабое влияние загрязнений и устойчивость к попаданию воды.
Сенсорные или механические кнопки
+ Сенсорная кнопка «ощущает» нажатие даже через небольшой слой неметаллического материала, что обеспечивает разнообразие в использовании её во всевозможных проектах.
+ Из предыдущего пункта вытекает и этот – возможность использовать сенсорную кнопку внутри корпуса повышает привлекательность проекта, что не влияет на функционал, но достаточно важно в повседневной жизни, чтобы не обращать на это внимание.
+ Стабильное функционирование, которое выражается отсутствием подвижных частей и частой калибровкой (о чём будет сказано ниже). Вам не придется беспокоиться о дребезге кнопок, возникающем при использовании механического собрата, что существенно облегчит жизнь начинающему ардуинщику. Поэтому ещё один плюс, пусть и не для всех – простота при работе.
Из минусов можно отметить следущее:
- Сенсорные кнопки плохо работают при минусовых температурах, поэтому они непригодны для использования за пределами помещений.
- Высокое потребление электричества, вызванное необходимостью постоянно поддерживать одинаковую ёмкость.
- Сенсорная кнопка не работает при нажатии её рукой в перчатке либо плохо проводящим электричество объектом
Обзор сенсорных кнопок
Прежде чем говорить непосредственно о работе с модулем, нужно определиться с тем, какую именно модель купить для использования. Рассмотрим несколько вариантов различных компаний:
1. Troyka touch sensor
Время отклика: 80мс (в режиме энергопотребления) и 10мс (в высокоскоростном режиме)
Максимальная толщина диэлектрика для нормальной работы: 4 мм
Размер: 25Х25 мм
Напряжение питания: 3–5 В
Цена: 390 рублей
2. Grove Touch Sensor
Время отклика: 220 мс и 80 мс
Максимальная толщина диэлектрика для нормальной работы: 2 мм
Размер: 20Х20 мм
Напряжение питания: 2–5 В
Цена: 229 рублей
3. TTP223B Arduino Digital Touch Sensor
Время отклика: 220 мс и 60 мс
Размер: 24Х24 мм
Напряжение питания: 2–5 В
Цена: 150 рублей
4. Keyestudio touch module
Размер: 30Х20 мм
Напряжение питания: 3.3–5 В
Цена: 270 рублей
Подключение сенсорной кнопки к Ардуино
Для использования сенсорной кнопки, как, впрочем, и всех остальных модулей и датчиков, её необходимо подключить к какой-либо плате arduino. В большинстве случаев используются стандартные модули с тремя контактами: питание, сигнал и земля. Их расположения от модели к модели меняются, на схеме они отображены согласно недавнему перечислению (сенсорная кнопка заменена переключателем по причине её отсутствии в Tincercad):
Важный момент: нужно помнить, сенсорной кнопке требуется в среднем полусекундная калибровка во время каждого запуска, что позволяет не беспокоиться о лишних шумах, которые, несомненно, возникали бы из-за различного положения кнопки в проектах. Поэтому не стоит сразу после запуска нажимать на кнопку, т.к. после этого наиболее вероятна некорректная работа устройства.
Сенсорный модуль, по своей сути аналогичен цифровой кнопке. Пока кнопка нажата, датчик отдаёт логическую единицу, а если нет, то логический ноль.
Проекты с использованием сенсорной кнопки
Начнём с простого: при нажатии на кнопку загорается встроенный светодиод.
const int buttonPin = 7; // Выставляем значения порта, подсоединённого с сигнал-портом кнопки void setup() { pinMode(LED_BUILTIN, OUTPUT); // Команда для адекватного реагирования светодиода pinMode(buttonPin, INPUT); // Открываем порт для считывания } void loop() { buttonState = digitalRead(buttonPin); // Считываем статус кнопки (нажата / не нажата) if (digitalRead(buttonPin)) { // Если кнопка нажата... digitalWrite(LED_BUILTIN, HIGH); // Подаём напряжение на LED_BUILTIN - значение для встроенного светодиода } else { // Иначе... digitalWrite(LED_BUILTIN, LOW); // Не подаём напряжение } }
Теперь усложним задачу: Нажатием на кнопку изменяется режим работы светодиода.
const int buttonPin = 7; // Выставляем значения порта, подсоединённого с сигнал-портом кнопки int count = 0; // Переменная, предназначенная для выбора режима работы void setup() { pinMode(LED_BUILTIN, OUTPUT); // Команда для адекватного реагирования светодиода pinMode(buttonPin, INPUT); // Открываем порт для считывания } void loop() { if(digitalRead(buttonPin)){ // При нажатии кнопки... count = count + 1; // Изменяем режим кнопки if(count > 2){ //В случае превышения значения count начинаем отсчет сначала count = 0; } while(digitalRead(buttonPin)){ // Пустой цикл для ожидания, пока пользователь отпустит кнопку } } if(count == 0) { // 3 режима по переключению кнопки: digitalWrite(LED_BUILTIN, LOW); // 1: Выключенный светодиод } else if(count == 1) { digitalWrite(LED_BUILTIN, HIGH); // 2: Включенный } else { digitalWrite(LED_BUILTIN, HIGH); // 3: Мигающий delay(100); digitalWrite(LED_BUILTIN, LOW); delay(100); } }
Заключение
В этой статье мы с вами рассмотрели принцип работы и схему подключения сенсорной кнопки к платам Arduino. С точки зрения программной модели никаких особенных отличий при работе с таким видом кнопок нет. Вы просто анализируете уровень входящего сигнала и принимаете решение о своем действии. С учетом того, что сами модули сенсорных кнопок достаточно дешевы и доступны в большом количестве интернет-магазинов, добавить такой интересный и современный интерфейс к своему ардуино-проекту на составит никакого труда.
В этой статье я покажу, как можно просто и быстро реализовать сенсорную кнопку. В данном примере кнопку будет изображать кусок фольгированного текстолита. А вообще на роль сенсора может подойти любой электрический проводник, даже просто кусок провода. Чтобы показать, что сенсор работает, будем включать светодиод, после прикосновения пальцем к сенсору. Ниже приведены две фотографии: схема в положении покоя и в момент прикосновения пальцем к сенсору (куску текстолита).
Что использовалось в проекте
Список того, что я использовал, так же привожу ссылки, где это покупал — все с Китая, там дешевле всего )
- Arduino (я использовал arduino nano, но можно любую другую). Покупал тут: arduino nano
- 1 Кусок фольгированного текстолита. Покупал тут: 10 кусков одностороннего текстолита 70x100x1.2 мм
- 1 резистор сопротивлением 1 мОм (не критично, если сопротивление будет больше). Покупал тут: набор резисторов 700 шт. От 10 Ом до 1 МОм
- 1 светодиод. Покупал тут: 100 светодиодов, 10 разных цветов
- Несколько соединительных проводов. Покупал тут: соединительные провода
- Макетная плата. Я использовал с 830 отверстиями. Покупал тут: макетная плата
Схема сборки сенсорной кнопки для arduino
Остается только написать скетч, но прежде стоит разобраться, как работает наша схема. Мы будем посылать сигнал с одного пина, и получать сигнал другим пином. Пины будут разделены резистором с большим сопротивлением, а также параллельно к ним подключена пластина, которая будет являться очень маленьким конденсатором, емкость которого будет наполняться при каждой отправке сигнала от пина к пину. В связи с тем, что емкость пластинки должна наполняться, каждый раз будет происходить очень короткая задержка (это примерно 15-20 микросекунд). А когда мы касаемся пальцем, емкость конденсатора увеличивается в несколько раз, что скажется на скорости передачи сигнала между пинами. Именно скорость передачи сигнала и будет указывать на то, что было прикосновение к сенсору. Остается только программно обработать передачу, прием и подсчет времени передачи сигнала. Подробнее почитать о получившейся у нас цепи можно в Википедии тут: RC-цепь
Скетч для сенсорной кнопки
Скачать скетч можно тут: скачать.
int firstPin = 3; // Пин, который отправляет сигнал int secondPin = 2; // Пин, который принимает сигнал int ledPin = 13; // Светодиод void setup() { pinMode(secondPin, OUTPUT); pinMode(firstPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int ms = getDeltaTime(); if(ms > 100){ digitalWrite(ledPin,HIGH); }else{ digitalWrite(ledPin,LOW); } delay(10); } int getDeltaTime() { int time_start=0; int time_finish = 0; int time_delta = 0; time_start = micros(); // Количество микросекунд со старта программы digitalWrite(secondPin, HIGH); // Отправляем сигнал while(digitalRead(firstPin) == LOW); // Джем пока дойдет сигнал от одного пина к другому time_finish = micros(); // Еще раз смотрим сколько прошло микросекунд со старта программы time_delta = time_finish - time_start; // Высчитываем сколько микросекунд ушло на передачу сигнала между пинами digitalWrite(secondPin, LOW); // Останавливаем передачу сигнала Serial.println(time_delta); return time_delta; }
Общие сведения:
Trema-модуль Сенсорная кнопка — это емкостная сенсорная кнопка, которая может служить источником сигналов (команд) для Ваших проектов. Кнопки используются для управления устройствами, подачи команд, осуществления настроек, ввода данных и т.д.
Видео:
Спецификация:
- Рабочее напряжение: 3.3/5 В
- Сопротивление прижимающего резистора: 10 кОм
- Рабочая температура: -20 … 70 °C
- Габариты: 30x30x15 (без учёта выводов)
Все модули линейки «Trema» выполнены в одном формате
Способ — 2 : Используя Trema Set Shield
Модуль можно подключить к любому из цифровых или аналоговых входов Trema Set Shield.
Способ — 3 : Используя проводной шлейф и Shield
Используя один 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Питание:
Рабочее напряжение питания от 3.3В до 5В постоянного тока.
Подробнее о модуле:
Trema-модуль Сенсорная кнопка построена на базе чипа TTP223 и предназначена для коммутации электрических цепей и широко используется в радиоэлектронной аппаратуре.
Trema-модуль Сенсорная кнопка имеет четыре вывода: GND (G), Vcc (V), Signal (K), Trigger(T). В не нажатом состоянии на выходе K присутствует уровень логического «0» (выход прижат к GND через резистор). В нажатом состоянии на выходе K устанавливается уровень логической «1» (выход соединяется с Vcc). Вывод T используется для перевода кнопки в режим триггера — режим, при котором кнопка работает как выключатель с защёлкой. Для этого достаточно подать на вывод T логическую «1». Чтобы кнопка работала в обычном режиме, подайте на выход T логический «0» или отключите данный вывод.
Для работы с модулем нужно сконфигурировать вывод Arduino, подключённый к выходу K, как вход, а к выводу T как выход.
При считывании показаний с модуля нужно учитывать такое явление, как дребезг контактов. При нажатии или отпускании кнопки, её контакты сначала многократно и неконтролируемо замыкаются и размыкаются по причине того, что чип сенсора может улавливать воздействие руки в пограничной зоне, а постоянный логический уровень устанавливается только после окончания дребезга. Это значит, что если 1 раз нажать на кнопку и отпустить её, то алгоритм программы может зафиксировать многократное нажатие на кнопку, если в нём не учитывается подавление дребезга.
Для подавления влияния дребезга на алгоритм скетча, нужно после фиксации изменения логического уровня на выходе кнопки выдержать паузу, равную или превышающую время дребезга.
Примеры:
При работе с кнопкой можно фиксировать её состояния (нажата / отпущена) и события (нажимается / отпускается).
Фиксация всех состояний и событий в режиме кнопки:
В данном примере каждый участок кода выполняется в зависимости от состояния или события кнопки.
В любом из указанных скетчей можно использовать не все участки кода, а только те, которые требуются Вам.
Применение:
- Управление устройствами;
- Пульты управления;
- Подача управляющих команд системе и пр.
Ссылки:
Используемые источники:
- https://arduinomaster.ru/datchiki-arduino/sensornaja-knopka-arduino-touch/
- https://vk-book.ru/sensornaya-knopka-dlya-arduino-svoimi-rukami/
- https://wiki.iarduino.ru/page/touch-button/