Найти тему
Электроника, ESP32, Arduino

ESP32 Встроенный сенсорный интерфейс

ESP32 имеет 10 емкостных сенсорных GPIO. Эти GPIO могут обнаруживать изменения во всем, что содержит электрический заряд, например, в коже человека. Таким образом, они могут обнаруживать изменения, вызванные прикосновением пальца к GPIO. Эти контакты можно легко встроить в емкостные площадки и заменить механические кнопки.
Если у Вас плата ESP-WROOM-32 DevKit v1, то Вам доступно 9 таких контактов.

На схеме они обозначены буквами Т0, Т2....T9. К этим пинам можно прицепить кусочек чего-нибудь металлического и просто касаться контактов. Я решил, что этим чем-то у меня будут обычные гайки М3 с колпачком. (это прототип будущего проекта - цель данной статьи выяснить насколько принятое решение будет применимо в практических целях)
Собрать такое устройство можно за 2-3 часа.

-2
-3

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

Схема подключения:

Электрическая принципиальная схема
Электрическая принципиальная схема

В собранном виде устройство выглядит вот таким образом:

-5

Осталось написать программу для обработки прикосновения к колпачкам.
Для того чтобы понять прикоснулись ли мы контакта существует специальная функция
touchRead(PIN). Напишем простенькую программу и выведем значения этой функции в монитор порта:

-6

Если мы не касаемся гаек - что значения будут в районе 80-90

-7

Если прикоснутся к любой из гаек то значения будут в районе 10

-8

Все работает как нужно - можно писать более серьезный обработчик прикосновений с фильтром от помех и подсчетом количества нажатий.
(обработка события "кнопка клик"). Сделаем счетчик прикосновений для каждой кнопки и будем выводить количество прикосновений на экран.
Для реализации данного алгоритма нам потребуется сохранить 8 бит информации. (по 2 бита на кнопку). Разберем реализацию на примере одной кнопки. Какие биты нужно устанавливать (сбрасывать) в зависимости от события ?

-9

Составляем под эту табличку алгоритм:

-10

Реализуем алгоритм в виде скетча:

-11

Все работает как нужно - с каждым отдельным прикосновением к гайке мы увеличиваем счетчик который отображается на дисплее.

-12

Сенсорный интерфейс штука на которую могут повлиять различные электрические помехи, да и сила с которой мы давим на гаечку может быть различной. Давайте реализуем простенький фильтр, чтобы коснулись/не коснулись засчитывалось только после считывания нескольких значений (в моем случае 8). Для этого заведем еще одну 1 переменную размером в 1 байт и будем двигать в ней 1 бит. (влево если до кнопки дотронулись и вправо если кнопку отпустили). Как только бит доедет до упора (младший/старший) - будем засчитывать отпускание/прикосновение.
Алгоритм работы будет такой:

-13

Пишем код:

Скетч с фильтром от помех
Скетч с фильтром от помех

Вот мы и сделали из обычной гайки сенсорный интерфейс для управления устройством на базе микроконтроллера ESP32 без каких-либо дополнительных деталей. Код примера доступен ТУТ.

Данный пример легко модифицировать для считывания касаний с 4-х кнопок (их кстати можно будет касаться несколько штук одновременно)

-15

Теперь при нажатии на каждую кнопку будет увеличиваться соответствующий счетчик. Код примера смотрите ТУТ

Тест устройства смотрите в коротком видео:

Вы можете ознакомиться с полным списком статей на моем канале.
Всем удачи!