Сенсорна кнопка TTP223: лампа з дотиком і регулюванням яскравості
Модуль TTP223 за копійки перетворює будь-яку поверхню — дерево, пластик, скло — на кнопку. Налаштовуємо перемички A і B, відрізняємо короткий дотик від утримання і плавно міняємо яскравість світлодіода ШІМ.
Про проєкт
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 В — через реле або твердотільне реле.