🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

👆 Проект: сенсорный замок по количеству касаний на TTP223

Сенсорная кнопка TTP223 и модуль реле

Сенсорная кнопка TTP223 без механики открывает замок, если её коснуться заданное число раз за короткое время.

Как это работает

TTP223 — емкостный сенсорный модуль: вместо механического контакта отслеживает изменение ёмкости от прикосновения пальца и выдаёт чистый HIGH/LOW без дребезга. Снаружи не видно механики, которую можно вскрыть отмычкой.

Код считает короткие касания в пределах временного окна (`tapWindow`): если их насчиталось ровно `secretTaps` — реле открывает замок, иначе счётчик сбрасывается.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите TTP223: сигнал → D2, VCC → 5V, GND → GND.
  2. Подключите модуль реле KY-019: сигнал → D7, VCC → 5V, GND → GND.
  3. К реле подключите замок через силовые контакты (NO/NC/COM), не напрямую к Arduino.
  4. Подберите `secretTaps` и `tapWindow` под себя перед прошивкой.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

const int touchPin = 2;
const int relayPin = 7;

const int secretTaps = 3;             // секретное число касаний
const unsigned long tapWindow = 2000; // окно времени на весь код, мс

int tapCount = 0;
unsigned long firstTapTime = 0;
bool lastState = LOW;

void setup() {
  Serial.begin(9600);
  pinMode(touchPin, INPUT);
  pinMode(relayPin, OUTPUT);
}

void loop() {
  bool state = digitalRead(touchPin);

  if (state == HIGH && lastState == LOW) {
    if (tapCount == 0) firstTapTime = millis();
    tapCount++;
    Serial.print("Касание #");
    Serial.println(tapCount);
  }
  lastState = state;

  if (tapCount > 0 && millis() - firstTapTime > tapWindow) {
    if (tapCount == secretTaps) {
      Serial.println("Код верный, открываю");
      digitalWrite(relayPin, HIGH);
      delay(3000);
      digitalWrite(relayPin, LOW);
    } else {
      Serial.println("Код неверный");
    }
    tapCount = 0;
  }

  delay(10);
}
                

Секретное число касаний (`secretTaps`) и окно (`tapWindow`) легко поменять — чем больше касаний, тем сложнее подобрать код случайно.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🚧 ИК-барьер на связке KY-005 и K…🔢 счётчик проходов на фотопрерыв… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 141 ₽ 127 ₽ (экономия 14 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA