||

Zbuduj swój własny zamek RFID

Zbuduj swój własny zamek RFID

W tym artykule pokażemy Ci krok po kroku, jak zbudować elektroniczny zamek otwierany za pomocą karty RFID, wykorzystując mikrokontroler ESP32-C3 i czytnik RC522. Projekt ten pozwoli Ci unowocześnić dostęp do np. szafki lub pokoju zamiast tradycyjnego klucza będziesz używać zbliżeniowej karty lub breloka RFID. Dzięki wbudowanemu modułowi Wi-Fi/Bluetooth w ESP32-C3 uzyskasz również potencjał do dalszej rozbudowy np. zdalne sterowanie zamkiem w przyszłości. To świetny projekt dla każdego fana elektroniki i majsterkowania, który chce stworzyć własny inteligentny zamek na kartę!

Poniższy artyukł również może cię zainteresować:
GIF przedstawiający działanie zamka (zwróć uwagę na orczyk serwa)

Założenia projektu i jego funkcjonalność

Nasz zamek RFID będzie posiadał następujące kluczowe cechy i funkcje:

Autoryzacja RFID i bezpieczeństwo – zamek otworzy się tylko po przyłożeniu uprawnionej karty lub breloka RFID identyfikator zapisany w białej liście w programie. Dzięki temu dostęp uzyskają wyłącznie osoby posiadające zaprogramowane tagi.

Sterowanie serwomechanizmem – mechanizm ryglujący jest obsługiwany przez mały serwomechanizm SG90, który obraca się o zadaną wartość 90° odblokowując lub blokując zamek. Serwo to mimo niewielkich rozmiarów potrafi wygenerować moment rzędu 1,8 kg/cm, co w zupełności wystarcza do przesunięcia małego rygla.

Wykorzystanie popularnych podzespołów – projekt jest niedrogi i bazuje na łatwo dostępnych komponentach: popularnym module RFID RC522 13,56 MHz oraz mikrokontrolerze ESP32-C3 w miniaturowej formie, a także zwykłym mikro-serwie modelarskim. Moduł RC522 jest zasilany napięciem 3,3 V i komunikuje się przez SPI, zaś ESP32-C3 zapewnia zarówno obsługę tego interfejsu, jak i łączność bezprzewodową Wi-Fi/BLE w razie potrzeby.

Łatwa konfiguracja uprawnień – listę akceptowanych kart RFID można w prosty sposób edytować w kodzie wpisując ich UID w tablicy. Samo sprawdzenie karty odbywa się błyskawicznie, po zbliżeniu tagu zamek reaguje praktycznie od razu. Dodatkowo, program wypisuje na serial monitorze UID każdej wykrytej karty, co ułatwia dodawanie nowych kart do systemu.

Możliwość rozbudowy – na bazie naszego projektu można dodawać dalsze usprawnienia: od sygnalizacji stanu zamka LED, buzzer po integrację z siecią Wi-Fi np. do powiadomień lub sterowania zdalnego czy nawet podłączenie do systemu inteligentnego domu. Kilka pomysłów rozbudowy omawiamy na końcu artykułu.

Lista potrzebnych elementów

Do zbudowania naszego zamka RFID będziemy potrzebować poniższych komponentów elektronicznych. Poniżej przedstawiamy pełną listę elementów użytych w projekcie, wraz z krótkim opisem każdego z nich:

Płytka ESP32-C3 Super Mini – minipłytka deweloperska z mikrokontrolerem ESP32-C3 32-bit RISC-V obsługującym Wi-Fi i Bluetooth. Stanowi ona serce naszego układu, to na niej uruchomimy program kontrolujący pracę czytnika RFID oraz serwa. Mimo niewielkich rozmiarów ok. 24×18 mm moduł ten oferuje bogaty zestaw pinów GPIO 11 cyfrowych wyprowadzeń PWM oraz 4 analogowe ADC i obsługuje interfejsy UART, I²C, SPI itp.. Płytka posiada także wbudowaną antenę zewnętrzną dla lepszego zasięgu Wi-Fi oraz złącze USB-C do programowania/zasilania.

Czytnik RFID RC522 – popularny moduł do odczytu/zapisu tagów RFID pracujący na częstotliwości 13,56 MHz w standardzie MIFARE. W zestawie znajduje się płytka czytnika oraz pasująca karta i brelok z unikalnymi identyfikatorami. Moduł komunikuje się z ESP32 przez interfejs SPI i jest zasilany napięciem 3,3 V. Zasięg odczytu wynosi około 2 cm dla karty i ~1 cm dla breloka, tag należy zbliżyć bezpośrednio do anteny modułu. RC522 idealnie nadaje się do systemów kontroli dostępu i jest tani oraz łatwy w użyciu.

Serwomechanizm SG90 9g – mikro-serwo modelarskie o wadze zaledwie 9 g, pełniące rolę elementu wykonawczego zamka. Sterujemy nim za pomocą sygnału PWM z ESP32. Serwo SG90 potrafi obracać się w zakresie ~180° i generuje moment do ok. 1,8 kg/cm przy zasilaniu 5 V. W projekcie jedno ustawienie serwa będzie odpowiadało pozycji zamknięte rygiel wsunięty, a drugie otwarte rygiel odsunięty. W zestawie z serwem otrzymujemy komplet plastikowych orczyków ramion do montażu na wale oraz śrubki mocujące. Zasilanie serwa wymaga napięcia około 5 V można skorzystać z pinu 5V na płytce ESP32, podawanego z USB.

Dodatkowe akcesoria: przewody połączeniowe do połączenia modułów, najlepiej męsko – męskie, jeśli używamy płytek stykowych. Przyda się również komputer z zainstalowanym Arduino IDE do wgrania programu.

Przygotowaliśmy gotowy koszyk, aby maksymalnie ułatwić Wam zakupy i kompletowanie wszystkich potrzebnych elementów.

Schemat połączeń

Poniżej przedstawiono sposób podłączenia poszczególnych komponentów do naszej płytki ESP32-C3. Należy zachować ostrożność i zgodność ze schematem, prawidłowe połączenia są kluczowe dla działania układu.

Czytnik RFID RC522 → ESP32-C3

Moduł RC522 wykorzystuje interfejs SPI, dlatego większość połączeń to standardowe linie SPI MOSI, MISO, SCK oraz dodatkowy pin SS chip select i RST reset. Zasilanie modułu musi być podłączone do 3,3 V wyższe napięcie 5 V może uszkodzić układ. Poniższa tabela pokazuje szczegóły podłączenia:

Pin RC522Pin ESP32-C3Uwagi
3.3V3.3VZasilanie modułu RFID tylko 3,3 V!
GNDGNDWspólna masa
RSTGPIO 2Reset czytnika
SDA (NSS, SS)GPIO 7SS (Slave Select) – wybór układu RFID
MOSIGPIO 6MOSI Master Out Slave In – dane do czytnika
MISOGPIO 5MISO Master In Slave Out – dane z czytnika
SCKGPIO 4SCK – zegar interfejsu SPI
IRQ(niepodłączony)Pin przerwania nie jest wykorzystywany w projekcie

Tip: Piny GPIO 4,5,6,7 na ESP32-C3 odpowiadają domyślnie sprzętowemu kontrolerowi SPI na tej płytce, dlatego skorzystaliśmy właśnie z nich. Linia SS jest podłączona do GPIO 7 zgodnie z definicją SS_PIN w kodzie, a RST do GPIO 2 definicja RST_PIN. Przed podłączeniem upewnij się, że moduł RC522 i ESP32-C3 mają wspólną masę wszystkie GND łączymy razem.

Serwomechanizm SG90 → ESP32-C3

Połączenie serwa jest bardzo proste: trzy przewody – zasilanie, masa i sygnał sterujący. Serwo SG90 ma zwykle przewód czerwony Vcc, brązowy GND i pomarańczowy sygnał. W naszym projekcie zasilimy serwo z pinu 5V na płytce ESP32 pin ten jest bezpośrednio zasilany z portu USB, natomiast sygnał sterujący podłączymy do wybranego GPIO w kodzie jest to pin 10. Poniżej szczegóły:

Przewód serwaPin ESP32-C3Uwagi
Czerwony Vcc5VZasilanie serwa
Brązowy GNDGNDMasa – wspólna z masą ESP32 i RC522
Pomarańczowy PWMGPIO 10Sygnał sterujący serwa PWM. Dowolny pin cyfrowy ESP32-C3 z PWM


Ponieważ ESP32-C3 jest zasilany z USB 5 V, możemy korzystać z wyprowadzenia 5 V na jego złączu do zasilania modułów wymagających 5 V tu serwo. Pamiętaj, by nie podłączać pinu 5 V do modułu RC522, ten wymaga niższego napięcia 3,3 V!

Po wykonaniu wszystkich powyższych połączeń sprzętowych możemy przejść do wgrania programu i sprawdzenia działania zamka.

Oprogramowanie

Do zaprogramowania mikrokontrolera ESP32-C3 wykorzystamy Arduino IDE. Kod źródłowy zamieszczamy poniżej

Dodanie płytek ESP32 do Arduino IDE i instalacja bibliotek

Do zaprogramowania ESP32-C3 użyjemy Arduino IDE, ale zanim wgrasz kod, trzeba dodać obsługę płytek Espressif do Menedżera Płytek oraz zainstalować wymagane biblioteki. Najpierw uruchom Arduino IDE i wejdź w Plik → Preferencje. W polu Dodatkowe adresy URL do Menedżera Płytek wklej adres: https://espressif.github.io/arduino-esp32/package_esp32_index.json, a jeśli masz tam już jakieś wpisy, dopisz go po przecinku lub w nowej linii.

Następnie kliknij OK i przejdź do Narzędzia → Płytka → Menedżer płytek. W wyszukiwarce wpisz „esp32” i z listy wybierz pakiet ESP32 by Espressif Systems, po czym kliknij Zainstaluj. Po zakończeniu instalacji możesz już wybrać właściwą płytkę: przejdź do Narzędzia → Płytka i wybierz model odpowiadający Twojemu modułowi, najczęściej będzie to jedna z pozycji typu ESP32C3 Dev Module.

Kiedy płytka jest już dodana, podepnij ESP32-C3 do komputera kablem USB i wybierz port: Narzędzia → Port i wskaż nowy port, który się pojawił na Windows zwykle jako COM, na macOS/Linux jako /dev/…. Jeśli po podłączeniu port się nie pokazuje, to najczęściej oznacza brak sterownika do konwertera USB-UART np. CH340/CH9102/CP210x lub problem z kablem część kabli jest tylko „do ładowania” i nie ma linii danych, więc w takiej sytuacji warto podmienić kabel na pewny „data” i spróbować ponownie.

Kolejny krok to instalacja bibliotek. Wejdź w Szkic → Dołącz bibliotekę → Zarządzaj bibliotekami i w oknie Menedżera Bibliotek wyszukaj oraz zainstaluj kolejno: MFRC522 biblioteka do obsługi czytnika RFID RC522

oraz ESP32Servo biblioteka do obsługi serwomechanizmów na ESP32.

Po instalacji bibliotek najlepiej zamknąć i ponownie uruchomić Arduino IDE, żeby środowisko odświeżyło listę zależności. Dopiero wtedy wklej kod programu, a przed pierwszym wgraniem dostosuj listę autoryzowanych UID kart do tych, które faktycznie chcesz dopuścić za chwilę pokażemy jak najprościej odczytać UID z monitora portu szeregowego i wkleić go do kodu.

Na koniec ustaw parametry kompilacji i uploadu w Narzędzia. Zwykle zostawiamy domyślne ustawienia, a kluczowe są: wybrana płytka ESP32C3 Dev Module, poprawny port oraz prędkość wgrywania. Teraz możesz kliknąć Wgraj, a po wgraniu otworzyć Narzędzia → Monitor portu szeregowego i ustawić prędkość zgodną z kodem 115200, żeby zobaczyć komunikaty diagnostyczne i przetestować działanie czytnika oraz serwa.

Kilka wyjaśnień do powyższego programu:

  • Na początku definiujemy piny zgodnie z naszym schematem: SS_PIN to GPIO7 a RST_PIN to GPIO2 . Zmienna SERVO_PIN ustawiona jest na GPIO10. Upewnij się, że pokrywa się to z Twoimi połączeniami, jeśli używasz innych pinów, zaktualizuj definicje.
  • W tablicach allowedUids oraz allowedUidSizes wpisujemy UID dozwolonych kart. Domyślnie wstawiono dwie przykładowe wartości 4-bajtowe. Przed uruchomieniem projektu powinieneś tu wpisać UID swojej karty/breloka, którą chcesz mieć jako klucz. UID podajemy w postaci heksadecymalnej tak jak wyświetla go Serial Monitor. Jeśli Twoja karta ma UID 7-bajtowy lub 10-bajtowy, możesz dodać taki do tablicy pamiętaj wtedy, by ustawić właściwą długość w odpowiadającym mu elemencie tablicy allowedUidSizes. Liczbę kart w białej liście określa allowedCount. Jak odczytać UID swojej karty? Najprościej uruchom powyższy program bez dodawania żadnych UID lub zostaw przykładowe. Otwórz monitor portu szeregowego 115200 baud i przyłóż kartę do czytnika RC522. W konsoli zobaczysz komunikat UID: ... z ciągiem znaków hex – to właśnie UID Twojej karty. Skopiuj te wartości i wprowadź do tablicy allowedUids bajt po bajcie, poprzedzając 0x. Następnie ustaw odpowiednią długość UID w tablicy allowedUidSizes np. 4, 7 lub 10 i wgraj ponownie program. Teraz Twoja karta powinna zostać rozpoznana jako dozwolona.
  • W setup() inicjalizujemy komunikację Serial do debugowania, konfigurujemy serwo (s.attach(...) ustawia pin i zakres impulsów – tu 500-2400 µs – oraz s.write(0) ustawia początkową pozycję na 0° czyli zamknięte. Następnie uruchamiamy magistralę SPI SPI.begin(4,5,6,7) podając numery pinów SCK, MISO, MOSI, SS zgodnie z opisem ESP32-C3 wymaga jawnego podania pinów przy inicjalizacji SPI. Funkcja rfid.PCD_Init() uruchamia czytnik RC522. Na koniec wypisujemy komunikat „Gotowe. Przyłóż kartę…”.
  • W loop() odbywa się główna pętla sprawdzająca karty. Najpierw PICC_IsNewCardPresent() oraz PICC_ReadCardSerial() wykrywają i odczytują nową kartę. Jeśli żadnej nie ma w zasięgu, funkcja loop szybko się kończy return. Gdy wykryto kartę, odczytujemy aktualny czas now = millis() i porównujemy z poprzednim odczytem lastTrigger. Zaimplementowano prosty mechanizm debounce/cooldown – czeka 1,5 sekundy cooldownMs = 1500 zanim pozwoli na obsłużenie kolejnej karty. Zapobiega to np. wielokrotnemu przełączaniu zamka, gdy karta zostanie przez chwilę na czytniku. Jeśli czas był zbyt krótki, kończymy obsługę bieżącego odczytu.
  • Następnie program wypisuje odczytany UID karty na serial pętla for formatowana tak, by każdy bajt był dwucyfrowy hex. Zaraz potem wywołujemy naszą funkcję isAllowedUid(), która porównuje UID karty z listą dozwolonych. Jeśli nie znajdzie zgodności, wypisujemy komunikat "BRAK DOSTEPU" i kończymy wraz z odesłaniem komendy halt do karty – PICC_HaltA() – i wyłączeniem szyfrowania transmisji PCD_StopCrypto1().
  • Jeżeli karta jest autoryzowana funkcja zwróci true, wtedy następuje właściwa akcja: zmienna isOpen przechowuje stan zamka: otwarty/zamknięty zostaje zanegowana !isOpen, czyli przełączamy stan. Na tej podstawie wysyłamy odpowiedni sygnał do serwa: s.write(isOpen ? 90 : 0. Gdy isOpen zmieni się z false na true, serwo zostanie ustawione na 90°, co w założeniu odsuwa rygiel otwieramy zamek. Gdy ponownie przyłożymy tę samą lub inną dozwoloną kartę, isOpen zmieni się na false i serwo wróci na 0° zamyka zamek. Taki toggle sprawia, że każda autoryzowana karta działa jak klucz, może zarówno otwierać, jak i zamykać. W Serial monitorze dla ułatwienia wypisujemy też tekst "OTWARTE" lub "ZAMKNIETE" przy każdej zmianie stanu, po czym ponownie wysyłamy komendy halt/stop do czytnika RFID zwalniając go do kolejnego odczytu.

Uruchomienie i test: Po wgraniu skonfigurowanego programu czas na testy. Podłącz moduł ESP32-C3 do zasilania np. przez USB do komputera lub powerbanka. Serwo powinno na starcie ustawić się w pozycji zamkniętej (0°). Zbliż teraz autoryzowaną kartę lub brelok RFID do czytnika RC522. Jeśli UID tagu znajduje się na liście dozwolonych, w ułamku sekundy serwo powinno się obrócić – tak jakby przekręcić klucz, i przełączyć zamek do stanu otwartego. W serial monitorze zobaczysz komunikaty potwierdzające UID i słowo „OTWARTE”. Gdy ponownie zbliżysz ten sam lub inny dozwolony tag, serwo powróci do pozycji zamknięte i w konsoli pojawi się „ZAMKNIETE”. Jeśli natomiast użyjesz nieznanej karty, zamek pozostanie zamknięty, a na porcie szeregowym pojawi się komunikat „BRAK DOSTEPU”. Możesz dowolnie rozszerzać listę dozwolonych UID, po prostu dopisz kolejne wpisy do tablicy w kodzie i wgraj firmware ponownie.

Gratulacje! Stworzyłeś prosty, ale działający zamek na kartę RFID. Możesz teraz zamontować cały układ tam, gdzie chcesz kontrolować dostęp, na przykład przy drzwiczkach obudowy, szufladzie czy furtce. Ramię serwa połącz z mechanicznym ryglem możesz wykorzystać jeden z dołączonych plastikowych orczyków serwa i np. kawałek drutu jako rygiel. Gdy serwo się obróci, powinno wsunąć lub wysunąć rygiel, realizując blokadę. Pamiętaj o zapewnieniu stałego zasilania dla ESP32 np. zasilacz USB lub akumulator jeśli to urządzenie przenośne.

Propozycje rozbudowy projektu

Nasz podstawowy zamek RFID spełnia swoje zadanie, ale możliwości jego rozbudowy są niemal nieograniczone. Oto kilka pomysłów, które możesz wdrożyć, aby uczynić projekt jeszcze ciekawszym i bardziej funkcjonalnym:

  • Sygnalizacja dostępu: Dodaj sygnalizację dźwiękową np. buzzer lub świetlną dioda LED zielona/czerwona informującą o wyniku odczytu karty. Buzzer może emitować krótki ton przy udanej autoryzacji lub alarm przy próbie użycia niedozwolonej karty, a diody LED mogą sygnalizować stan zamka otwarty/zamknięty lub dostęp zabroniony.
  • Automatyczne zamykanie: Obecny program przełącza stan zamka przy każdym przyłożeniu karty. W zastosowaniach drzwiowych można rozważyć inny tryb np. otwieranie na kilka sekund po wykryciu karty, a następnie automatyczne zamknięcie. Wymaga to drobnej modyfikacji kodu: zamiast toggle można ustawić serwo na otwarcie, uruchomić delay() lub odmierzać czas za pomocą millis() i potem z powrotem zamknąć serwo.
  • Trwalszy mechanizm ryglujący: Serwo SG90 świetnie sprawdza się w prototypie, ale do faktycznego zamka drzwi można zastosować mocniejszy mechanizm. Przykładem jest użycie elektrozaczepu lub solenoidu zamek elektromagnetyczny sterowanego z ESP32 poprzez tranzystor lub przekaźnik. Można też użyć większego serwa lub serwa z przekładnią metalową dla większej siły. Wtedy nasz układ RFID służyłby tylko do podawania sygnału do otwarcia/zamknięcia takiego elektrozamka.
  • Rozszerzona lista uprawnień: Obecnie lista dozwolonych kart jest zapisana na sztywno w programie. Możesz usprawnić projekt, implementując dynamiczne dodawanie/usuwanie kart – np. poprzez zapis UID w pamięci EEPROM/Flash ESP32 lub na karcie SD. Można stworzyć tryb „learn”, w którym nowa karta zostaje dodana do bazy po przyciśnięciu przycisku administracyjnego. Dzięki temu administracja zamkiem nie będzie wymagała każdorazowej zmiany kodu.
  • Łączność i powiadomienia: Wykorzystaj potencjał Wi-Fi w ESP32! Możesz rozbudować kod o funkcje sieciowe np. wysyłanie powiadomień na telefon lub serwer za każdym użyciem zamka, prowadzenie logów kto i kiedy otwierał czy zdalne sterowanie. Przykładowo, można zaimplementować prosty web-serwer na ESP32, który pozwoli z poziomu przeglądarki sprawdzić stan zamka lub wymusić otwarcie/zamknięcie. Integracja z usługami chmurowymi lub aplikacją Blynk to kolejne ciekawe kierunki.
  • Integracja z inteligentnym domem: Jeśli posiadasz system typu Home Assistant lub podobny, nic nie stoi na przeszkodzie, by Twój zamek RFID komunikował się z nim np. za pośrednictwem MQTT lub REST API. Możesz wtedy kontrolować zamek z poziomu jednej wspólnej aplikacji smart home, tworzyć automatyzacje np. odblokowanie o konkretnej godzinie czy łączyć informacje z czytnika RFID z innymi czujnikami np. detekcją ruchu przy drzwiach.
  • Dodatkowe metody uwierzytelniania: RFID to jedno, ale czemu by nie dodać klawiatury numerycznej do wpisywania kodu PIN jako alternatywy lub czytnika linii papilarnych? ESP32 ma wystarczająco mocy, by obsłużyć wieloczynnikowe zabezpieczenia. Dodając moduł klawiatury 4×4 można pozwolić użytkownikowi na otwarcie zamka kodem, a czytnik linii papilarnych umożliwi dostęp na odcisk palca to wszystko można połączyć z już istniejącym systemem RFID dla zwiększenia bezpieczeństwa.

Podsumowanie

Mamy nadzieję, że ten poradnik był pomocny i zainspirował Cię do własnych eksperymentów. Zbudowany przez Ciebie zamek na kartę RFID to nie tylko praktyczne urządzenie, ale też świetna demonstracja możliwości platformy ESP32-C3 i technologii RFID. Powodzenia w dalszym rozwijaniu projektu niech Twój inteligentny zamek służy niezawodnie, a drzwi otwierają się przed Tobą dosłownie za machnięciem karty! 🔐🏷️


Prezentowaną w artykule elektronikę znajdziesz oczywiście w naszym sklepie 👉 sklep.msalamon.pl 👈Zapraszamy również na nasze social media, gdzie na bieżąco informujemy o nowych produktach oraz o najciekawszych promocjach 😎👇


Podobne wpisy

Dodaj komentarz

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