
Интернет-магазин «Неглупый Дом»
Сенсорная кнопка TTP223 без единой механической детали открывает замок, если её коснуться заданное секретное число раз за короткий промежуток времени.
TTP223 — емкостный сенсорный модуль: вместо механического контакта он отслеживает изменение электрической ёмкости, возникающее от прикосновения пальца, и выдаёт на выходе чистый цифровой HIGH/LOW без дребезга контактов, свойственного обычным кнопкам. Это и сам "секрет" замка — снаружи не видно ни одной механической детали, которую можно было бы взломать отмычкой.
Логика кода считает короткие касания в пределах заданного временного окна (`tapWindow`): если за это окно насчиталось ровно `secretTaps` касаний — реле открывает замок. Если окно истекло, а счётчик касаний не совпал — счётчик просто сбрасывается, и пользователь может попробовать снова.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
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: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 141 ₽ 127 ₽ (экономия 14 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.