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ć:

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 RC522 | Pin ESP32-C3 | Uwagi |
|---|---|---|
| 3.3V | 3.3V | Zasilanie modułu RFID tylko 3,3 V! |
| GND | GND | Wspólna masa |
| RST | GPIO 2 | Reset czytnika |
| SDA (NSS, SS) | GPIO 7 | SS (Slave Select) – wybór układu RFID |
| MOSI | GPIO 6 | MOSI Master Out Slave In – dane do czytnika |
| MISO | GPIO 5 | MISO Master In Slave Out – dane z czytnika |
| SCK | GPIO 4 | SCK – 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 serwa | Pin ESP32-C3 | Uwagi |
|---|---|---|
| Czerwony Vcc | 5V | Zasilanie serwa |
| Brązowy GND | GND | Masa – wspólna z masą ESP32 i RC522 |
| Pomarańczowy PWM | GPIO 10 | Sygnał 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_PINto GPIO7 aRST_PINto GPIO2 . ZmiennaSERVO_PINustawiona jest na GPIO10. Upewnij się, że pokrywa się to z Twoimi połączeniami, jeśli używasz innych pinów, zaktualizuj definicje. - W tablicach
allowedUidsorazallowedUidSizeswpisujemy 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 tablicyallowedUidSizes. Liczbę kart w białej liście określaallowedCount. 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 komunikatUID: ...z ciągiem znaków hex – to właśnie UID Twojej karty. Skopiuj te wartości i wprowadź do tablicyallowedUidsbajt po bajcie, poprzedzając0x. Następnie ustaw odpowiednią długość UID w tablicyallowedUidSizesnp. 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 – orazs.write(0)ustawia początkową pozycję na 0° czyli zamknięte. Następnie uruchamiamy magistralę SPISPI.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. Funkcjarfid.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()orazPICC_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 czasnow = millis()i porównujemy z poprzednim odczytemlastTrigger. Zaimplementowano prosty mechanizm debounce/cooldown – czeka 1,5 sekundycooldownMs = 1500zanim 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
forformatowana 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 transmisjiPCD_StopCrypto1(). - Jeżeli karta jest autoryzowana funkcja zwróci true, wtedy następuje właściwa akcja: zmienna
isOpenprzechowuje 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. GdyisOpenzmieni 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ę,isOpenzmieni 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
togglemoż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 😎👇


