← До всіх проєктів
Освітлення Початковий

Сенсорна кнопка TTP223: лампа з дотиком і регулюванням яскравості

Модуль TTP223 за копійки перетворює будь-яку поверхню — дерево, пластик, скло — на кнопку. Налаштовуємо перемички A і B, відрізняємо короткий дотик від утримання і плавно міняємо яскравість світлодіода ШІМ.

Складність
Початковий
Час
30 min
Категорія
Освітлення
Оновлено

Про проєкт

TTP223 — готова ємнісна кнопка: мікросхема сама калібрується, фільтрує шум і видає звичайний цифровий сигнал. На відміну від touch-виводів ESP32, її можна під'єднати до будь-якої плати, зокрема до Arduino і ESP32-C3, де touch немає зовсім. А ще вона працює крізь 2–3 мм пластику чи дерева — ідеально для вимикача, захованого в корпус.

Що потрібно

  • ESP32 DevKit (або Arduino)
  • Модуль TTP223
  • Світлодіод і резистор 220 Ом (або MOSFET і світлодіодна стрічка для справжньої лампи)

Схема

Модуль ESP32
VCC 3V3
I/O (SIG) GPIO4
GND GND
Світлодіод GPIO25 → 220 Ом → анод, катод → GND

Перемички A і B

На звороті модуля дві площадки, які можна замкнути краплею припою:

A B Поведінка виходу
розімкнена розімкнена HIGH, поки палець на сенсорі (за замовчуванням)
розімкнена замкнена кожен дотик перемикає HIGH ↔ LOW (тригер)
замкнена — те саме, але інвертовано (активний LOW)

Для лампи з регулюванням яскравості потрібен режим за замовчуванням: програма сама розрізняє короткий дотик і утримання. У симуляторі ці перемички — у властивостях модуля.

Код

// Сенсорна лампа: дотик — увімкнути/вимкнути, утримання — змінити яскравість
const int TOUCH_PIN = 4;    // I/O модуля TTP223 (режим за замовчуванням, активний HIGH)
const int LAMP_PIN = 25;

bool lampOn = false;
int brightness = 180;
int step = 5;
unsigned long touchedAt = 0;
bool wasTouched = false;
bool dimming = false;

void apply() {
  ledcWrite(LAMP_PIN, lampOn ? brightness : 0);
}

void setup() {
  Serial.begin(115200);
  pinMode(TOUCH_PIN, INPUT);
  ledcAttach(LAMP_PIN, 5000, 8);   // ШІМ 5 кГц, 8 біт
  apply();
}

void loop() {
  bool touched = digitalRead(TOUCH_PIN) == HIGH;
  unsigned long now = millis();
  if (touched && !wasTouched) {    // палець щойно торкнувся
    touchedAt = now;
    dimming = false;
  }
  if (touched && now - touchedAt > 600) {   // утримання: плавно міняємо яскравість
    dimming = true;
    lampOn = true;
    brightness += step;
    if (brightness >= 255 || brightness <= 10) step = -step;
    brightness = constrain(brightness, 10, 255);
    apply();
  }
  if (!touched && wasTouched && !dimming) {  // короткий дотик: перемикаємо
    lampOn = !lampOn;
    apply();
    Serial.println(lampOn ? "Лампа увімкнена" : "Лампа вимкнена");
  }
  wasTouched = touched;
  delay(20);
}

Натисніть на модуль у симуляторі мишею й відпустіть — лампа перемкнеться. Утримуйте довше за 0.6 с — яскравість почне «дихати» вгору і вниз; відпустіть на потрібному рівні.

Корисно знати

  • Калібрування при ввімкненні. Перші ~0.5 с після подачі живлення TTP223 запам'ятовує «порожній» рівень. Якщо в цей момент тримати палець на сенсорі, кнопка працюватиме навпаки або не працюватиме до перезапуску.
  • Товщина корпусу. Крізь 2–3 мм пластику модуль працює без змін. Для товщого матеріалу допаюють конденсатор 0–50 пФ на площадки Cs — більше ємності означає нижчу чутливість.
  • Потужне навантаження. Вихід TTP223 дає кілька міліампер; світлодіодну стрічку вмикайте через logic-level MOSFET (IRLZ44N, AO3400), а лампу 230 В — через реле або твердотільне реле.