🛒
0 товаров
0 руб.

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


👆 Проект: сенсорный замок по количеству касаний на 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 и KY-022🔢 счётчик проходов на фотопрерывателе KY-010 →

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

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

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

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

Корзина


Поиск



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