Zamek na kod z ekranem dotykowym i AI

🔧 Co zbudujesz?

W tym projekcie zbudujesz elektroniczny zamek na kod, sterowany przez ekran dotykowy. Dzięki integracji z AI możesz dodać rozpoznawanie użytkownika, autoblokadę przy błędnym kodzie i historię logowań.


🧰 Komponenty

  • ESP32
  • Ekran dotykowy TFT 2.4″ (SPI, np. ILI9341 + XPT2046)
  • Przekaźnik 5V lub moduł przekaźnika
  • Zamek elektromagnetyczny lub inne urządzenie do otwierania
  • Zasilacz 5V (lub powerbank do testów)
  • Przewody połączeniowe, płytka stykowa
  • Arduino IDE
  • Biblioteki: Adafruit_GFX, Adafruit_ILI9341, XPT2046_Touchscreen

📊 Schemat połączeń

Ekran TFT:

  • VCC → 3.3V
  • GND → GND
  • CS → D15
  • RESET → D4
  • DC/RS → D2
  • MOSI → D23
  • SCK → D18
  • LED → 3.3V

Dotyk (XPT2046):

  • T_CS → D5
  • T_IRQ → D21
  • DIN/MOSI → D23
  • DOUT/MISO → D19
  • CLK → D18
  • VCC/GND jak wyżej

Przekaźnik:

  • IN → D25
  • VCC → 5V
  • GND → GND

💻 Kod programu

Przykładowy kod: weryfikacja 4-cyfrowego kodu PIN (np. 1234):

#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <XPT2046_Touchscreen.h>

#define TFT_CS 15
#define TFT_DC 2
#define TFT_RST 4
#define TOUCH_CS 5
#define TOUCH_IRQ 21
#define RELAY_PIN 25

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
XPT2046_Touchscreen ts(TOUCH_CS, TOUCH_IRQ);

String pinCode = "";
const String correctCode = "1234";

void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);

tft.begin();
ts.begin();
ts.setRotation(1);
tft.setRotation(1);
drawKeypad();
}

void loop() {
if (ts.touched()) {
TS_Point p = ts.getPoint();
int x = map(p.x, 200, 3800, 0, 240);
int y = map(p.y, 200, 3800, 0, 320);

int col = x / 80;
int row = y / 80;
int key = row * 3 + col + 1;

if (row == 3 && col == 1) { // Enter
if (pinCode == correctCode) {
tft.fillScreen(ILI9341_GREEN);
tft.setCursor(20, 150);
tft.setTextSize(3);
tft.print("Kod OK!");
digitalWrite(RELAY_PIN, HIGH);
delay(5000);
digitalWrite(RELAY_PIN, LOW);
} else {
tft.fillScreen(ILI9341_RED);
tft.setCursor(20, 150);
tft.setTextSize(3);
tft.print("Błędny kod!");
delay(2000);
}
pinCode = "";
drawKeypad();
} else if (row < 3) {
pinCode += String(key);
tft.fillRect(0, 0, 240, 40, ILI9341_BLACK);
tft.setCursor(10, 10);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
tft.print("Kod: ");
tft.print(pinCode);
}
delay(300);
}
}

void drawKeypad() {
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(3);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int x = j * 80;
int y = i * 80 + 40;
tft.drawRect(x, y, 80, 80, ILI9341_WHITE);
tft.setCursor(x + 30, y + 25);
tft.print(i * 3 + j + 1);
}
}
// ENTER button
tft.drawRect(80, 280, 80, 40, ILI9341_WHITE);
tft.setCursor(95, 290);
tft.setTextSize(2);
tft.print("OK");
}

🧠 Rozszerzenie z AI

  • Rejestracja logów i analiza błędów kodu: przesyłanie danych do Firebase i analiza prób logowania.
  • Wykrycie nietypowego zachowania: np. 3 błędne próby = powiadomienie na telefon.
  • Zamiast kodu — rozpoznawanie twarzy lub głosu (ESP32-CAM lub Raspberry Pi z OpenCV i TensorFlow Lite).

🧰 Montaż krok po kroku

  1. Podłącz ekran TFT i dotyk zgodnie ze schematem do ESP32.
  2. Podłącz przekaźnik do wybranego pinu ESP.
  3. Wgraj kod przez Arduino IDE z wymaganymi bibliotekami.
  4. Umieść całość w obudowie np. z drukarki 3D.
  5. Przetestuj — wpisz kod 1234 i sprawdź, czy przekaźnik zaskakuje.

🌐 Możliwe rozszerzenia

  • Interfejs do zmiany kodu przez ekran
  • Historia użycia — kto i kiedy otworzył
  • Tryb czasowy (np. kod działa tylko między 8:00 a 18:00)
  • Integracja z systemem domowym (Home Assistant, MQTT)

✅ Podsumowanie

Ten zamek to nie tylko świetna zabawa z ekranem dotykowym, ale też bardzo praktyczne rozwiązanie DIY. Możesz z niego zrobić zamek do warsztatu, szafki z narzędziami lub… własnego sejfu!

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Przewijanie do góry