Компоненты · 11 мин чтения

Датчик касания TTP223 и Arduino: режимы, подключение и сенсорная лампа

Как пользоваться ёмкостным датчиком касания TTP223: перемычки A/B для режима без фиксации или с фиксацией, сенсорная лампа на Arduino, работа через пластик, код для ESP32 и Pico.

Датчик касания TTP223 — дешёвый одноклавишный ёмкостный сенсорный модуль, который заменяет механическую кнопку: он замечает палец по изменению ёмкости. У него всего три пина (VCC, GND и I/O): при касании выход переходит в HIGH, а когда палец убран, возвращается в LOW. Благодаря такой простоте на Arduino он читается через digitalRead() точно так же, как кнопка, а поскольку работает от 2–5,5 V, подключается напрямую и к ESP32 или Raspberry Pi Pico. Подвижных частей нет, поэтому он не изнашивается и не щёлкает, а ещё его можно спрятать за тонким слоем пластика, стекла или дерева.

В этом руководстве ты пошагово узнаешь, что происходит внутри TTP223, как с помощью паяных перемычек A и B на плате выбрать режим без фиксации или с фиксацией и выход с активным HIGH или активным LOW, как собрать сенсорную лампу на Arduino, которая включается коротким касанием и приглушается длинным, как заставить датчик работать за панелью, как использовать несколько клавиш, чем он отличается от встроенных сенсорных пинов ESP32 и как работать с ним на Pico в MicroPython.

Модуль ёмкостного датчика касания TTP223
Модуль датчика касания TTP223: одноклавишный ёмкостный датчик, три пина (VCC, I/O, GND) и паяные перемычки A и B для выбора режима.

Что такое датчик касания TTP223 и как он работает?

Медная площадка на модуле и полигон земли (GND) на плате образуют крошечный конденсатор ёмкостью в несколько пикофарад. Когда палец приближается к площадке, к этому конденсатору добавляется твоё тело, и общая ёмкость растёт на несколько пикофарад. Сенсорный генератор внутри TTP223 с частотой примерно 1 MHz видит этот рост как изменение частоты, сравнивает результат с хранимым опорным значением и переключает выход, если разница достаточно велика. Здесь тоже работает формула плоского конденсатора C = ε·A/d: чем больше площадь площадки (A) и чем тоньше материал между пальцем и площадкой (d), тем увереннее срабатывание.

Опорное значение микросхема задаёт сама. Сразу после подачи питания она примерно 0,5 секунды измеряет окружение и в это время не реагирует на касания. Дальше, пока никто не касается площадки, она примерно каждые 4 секунды заново калибруется, так что медленные изменения вроде температуры и влажности со временем компенсируются. Поэтому датчик считает «нетронутым» всё, что было рядом с площадкой при включении: если при подаче питания палец лежит на площадке, касания он просто не увидит.

ПараметрЗначение
МикросхемаTTP223-BA6 (корпус SOT-23 с 6 выводами)
Напряжение питания2,0–5,5 V
Ток микросхемы (3 V, без светодиода)Обычно 1,5 µA, максимум 3 µA
Время откликаДо ~220 мс в режиме низкого энергопотребления, ~60 мс в быстром режиме
Тип выходаКМОП (push-pull); уровень HIGH равен VCC
Выходной ток (при 3 V)Отдаёт около 4 mA, принимает 8 mA
Калибровка при включенииОколо 0,5 с (в это время не касаться)
Настройка чувствительностиКонденсатор 0–50 pF (Cs) между площадкой и GND
Рабочая температураОт -20 до +70 °C
Пины модуляVCC, I/O (SIG или OUT), GND

В версии TTP223-BA6, которая стоит на этих модулях, часть настроек зафиксирована внутри корпуса: микросхема всегда работает в режиме низкого энергопотребления, а ограничение «максимального времени удержания» в 100 секунд, которое есть в других корпусах, отключено. В режиме низкого энергопотребления микросхема потребляет всего несколько микроампер, но на первое касание может реагировать до 220 мс. После обнаружения касания она примерно 12 секунд остаётся в быстром режиме и на следующие касания отвечает гораздо быстрее. В лампе или дверном звонке такую задержку не заметить, но держи её в голове, если делаешь игровой контроллер, которому нужна быстрая реакция.

Распиновка и подключение TTP223

Пин TTP223Arduino UnoESP32Raspberry Pi Pico
VCC5V3V33V3(OUT) (вывод 36)
GNDGNDGNDGND (вывод 38)
I/O (SIG)D2GPIO 26GP15 (вывод 20)
Выход TTP223 двухтактный (push-pull), поэтому его уровень HIGH равен напряжению питания. Если запитать модуль от 5 V и подключить его выход к ESP32 или Pico, на пин, рассчитанный на 3,3 V, попадёт 5 V, и пин выйдет из строя. На платах с логикой 3,3 V всегда питай модуль от пина 3V3. И не касайся площадки первые полсекунды после подачи питания, иначе датчик примет палец за часть окружения.

Выходной пин сам активно выставляет сигнал в HIGH и LOW, поэтому на Arduino не нужны ни INPUT_PULLUP, ни внешний резистор: достаточно настроить пин как обычный INPUT. Дребезга контактов, как у механических кнопок, здесь нет: микросхема меняет выход только тогда, когда касание стабильно. И всё же, если нужно, чтобы код считал одно касание одним событием, используй логику обнаружения фронта, о которой рассказано в статье «Как подключить кнопку».

Выбор режима паяными перемычками A и B

Рядом с микросхемой на модуле есть две маленькие пары контактных площадок с надписями A и B. Они соединены с двумя выводами настройки микросхемы: на большинстве модулей A выбирает, будет выход с активным HIGH или с активным LOW (AHLB), а B — будет датчик работать без фиксации или с фиксацией (TOG). Внутри микросхемы эти выводы подтянуты к GND через резистор, поэтому при разомкнутых площадках настройка равна «0»; стоит соединить две площадки каплей припоя, и настройка становится «1». После изменения перемычки надёжнее всего отключить и снова подать питание. Если надписи на твоей плате другие, режим легко проверить по светодиоду в первом тестовом скетче.

ABРежимПри касанииВыход при включении
РазомкнутаРазомкнутаБез фиксации, активный HIGH (заводская настройка)HIGH, пока длится касаниеLOW
ЗамкнутаРазомкнутаБез фиксации, активный LOWLOW, пока длится касаниеHIGH
РазомкнутаЗамкнутаС фиксацией (toggle), активный HIGHСостояние меняется при каждом касанииLOW
ЗамкнутаЗамкнутаС фиксацией (toggle), активный LOWСостояние меняется при каждом касанииHIGH
Если датчик работает с микроконтроллером, оставь заводскую настройку (обе пары площадок разомкнуты) и сделай логику включения и выключения программно: так можно добавить и длинное касание, и двойное. Режим с фиксацией полезен в схемах, где модуль напрямую, без всякого кода, коммутирует транзистор или светодиод. Режим с активным LOW удобен, когда датчик ставится вместо кнопки, подключённой с INPUT_PULLUP: код и так ждёт LOW при нажатии, поэтому не придётся менять ни строчки. Чтобы разомкнуть случайно запаянную перемычку, используй оплётку для выпайки; советы есть в статье «Как паять».

Первый тест с Arduino: читаем касание

  1. Подключи пин VCC модуля к пину 5V на Arduino, GND к GND, а пин I/O к D2.
  2. Загрузи скетч ниже в плату и открой монитор порта на скорости 9600 бод.
  3. После запуска платы подожди около секунды, не касаясь площадки: в это время микросхема калибруется.
  4. Коснись площадки пальцем: встроенный светодиод Arduino на пине 13 (а на большинстве модулей и собственный светодиод платы) должен загореться, а счётчик касаний в мониторе порта — увеличиться на единицу.
  5. Пока палец лежит на площадке, светодиод горит, а счётчик увеличивается только один раз на каждое новое касание.
C++ (Arduino IDE)
1const int TOUCH_PIN = 2;    // TTP223 I/O (SIG) pini / TTP223 I/O (SIG) pin
2const int LED_PIN = 13;     // Uno'nun dahili LED'i / Uno onboard LED
3
4bool lastState = false;
5unsigned long touchCount = 0;
6
7void setup() {
8  Serial.begin(9600);
9  pinMode(TOUCH_PIN, INPUT);   // çıkış push-pull, pull-up gerekmez / push-pull output, no pull-up needed
10  pinMode(LED_PIN, OUTPUT);
11  delay(600);                  // açılış kalibrasyonu bitsin (~0,5 s) / let power-on calibration finish (~0.5 s)
12}
13
14void loop() {
15  bool state = digitalRead(TOUCH_PIN) == HIGH;   // dokunurken true / true while touched
16  digitalWrite(LED_PIN, state ? HIGH : LOW);
17
18  if (state && !lastState) {   // LOW -> HIGH: yeni dokunuş / new touch
19    touchCount++;
20    Serial.print("Dokunus / Touch: ");
21    Serial.println(touchCount);
22  }
23  lastState = state;
24}

Самая важная часть кода — обнаружение фронта. Предыдущее показание хранится в переменной lastState; если новое показание HIGH, а предыдущее было LOW, значит, это новое касание. Без такой проверки счётчик рос бы на каждом проходе цикла, пока палец остаётся на площадке, то есть тысячи раз в секунду. Ожидание 600 мс в setup() гарантирует, что микросхема закончит калибровку, когда Arduino и модуль получают питание одновременно. D2 выбран потому, что это один из пинов прерываний Uno; при желании касание можно ловить и прерыванием через attachInterrupt(digitalPinToInterrupt(2), функция, RISING).

Проект: сенсорная лампа на Arduino

Теперь соберём настоящую сенсорную лампу: короткое касание включает и выключает её, если удерживать палец на площадке при включённой лампе, свет плавно приглушается, а следующее длинное касание снова делает его ярче. Яркость задаётся через ШИМ, поэтому лампу подключаем к D9, одному из ШИМ-пинов Uno. Для проверки хватит светодиода и резистора 220 Ω на D9 (нужный номинал подскажет калькулятор резистора для светодиода). Для светодиодной ленты на 12 V поставь между ними MOSFET с логическим уровнем управления, например IRLZ44N; подробности в статье «MOSFET и Arduino».

C++ (Arduino IDE)
1const int TOUCH_PIN = 2;                // TTP223 I/O (fabrika ayarı: anlık, aktif yüksek) / factory default: momentary, active high
2const int LAMP_PIN = 9;                 // PWM pini: LED ya da MOSFET kapısı / PWM pin: LED or MOSFET gate
3const unsigned long LONG_PRESS = 600;   // uzun dokunuş eşiği (ms) / long-touch threshold (ms)
4
5bool lampOn = false;
6bool lastTouch = false;
7bool dimming = false;
8int brightness = 255;                   // son parlaklık (10-255) / last brightness (10-255)
9int step = 5;                           // kısma yönü ve adımı / dimming direction and step
10unsigned long touchStart = 0;
11unsigned long lastStep = 0;
12
13void setup() {
14  pinMode(TOUCH_PIN, INPUT);
15  pinMode(LAMP_PIN, OUTPUT);
16  delay(600);                           // TTP223 kalibrasyonu bitsin / let the TTP223 finish calibrating
17}
18
19void loop() {
20  bool touch = digitalRead(TOUCH_PIN) == HIGH;
21  unsigned long now = millis();
22
23  if (touch && !lastTouch) {            // dokunuş başladı / touch started
24    touchStart = now;
25    dimming = false;
26  }
27
28  if (touch && lampOn && now - touchStart > LONG_PRESS) {   // lamba açıkken uzun dokunuş / long touch while the lamp is on
29    if (!dimming) {
30      dimming = true;
31      step = -step;                     // her uzun dokunuşta yön değişir / direction flips on every long touch
32    }
33    if (now - lastStep >= 20) {         // 20 ms'de bir adım / one step every 20 ms
34      lastStep = now;
35      brightness += step;
36      if (brightness <= 10 || brightness >= 255) {
37        brightness = constrain(brightness, 10, 255);
38        step = -step;                   // uca gelince geri dön / bounce back at the ends
39      }
40      analogWrite(LAMP_PIN, brightness);
41    }
42  }
43
44  if (!touch && lastTouch && !dimming) {   // kısa dokunuş bitti: aç/kapa / short touch ended: toggle
45    lampOn = !lampOn;
46    analogWrite(LAMP_PIN, lampOn ? brightness : 0);
47  }
48
49  lastTouch = touch;
50}
Часть кодаЧто делает
touchStartЗапоминает момент начала касания с помощью millis()
LONG_PRESS = 600Касания длиннее 600 мс считаются командой приглушения
dimmingВыставляется, если во время этого касания яркость менялась, чтобы лампа не выключилась, когда палец убран
stepМеняет знак при каждом длинном касании: свет то приглушается, то становится ярче
constrain(brightness, 10, 255)Держит яркость в диапазоне, где лампа никогда не гаснет полностью
Переключение при отпусканииРешение принимается, когда палец убран, чтобы отличать короткое касание от длинного

Обрати внимание: в коде нигде нет delay(). Все интервалы отсчитываются через millis(), поэтому цикл крутится без остановки и не пропускает ни одного касания. Подробнее об этом приёме читай в статье «millis() или delay()». Последняя яркость остаётся в переменной brightness, поэтому после выключения и повторного включения лампа загорается на последнем выставленном уровне, как сенсорные настольные лампы из магазина.

Тем же датчиком можно управлять и лампой от сети, но только включать и выключать её: модуль реле не умеет приглушать свет через ШИМ, поэтому вместо analogWrite используй digitalWrite. Сетевую проводку держи в закрытом корпусе и никогда не клей площадку TTP223 на металлическую поверхность, связанную с сетевым напряжением: между площадкой и сетью всегда должна быть изолирующая панель. Если опыта работы с сетевым напряжением нет, делай эту часть вместе со взрослым.

Срабатывание через тонкие материалы

Самая любимая особенность TTP223 — он работает изнутри корпуса без единого отверстия. Пластик, акрил, стекло, дерево, бумага и ткань пропускают электрическое поле; материал между площадкой и пальцем ведёт себя как диэлектрик конденсатора. Чем толще материал, тем больше d в формуле и тем меньше ёмкость между пальцем и площадкой: при удвоении толщины эта ёмкость падает примерно вдвое. У стекла диэлектрическая проницаемость выше, чем у большинства пластиков, поэтому стекло той же толщины обычно даёт лучший результат. На практике модуль, как правило, без проблем работает за панелью из пластика, акрила или стекла толщиной 1–3 мм; для более толстых панелей понадобится площадка побольше, и результат всегда стоит проверить на своём материале.

  • Не оставляй воздушный зазор: диэлектрическая проницаемость воздуха равна 1, и даже зазор в 1 мм сильно снижает чувствительность. Плотно приклей модуль к панели площадкой к ней, тонким двусторонним скотчем или клеем.
  • Увеличь площадку: для большей зоны касания вырежи электрод из медной ленты или алюминиевой фольги, аккуратно соскреби защитное покрытие с одного угла площадки и припаяй электрод к ней очень коротким проводом. Чем длиннее провод, тем больше ёмкости он добавляет и тем менее стабильным становится датчик.
  • Избегай металла: металлические панели, материалы с металлическими добавками и металлизированные краски стягивают электрическое поле на себя: датчик либо вообще ничего не замечает, либо срабатывает сам по себе.
  • Снизь избыточную чувствительность: если датчик срабатывает ещё до приближения пальца, добавь между площадкой и GND маленький керамический конденсатор (Cs) на 5–20 pF; чем больше номинал, тем ниже чувствительность, верхний предел — 50 pF. Маркировку на конденсаторе (например, 100 = 10 pF, 220 = 22 pF) можно расшифровать с помощью утилиты кодов конденсаторов.
  • Сначала монтаж, потом питание: при включении микросхема берёт окружение за опорное значение, поэтому подавай питание только после того, как панель и крышка на месте. Если установить панель при включённом питании, микросхема может принять её за постоянное касание; тогда достаточно отключить и снова подать питание.

Несколько сенсорных клавиш

Каждый TTP223 следит за своей площадкой независимо; для четырёх клавиш нужно подключить четыре модуля к четырём отдельным цифровым пинам, а VCC и GND у модулей общие. Если клавиши расположены очень близко, палец может влиять и на соседнюю площадку: оставляй между площадками не меньше 1–2 см и держи модули подальше от проводов моторов и реле. Скетч ниже делает из четырёх TTP223 и пассивного зуммера маленькое сенсорное пианино: какой клавиши ни коснёшься, звучит её нота, а когда палец убран, звук прекращается.

C++ (Arduino IDE)
1const int TOUCH_PINS[] = {2, 3, 4, 5};          // dört TTP223 I/O pini / four TTP223 I/O pins
2const int NOTES[]      = {262, 294, 330, 349};  // Do, Re, Mi, Fa (Hz) / C4, D4, E4, F4 (Hz)
3const int KEY_COUNT    = 4;
4const int BUZZER_PIN   = 8;                     // pasif buzzer / passive buzzer
5
6int currentNote = 0;
7
8void setup() {
9  for (int i = 0; i < KEY_COUNT; i++) {
10    pinMode(TOUCH_PINS[i], INPUT);
11  }
12  pinMode(BUZZER_PIN, OUTPUT);
13  delay(600);                                   // sensörlerin kalibrasyonu / sensor calibration
14}
15
16void loop() {
17  int note = 0;
18  for (int i = 0; i < KEY_COUNT; i++) {
19    if (digitalRead(TOUCH_PINS[i]) == HIGH) {   // ilk dokunulan tuş çalar / the first touched key plays
20      note = NOTES[i];
21      break;
22    }
23  }
24  if (note != currentNote) {                    // yalnızca nota değişince güncelle / update only when the note changes
25    currentNote = note;
26    if (note > 0) tone(BUZZER_PIN, note);
27    else noTone(BUZZER_PIN);
28  }
29}

tone() может играть только одну ноту за раз, поэтому код выбирает первую клавишу, которой касаются, и обновляет ноту только при её смене, чтобы звук не трещал. На Uno tone() использует Timer2, поэтому, пока звучит зуммер, analogWrite не работает на пинах 3 и 11; здесь это не мешает, ведь в пианино D3 используется только как вход. Когда клавиш становится больше, аккуратнее перейти с отдельного модуля на каждую клавишу на многоканальные микросхемы: TTP224 даёт четыре клавиши с четырьмя отдельными выходами, TTP229 читает 8 или 16 клавиш по двухпроводному последовательному интерфейсу, а MPR121 следит за 12 электродами по I2C.

ESP32: TTP223 или встроенные сенсорные пины?

В классическую ESP32 встроен ёмкостный сенсорный датчик, и 10 пинов (T0–T9) можно использовать как сенсорные клавиши без всякого модуля: по порядку это GPIO 4, 0, 2, 15, 13, 12, 14, 27, 33 и 32. Функция touchRead() возвращает «сырое» число; на классической ESP32 при касании пина это число падает, а на ESP32-S2 и S3 — растёт. У ESP32-C3 сенсорного датчика нет совсем. Подробно о встроенных пинах читай в статье «Сенсорные пины ESP32»; в таблице ниже сравниваются оба подхода.

ПараметрМодуль TTP223Встроенный сенсор ESP32
Дополнительная детальНужна (1 клавиша на модуль)Не нужна; достаточно провода или медной площадки на пине
ВыходГотовый цифровой HIGH/LOW«Сырое» число; порог выбираешь ты
КалибровкаВыполняет сама микросхемаНужно измерить и задать порог в коде
На каких платах?На всех (Uno, Nano, ESP, Pico)Только ESP32, ESP32-S2 и ESP32-S3
Число клавишСколько модулей, столько и клавиш10 на ESP32, 14 на S2 и S3
Пробуждение из глубокого снаЧерез ext0/ext1 на пине RTC GPIOС помощью touchSleepWakeUpEnable()
Длинные провода и влажностьСтабильно, ведь площадка находится на самом модулеС удлинением проводов показания уплывают, и порог перестаёт работать
C++ (Arduino IDE)
1const int TTP223_PIN = 26;   // TTP223 I/O, modül 3,3 V ile beslenir / module powered from 3.3 V
2const int TOUCH_GPIO = 4;    // dahili dokunmatik T0 / built-in touch pad T0
3const int LED_PIN = 2;       // çoğu DevKit'te dahili LED / onboard LED on most DevKits
4int threshold = 0;
5
6void setup() {
7  Serial.begin(115200);
8  pinMode(TTP223_PIN, INPUT);
9  pinMode(LED_PIN, OUTPUT);
10  delay(600);                                  // dokunmadan bekle / wait without touching
11  threshold = touchRead(TOUCH_GPIO) * 0.7;     // dokunulmamış değerin %70'i / 70% of the untouched value
12}
13
14void loop() {
15  int raw = touchRead(TOUCH_GPIO);             // klasik ESP32'de dokununca düşer / drops when touched on the classic ESP32
16  bool builtIn = raw < threshold;
17  bool module = digitalRead(TTP223_PIN) == HIGH;
18  digitalWrite(LED_PIN, (builtIn || module) ? HIGH : LOW);
19  Serial.printf("ham/raw: %d  esik/threshold: %d  T0: %d  TTP223: %d\n", raw, threshold, builtIn, module);
20  delay(100);
21}

При запуске этот скетч измеряет значение T0 без касания и берёт 70% от него как порог; следи за «сырым» значением в мониторе порта (115200 бод), чтобы подобрать коэффициент под своё подключение. На ESP32-S3 значение при касании растёт, поэтому сравнение нужно перевернуть (например, порог = измеренное значение × 1.3 и raw > порог). Ещё одна причина подключить TTP223 к GPIO 26 в том, что это RTC GPIO: с esp_sleep_enable_ext0_wakeup(GPIO_NUM_26, 1) ESP32 можно отправить в глубокий сон и будить касанием. TTP223 потребляет всего несколько микроампер, поэтому вместе они отлично подходят для проектов на батарейках; подробности в статье «Глубокий сон ESP32».

TTP223 и Raspberry Pi Pico (MicroPython)

В микросхеме RP2040 у Pico нет сенсорного датчика, поэтому TTP223 — самый простой способ добавить к Pico сенсорную клавишу. Питай модуль от пина 3V3(OUT) (физический вывод 36), а пин I/O подключи к GP15 (физический вывод 20). Код на MicroPython ниже переключает встроенный светодиод платы при каждом касании. Касание ловится прерыванием (IRQ), поэтому ни одно касание не теряется, даже пока основной цикл занят другой работой. Если установка MicroPython на Pico пока незнакома, начни со статьи «Что такое Raspberry Pi Pico?».

MicroPython
1from machine import Pin
2import time
3
4touch = Pin(15, Pin.IN)            # TTP223 I/O -> GP15 (fiziksel pin 20) / physical pin 20
5led = Pin("LED", Pin.OUT)          # dahili LED (Pico ve Pico W) / onboard LED (Pico and Pico W)
6last = 0
7
8def on_touch(pin):
9    global last
10    now = time.ticks_ms()
11    if time.ticks_diff(now, last) > 250:   # bir dokunuşu bir kez say / count each touch once
12        led.toggle()
13        last = now
14
15time.sleep_ms(600)                 # TTP223 açılış kalibrasyonu / TTP223 power-on calibration
16touch.irq(trigger=Pin.IRQ_RISING, handler=on_touch)
17
18while True:
19    print("Dokunma / Touch:", touch.value(), " LED:", led.value())
20    time.sleep(1)

В актуальных версиях MicroPython имя Pin("LED") выбирает встроенный светодиод и на Pico, и на Pico W. Если перемычка B запаяна и модуль переведён в режим с фиксацией, прерывание даже не нужно: достаточно написать в цикле led.value(touch.value()), ведь состояние «вкл/выкл» теперь хранит сама микросхема. Хотя выход микросхемы не дребезжит, блокировка на 250 мс в коде не даёт коротким импульсам помех на длинных проводах переключить светодиод дважды.

Идеи проектов с TTP223

  • Сенсорный ночник: добавь фоторезистор (LDR), чтобы лампа реагировала на касание только в темноте.
  • Лампа, меняющая цвет: меняй цвет кольца WS2812B NeoPixel при каждом касании, а яркость регулируй длинным касанием.
  • Скрытый кодовый замок: размести четыре TTP223 за акриловой панелью; если коснуться клавиш в правильном порядке, сервопривод открывает замок.
  • Дверной звонок без отверстий: приклей датчик внутри пластиковой коробки; от касания DFPlayer Mini проигрывает мелодию звонка.
  • Сенсорный выключатель розетки: включай и выключай настольную лампу или вентилятор через модуль реле.
  • Пульт на батарейках: держи ESP32 в глубоком сне; при касании TTP223 она просыпается и отправляет команду по ESP-NOW.

Частые ошибки и как их исправить

СимптомВероятная причинаРешение
Нет реакции на касаниеПри включении на площадке лежал палец, или панель слишком толстаяУбери руку и перезапусти питание; возьми панель потоньше или площадку побольше
Срабатывает сам по себеСлишком высокая чувствительность, металл рядом с площадкой, шумный блок питанияДобавь 5–20 pF между площадкой и GND, убери металл подальше, поставь 100 nF между VCC и GND
Всё время ведёт себя так, будто его касаютсяПанель или крышку установили при включённом питанииСначала монтаж, потом питание
Счётчик растёт несколько раз за одно касаниеКод читает уровень, а не фронтХрани предыдущее состояние и считай только на переходе LOW→HIGH
Первое касание определяется с задержкойМикросхема в режиме низкого энергопотребления (~220 мс)Это нормально; следующие касания определяются быстрее
Пин ESP32 или Pico повреждёнМодуль питался от 5 VВсегда питай модуль от пина 3V3
В режиме с фиксацией лампа при включении сразу горитПеремычка A выбирает активный LOWВыбери состояние при включении перемычкой A или инвертируй логику в коде
Сенсорные датчики чувствительны к пульсациям питания, и производитель микросхемы отдельно подчёркивает, что питание должно быть стабильным. Шум создают дешёвые зарядки для телефонов, моторы и реле. Керамический конденсатор на 100 nF, припаянный между пинами VCC и GND модуля, провода моторов подальше от датчика и короткий провод к площадке устраняют большинство ложных срабатываний.

TTP223 — самый простой способ добавить в проекты современный сенсорный интерфейс с помощью очень дешёвого модуля: он заменяет механическую кнопку, работает за панелями без отверстий и ладит с любым микроконтроллером. Сначала попробуй прочитать его с заводскими настройками, потом отработай обнаружение фронта и логику длинного касания на примерах с лампой и пианино. В приложении BlueGrays есть пошаговые схемы и код для светодиода с кнопкой, светодиода с переключением вкл/выкл, проектов с кнопкой на ESP32 и Pico и управления сетевой лампой, и все их можно сделать сенсорными, поставив TTP223 вместо кнопки.

Частые вопросы

От какого напряжения работает TTP223?

Микросхема TTP223 работает от 2,0 до 5,5 V; на Arduino Uno её питают от 5 V, а на ESP32 или Raspberry Pi Pico — от 3,3 V. Уровень HIGH на выходе равен напряжению питания, поэтому всегда питай модуль напряжением логики той платы, к которой он подключён.

Зачем на TTP223 площадки A и B?

A и B — перемычки настройки, которые замыкаются припоем. На большинстве модулей перемычка A делает выход активным LOW (LOW при касании), а перемычка B переводит датчик в режим с фиксацией, где выход меняется при каждом касании и остаётся в новом состоянии. Когда обе разомкнуты, модуль работает без фиксации и выдаёт HIGH, пока длится касание.

Работает ли TTP223 через стекло или пластик?

Да, он работает через пластик, акрил, стекло, дерево и бумагу, если в них нет металла. На практике панели толщиной 1–3 мм обычно не создают проблем; для более толстых нужна площадка, увеличенная медной лентой. Не забудь приклеить модуль к панели без воздушного зазора.

Почему мой TTP223 срабатывает сам по себе?

Чаще всего причина в слишком высокой чувствительности, металлических деталях рядом с площадкой, длинных проводах к электроду и шумном источнике питания. Конденсатор на 5–20 pF между площадкой и GND снижает чувствительность. Конденсатор на 100 nF между VCC и GND и качественный блок питания тоже обычно решают проблему.

Как включать сетевую лампу с помощью TTP223?

Выход TTP223 отдаёт всего несколько миллиампер, поэтому напрямую управлять лампой или катушкой реле он не может. Подключи датчик к Arduino, а Arduino пусть управляет модулем реле; реле умеет только включать и выключать, но не приглушать. Сетевую проводку держи в закрытом корпусе и никогда не клей площадку на поверхность, связанную с сетевым напряжением.

Нужен ли TTP223 для сенсорного ввода на ESP32?

Нет: 10 сенсорных пинов классической ESP32 можно использовать напрямую через touchRead(). Но порог тогда приходится задавать программно, а на длинных проводах показания уплывают. Если нужен готовый стабильный цифровой выход или используется плата без сенсорных пинов, например ESP32-C3, TTP223 практичнее.

Все проекты
Включение и выключение светодиода кнопкой (вкл/выкл)
#10Новичок

Включение и выключение светодиода кнопкой (вкл/выкл)

Нажми кнопку один раз — свет загорится, нажми ещё раз — погаснет, совсем как выключатель в твоей комнате. Arduino замечает каждое нажатие и переводит светодиод в противоположное состояние, выжидая кор

4.8(100)
167
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

4.8(113)
229
Управление светодиодом кнопкой на ESP32 (переключение)
#105Новичок

Управление светодиодом кнопкой на ESP32 (переключение)

При каждом нажатии кнопки состояние светодиода меняется: если горел — гаснет, если не горел — загорается. Классический шаблон переключения. Антидребезг убирает механический шум кнопки, чтобы одно нажатие давало одно переключение.

4.6(39)
57
Переключение светодиода кнопкой на Pico
#156Новичок

Переключение светодиода кнопкой на Pico

Кнопка + светодиод — следующий уровень! В отличие от базового проекта с кнопкой, держать кнопку не нужно. Нажми и отпусти → светодиод горит. Нажми и отпусти ещё раз → гаснет (переключение). Схема та же (светодиод GP14, кнопка GP2), но код сильно отличается. Изучи определение фронта (ловлю момента спада 1→0), отслеживание состояния и антидребезг (фильтр механического дребезга). Метод led.toggle() в MicroPython меняет состояние одной строкой.

0.0(0)
9
Включение лампы 220V кнопкой (вкл/выкл)
#20Продвинутый
Premium

Включение лампы 220V кнопкой (вкл/выкл)

Хочешь включать и выключать настоящую бытовую лампу крошечной кнопкой? При каждом нажатии кнопки Arduino переключает реле, и лампа загорается; нажмёшь снова — гаснет. Реле — посредник, который позволя

4.5(33)
44
Простое пианино на зуммере и кнопках
#26Продвинутый
Premium

Простое пианино на зуммере и кнопках

Собери своё маленькое пианино из восьми кнопок. Каждая кнопка — одна нота, от низкой к высокой: до, ре, ми, фа, соль, ля, си и верхнее до. Нота звучит через зуммер, пока ты держишь кнопку, и замолкает

4.9(66)
88
Плавное затухание светодиода с PWM на ESP32
#110Новичок

Плавное затухание светодиода с PWM на ESP32

Плавное изменение яркости светодиода от 0 до максимума и от максимума до 0. PWM управляется через analogWrite(), как в Arduino, — тот же синтаксис без проблем работает в ESP32 Arduino Core 3.0+. Достаточно определения пина, pinMode и analogWrite.

4.8(36)
54
Умное освещение лестницы и коридора
#82Средний
Premium

Умное освещение лестницы и коридора

Ступи на лестницу или в коридор, и свет загорается ступенька за ступенькой в ту сторону, куда ты идёшь. На каждом конце стоит датчик расстояния; мимо какого ни пройдёшь, восемь светодиодов загораются

5.0(35)
51