ESP32 имеет 10 емкостных сенсорных GPIO. Эти GPIO могут обнаруживать изменения во всем, что содержит электрический заряд, например, в коже человека. Таким образом, они могут обнаруживать изменения, вызванные прикосновением пальца к GPIO. Эти контакты можно легко встроить в емкостные площадки и заменить механические кнопки.
Если у Вас плата ESP-WROOM-32 DevKit v1, то Вам доступно 9 таких контактов.
На схеме они обозначены буквами Т0, Т2....T9. К этим пинам можно прицепить кусочек чего-нибудь металлического и просто касаться контактов. Я решил, что этим чем-то у меня будут обычные гайки М3 с колпачком. (это прототип будущего проекта - цель данной статьи выяснить насколько принятое решение будет применимо в практических целях)
Собрать такое устройство можно за 2-3 часа.
Крепежные стойки подключены с помощью проводов припаянных у гайкам креплений прямо к выводам платы ESP32.
Схема подключения:
В собранном виде устройство выглядит вот таким образом:
Осталось написать программу для обработки прикосновения к колпачкам.
Для того чтобы понять прикоснулись ли мы контакта существует специальная функция touchRead(PIN). Напишем простенькую программу и выведем значения этой функции в монитор порта:
Если мы не касаемся гаек - что значения будут в районе 80-90
Если прикоснутся к любой из гаек то значения будут в районе 10
Все работает как нужно - можно писать более серьезный обработчик прикосновений с фильтром от помех и подсчетом количества нажатий.
(обработка события "кнопка клик"). Сделаем счетчик прикосновений для каждой кнопки и будем выводить количество прикосновений на экран.
Для реализации данного алгоритма нам потребуется сохранить 8 бит информации. (по 2 бита на кнопку). Разберем реализацию на примере одной кнопки. Какие биты нужно устанавливать (сбрасывать) в зависимости от события ?
Составляем под эту табличку алгоритм:
Реализуем алгоритм в виде скетча:
Все работает как нужно - с каждым отдельным прикосновением к гайке мы увеличиваем счетчик который отображается на дисплее.
Сенсорный интерфейс штука на которую могут повлиять различные электрические помехи, да и сила с которой мы давим на гаечку может быть различной. Давайте реализуем простенький фильтр, чтобы коснулись/не коснулись засчитывалось только после считывания нескольких значений (в моем случае 8). Для этого заведем еще одну 1 переменную размером в 1 байт и будем двигать в ней 1 бит. (влево если до кнопки дотронулись и вправо если кнопку отпустили). Как только бит доедет до упора (младший/старший) - будем засчитывать отпускание/прикосновение.
Алгоритм работы будет такой:
Пишем код:
Вот мы и сделали из обычной гайки сенсорный интерфейс для управления устройством на базе микроконтроллера ESP32 без каких-либо дополнительных деталей. Код примера доступен ТУТ.
Данный пример легко модифицировать для считывания касаний с 4-х кнопок (их кстати можно будет касаться несколько штук одновременно)
Теперь при нажатии на каждую кнопку будет увеличиваться соответствующий счетчик. Код примера смотрите ТУТ
Тест устройства смотрите в коротком видео:
Вы можете ознакомиться с полным списком статей на моем канале.
Всем удачи!