
Ako ste ikada bili na samouslužnoj kasi u supermarketu i vidjeli kako se, kada stavite sve svoje artikle na pladanj, oni automatski pojavljuju na ekranu , već ste vidjeli RFID u akciji. To nije magija ili tehnološka telepatija: to je sistem zasnovan na radiofrekvenciji koji vam omogućava identifikaciju objekata bez direktnog kontakta, a možete ga replicirati kod kuće pomoću jednostavnog Arduina i jeftinog čitača poput RC522.
U ovom vodiču ćete korak po korak naučiti kako koristiti Arduino i RC522 RFID čitač za čitanje i pisanje oznaka, razumjeti tačno šta je RFID, koje vrste sistema postoje, kako se napajaju pasivne kartice, kako je organizovana memorija MIFARE Classic 1K kartice i kako izgraditi projekte iz stvarnog svijeta poput sistema kontrole pristupa ili punjive tranzitne kartice. Udobno se smjestite, jer ćemo detaljno obraditi temu, ali na jasan i pristupačan način.
Šta je RFID tehnologija i kako funkcioniše?
Radiofrekventna identifikacija, ili RFID, je sistem koji omogućava prepoznavanje objekata pomoću jedinstvenog identifikatora koji se prenosi radio signalom. Ovaj identifikator se obično naziva UID (Unique ID) i može se smatrati ID-om oznake. Kompletan sistem se sastoji od dva glavna elementa: RFID oznake (ili transpondera) i RFID čitača (primopredajnika).
RFID oznake dolaze u mnogo različitih formata: plastične kartice slične kreditnim karticama, privjesci za ključeve, ljepljive naljepnice koje se lijepe na proizvode kako bi se spriječila krađa, pa čak i čipovi implantirani pod kožu životinja radi identifikacije. Unutra, svi oni dijele iste komponente: antenu i mali čip koji pohranjuje informacije i komunicira s čitačem.
Postoje oznake samo za čitanje, čiji je UID fabrički programiran i ne može se mijenjati, i oznake za čitanje/pisanje, na koje odgovarajući čitač, kao što je RC522 modul, može i čitati i pisati podatke . Ovo omogućava aplikacije kao što su punjive tranzitne kartice, sistemi kontrole pristupa sa prepaid stanjem, sistemi za evidenciju radnog vremena i drugo.
S druge strane, imamo RFID čitač ili primopredajnik. Ovaj uređaj ne samo da prima podatke, već i emituje radiofrekventno elektromagnetno polje . Ovo polje je ključno za razumijevanje kako se pasivne oznake napajaju i kako se informacije razmjenjuju između kartice i čitača.
Napajanje i princip rada RFID etiketa
Vrlo često pitanje je: ako RFID naljepnice na proizvodima u supermarketima ili pristupne kartice nemaju baterije, odakle im energija za rad? Ključno je da su mnoge od ovih oznaka pasivne i napajaju se elektromagnetskom indukcijom iz polja koje generira čitač.
Kada pasivnu oznaku približite čitaču, njena antena ulazi u elektromagnetno polje koje generira modul (na primjer, na 13,56 MHz u slučaju RC522). Ovo polje inducira struju u anteni oznake, koja se koristi za trenutno napajanje internog čipa . Nakon što se "probudi", čip modulira signal koji šalje nazad čitaču (ovo se naziva povratno raspršenje), kodirajući UID i, ako je primjenjivo, druge podatke pohranjene u memoriji.
Za razliku od tehnologija poput infracrvenog zračenja, direktna linija vidljivosti između oznake i čitača nije potrebna : radiofrekvencija može prodrijeti kroz određene materijale, iako njeno ponašanje zavisi od frekvencije, prisustva metala, vode itd. Čitač hvata povratno raspršeni signal, interpretira ga, a zatim šalje podatke mikrokontroleru (kao što je Arduino, ESP8266 ili ESP32) ili računaru.
Vrste RFID sistema prema učestalosti
Radiofrekventni spektar je vrlo širok i radio talasi se ne ponašaju isto na svim frekvencijama . Stoga se u RFID-u koriste različiti opsezi, ovisno o primjeni. Čitač i oznaka moraju biti dizajnirani da rade na istoj frekvenciji, baš kao što se radio mora podesiti na ispravnu stanicu.
Generalno, RFID sisteme možemo grupisati u tri glavne kategorije prema opsegu koji koriste:
- Niska frekvencija (LF)oko 125-134 kHz.
- Visoka frekvencija (HF)oko 13,56 MHz, što uključuje tehnologije poput MIFARE-a i NFC-a.
- Ultra visoka frekvencija (UHF)između približno 433 MHz i 860-960 MHz.
Niskofrekventni (LF) RFID sistemi
Niskofrekventni RFID sistemi imaju relativno dugu talasnu dužinu, što im omogućava bolji prodor kroz tanke materijale i predmete sa visokim sadržajem vode , kao što su voće ili pića. Takođe, prilično dobro funkcionišu u blizini tankih metala.
Međutim, ova prednost dolazi sa značajnim ograničenjima: tipičan domet je samo nekoliko centimetara, a brzina prijenosa podataka je niska, što rezultira smanjenim kapacitetom memorije i većim troškovima oznaka . Ovi sistemi se obično koriste za jednostavnu kontrolu pristupa, starije ključeve blizine i označavanje životinja.
Visokofrekventni (HF) RFID i NFC sistemi
Visokofrekventni opseg, na 13,56 MHz, vjerovatno je najpopularniji na nivou "maker" i "uradi sam" projekata, jer se tu nalaze MIFARE kartice i NFC (Near-Field Communication) tehnologija , koju mnogi mobilni telefoni koriste za beskontaktna plaćanja.
HF sistemi dobro funkcionišu u blizini metala i u prisustvu umjerenog do visokog nivoa vode, obično pružajući domet od nekoliko centimetara do oko jednog metra pod idealnim uslovima. Brzine prenosa podataka ostaju skromne, ali su dovoljne za identifikaciju, pristup i male aplikacije prenosa podataka. Mnogi globalni standardi se zasnivaju na HF-u, olakšavajući interoperabilnost opreme i kartica.
Ultra-visokofrekventni (UHF) RFID sistemi
Na suprotnom kraju spektra su UHF sistemi, sposobni da dosegnu udaljenosti od nekoliko centimetara do preko 20 metara. Idealni su kada je potrebno brzo i na daljinu očitati mnogo oznaka , na primjer, za upravljanje zalihama u skladištima, brojanje ljudi na događajima ili mjerenje vremena sportista dok prelaze ciljnu liniju u trkama.
Nedostatak je što, zbog kraće talasne dužine, signal više slabi i manje efikasno prodire u metal i vodu . Uprkos tome, široko se koriste u sistemima naplate putarine, kontroli pristupa parkingu i praćenju logistike velikih razmjera.
RC522 RFID modul: karakteristike i pinovi
Za Arduino projekte, jedan od najpopularnijih čitača je RC522, baziran na NXP MFRC522 čipu. To je vrlo pristupačan i široko korišten modul koji radi na visokoj frekvenciji (13,56 MHz) s MIFARE karticama i omogućava i čitanje i pisanje na kompatibilne oznake.
Obično se prodaje u kompletu koji uključuje sam čitač, kreditnu karticu i RFID privjesak za ključeve. Ove kartice su obično 1K ili 4K MIFARE Classic kartice, izuzetno popularan standard u transportu, kontroli pristupa i jeftinim rješenjima. RC522 generira HF elektromagnetsko polje, a u praksi je njegov korisni domet oko 3-5 cm, iako teoretski može dosegnuti i nešto dalje.
Što se tiče komunikacije s mikrokontrolerom, RC522 je prvenstveno integriran putem SPI-ja (Serial Peripheral Interface) i podržava brzine do 10 Mbps. Također podržava I2C i UART, iako se u većini Arduino projekata SPI koristi zbog svoje veće brzine i jednostavnosti u ovom kontekstu.
Električno, modul radi na naponu napajanja između 2,5 V i 3,3 V. Ploča obično ima jasno označen VCC pin za povezivanje na 3,3 V. Nemojte je direktno napajati sa 5 V ili riskirate oštećenje. S pozitivne strane, logički nivoi su uglavnom tolerantni na 5 V, tako da se može povezati na digitalne pinove Arduino UNO bez pretvarača nivoa za osnovno testiranje, iako je u profesionalnom dizajnu preporučljivo prilagođavanje nivoa.
Pričvršćivanje RC522 modula
Tipični RC522 uključuje 8 pinova za povezivanje s mikrokontrolerom:
- VCCNapajanje, između 2,5 V i 3,3 V.
- RST: pin za resetovanje; omogućava isključivanje i ponovno pokretanje modula podešavanjem nivoa na NIZAK/VISOKI.
- GND: masa ili referenca Zemlje.
- IRQ: pin za prekid koji može upozoriti mikrokontroler kada oznaka uđe u polje čitača.
- MISO / SCL / TX: multifunkcionalni pin; kao što je MISO u SPI-ju, kao što je SCL u I2C-u ili kao što je TX u UART-u.
- MOSI: izlazna linija podataka od glavnog do podređenog uređaja u SPI-ju.
- SCKSPI interfejs takt.
- SS / SDA / RX: pin za odabir podređenog uređaja u SPI, SDA u I2C ili RX u UART-u.
Na Arduino UNO i drugim pločama baziranim na ATmega328P, SPI pinovi su već definirani hardverom, tako da je tipičan dijagram povezivanja za korištenje SPI-ja:
- VCC → 3,3 V iz Arduina.
- GND → Uzemljenje Arduina.
- SCK → pin 13 na UNO/Nano.
- MOSI → pin 11 na UNO/Nano.
- MISO → pin 12 na UNO/Nano.
- SS (SDA) → pin 10 (ili onaj koji odaberete kao SS, ali ga morate navesti u kodu).
- RST → na primjer, Arduino pin 9.
- IRQ → Opcionalno, može se ostaviti nepovezano ako se ne koristi prekid.
Na pločama poput Arduino Mega, Leonardo ili Micro, SPI linije mogu biti na različitim pinovima ili na ICSP konektoru, tako da je važno provjeriti tabelu ekvivalencije u službenoj dokumentaciji prije bilo kakvog povezivanja.
Instaliranje biblioteke MFRC522 i osnovno čitanje oznaka
Iako se MFRC522 može programirati od nule, njegova interna komunikacija je prilično složena, pa je uobičajena praksa koristiti biblioteku koju je razvio Miguel Balboa , dostupnu na GitHub-u i u upravitelju biblioteka Arduino IDE-a. Ova biblioteka obuhvata sve operacije potrebne za inicijalizaciju čitača, detekciju kartica, autentifikaciju sektora i čitanje ili pisanje blokova.
Da biste ga instalirali iz Arduino IDE-a, jednostavno otvorite Upravitelj biblioteka, potražite "MFRC522" i odaberite verziju koju održava zajednica (GitHub zajednica) . Također je potrebno uključiti SPI biblioteku, koja je već uključena u IDE.
Nakon instalacije, tipičan tok u jednostavnom skiciranju za čitanje UID-a etikete je:
- Uključi knjižare SPI.hy MFRC522.h.
- Definišite RST i SS pinove koje će čitač koristiti.
- Kreirajte MFRC522 objekat tako što ćete mu proslijediti te pinove.
- U setup(), inicijalizirajte serijski port, SPI i čitač sa PCD_Init().
- U petlji(), koristite PICC_JeNewCardPresent() da saznate da li se u blizini nalazi kartica i PICC_ReadCardSerial() da pročita vaše osnovne podatke.
- Pristupite UID-u koristeći mfrc522.uid.uidByte i do veličine sa mfrc522.uid.size.
- Završite komunikaciju s oznakom pozivom PICC_HaltA().
Ova vrsta skice je savršena za dobijanje UID-a nekoliko kartica ili privjesaka za ključeve i izvođenje brzih testova, na primjer, za jednostavnu kontrolu pristupa gdje se samo pročitani UID poredi sa listom ovlaštenih UID-ova.
Struktura memorije u MIFARE Classic 1K karticama
Kartice koje obično prate RC522 su tipično MIFARE Classic 1K . Ove kartice nude 1 KB memorije organizirane hijerarhijski u sektore i blokove, s prilično neobičnim sistemom ključeva i dozvola koji treba razumjeti prije nego što se bilo šta napiše.
Ukupna memorija je podijeljena na 16 sektora numerisanih od 0 do 15. Svaki sektor sadrži 4 bloka, označena od 0 do 3 unutar tog sektora. Svaki blok pohranjuje 16 bajtova podataka , odnosno 16 pozicija numerisanih od 0 do 15, tako da svaki sektor nudi 64 bajta.
Unutar ta četiri bloka po sektoru, samo tri su namijenjena za pohranjivanje korisničkih podataka: blokovi 0, 1 i 2 svakog sektora (osim sektora 0, koji ima posebne karakteristike). Posljednji blok svakog sektora, blok 3, poznat je kao trailer blok . On pohranjuje ključeve za šifriranje i pristupne bitove koji kontroliraju koje su operacije dozvoljene u tom sektoru.
U najavi, 16 bajtova je podijeljeno na sljedeći način:
- Ključ A: 6 bajtova.
- Uslovi pristupa3 bajta koja definiraju dozvole za čitanje/pisanje, autentifikaciju i vidljivost ključa.
- Neiskorišteni bajt (U): 1 bajt koji se ne koristi.
- Ključ B: 6 bajtova.
Kartice koje dolaze iz fabrike s modulima obično imaju Ključ A i Ključ B inicijalizirane na FF FF FF FF FF FF FF , što je izuzetno nesigurno, budući da svako ko poznaje standard može autentificirati i mijenjati sadržaj kartice. Relativno uobičajena praksa u DIY projektima je korištenje istih ključeva u svim sektorima, iako bi za stvarnu sigurnost bilo bolje diverzificirati ih.
Nadalje, blok 0 sektora 0 je poseban: on pohranjuje UID kartice (obično 4 bajta kod ovih MIFARE Classic kartica) i podatke proizvođača. Ovaj blok se u praksi smatra samo za čitanje; pokušaj njegove izmjene može nepovratno oštetiti karticu.
Promijenite tipke Tipka A i Tipka B u sektoru
Ako želite koristiti MIFARE karticu u Arduino i RC522 projektu na bilo koji smisleni način, prvo što trebate učiniti je promijeniti zadane ključeve . Ovo sprječava da bilo ko s čitačem i standardnom bibliotekom neovlašteno mijenja vašu karticu.
Osnovna ideja za ažuriranje ključeva određenog sektora (na primjer, sektora 15) je sljedeća:
- Definišite trenutne ključeve u kodu (fabrički zadane vrijednosti, ako nisu promijenjene).
- Definirajte nove ključne riječi Ključ A i Ključ B koje želite koristiti u tom sektoru.
- Izračunajte broj bloka prikolice za taj sektor, koji je sektor * 4 + 3 (za sektor 15, blok 63).
- Prvo se autentifikujte s trenutnim ključem A koristeći PCD_Authenticate() o bloku prikolice.
- Pročitajte blok najave sa MIFARE_Read() da dobijete svoj sadržaj.
- Modificirajte bajtove koji odgovaraju novim ključevima u baferu.
- Ponovo se autentifikujte ako je potrebno (na primjer, pomoću ključa B).
- Napišite ažurirani blok trailera sa MIFARE_Write().
Tokom ovog procesa, ključno je ne pomicati karticu iz čitača dok se operacija ne završi , jer prekinuto pisanje u trailer blok može učiniti sektor nedostupnim. Nakon što se ključevi promijene, također ćete morati ažurirati Arduino kod kako biste koristili ove nove ključeve u budućim operacijama na tom sektoru.
Blokovi čitanja i pisanja: simuliranje transportne kartice
Vrlo ilustrativna primjena čitanja i pisanja s MIFARE Classicom je simuliranje ponašanja punjive kartice za javni prijevoz . Ideja je jednostavna: kartica pohranjuje određeni broj putovanja u određenom bloku, a sistem vam omogućava da učitate putovanja (dopunite ih) ili ih koristite (validacija prilikom ulaska u autobus ili tramvaj).
U tu svrhu, sektor 15 bi mogao biti rezerviran za korisničke podatke, na primjer, a jedan od njegovih blokova podataka (na primjer, blok 60) bi se mogao koristiti za pohranjivanje brojača putovanja. Broj dostupnih putovanja pohranjuje se u bajtu 0 bloka. Preostali bajtovi bloka mogli bi se koristiti za druge podatke ili jednostavno ostaviti na nuli.
Tipičan tok koda za dio ponovnog učitavanja bi bio:
- Definirajte Ključ A i ključ B važeći propisi koji štite dotični sektor (na primjer, oni koje smo promijenili u prethodnom koraku).
- Definirajte broj sektora, blok podataka (60) i završni blok (63).
- Deklariši 16-bajtni niz (blockData) gdje će prvi bajt predstavljati broj putovanja.
- Svaki put kada se kartica približi čitaču, Pročitajte blok 60 korištenjem MIFARE_Read() funkcije za dobijanje trenutnih putovanja.
- Dodajte broj putovanja za punjenje (na primjer, 10) očitanoj vrijednosti.
- Ažurirajte podatke. Blokirajte s novim brojem putovanja.
- Autentifikujte se pomoću ključa A u odnosu na odgovarajući blok trailera.
- Napiši blok 60 sa MIFARE_Write().
- Ponovo pročitajte da biste provjerili da li je vrijednost ispravno ažurirana.
Za dio koji se odnosi na potrošnju putovanja (validacija na sabirnici), kod je praktično identičan, ali umjesto sabiranja, od brojača se oduzima jedan. Prije oduzimanja, provjerava se da li je očitana vrijednost nula: ako nema preostalih putovanja, pristup se odbija i korisnik se poziva na ponovno učitavanje . Ako je brojač veći od nule, smanjuje se, blok se prepisuje i na ekranu se prikazuje broj preostalih putovanja.
U oba slučaja važno je ispravno rukovati povratnim kodovima funkcija biblioteke MFRC522 (npr. greške autentifikacije ili pisanja) i uvijek zaustaviti šifriranu komunikaciju pomoću PCD_StopCrypto1(), a samu karticu pomoću PICC_HaltA() na kraju svakog ciklusa.
Jednostavna kontrola pristupa zasnovana na UID-u
Još jedan klasičan projekat koji koristi RC522 i Arduino je osnovni sistem kontrole pristupa gdje se ulaz odobrava ili odbija na osnovu UID-a predstavljene ploče. Ovaj pristup ne koristi internu memoriju ploče, već samo njen jedinstveni identifikator, te je stoga prilično ograničen u pogledu sigurnosti, ali služi kao brz primjer.
Tipičan pristup je:
- Pročitajte UID kartice koristeći osnovne bibliotečke funkcije (PICC_IsNewCardPresent, PICC_ReadCardSerial, itd.).
- Kopirajte bajtove pročitanog UID-a u privremeni niz (npr. ActualUID).
- U kodu definirajte nekoliko nizova sa UID-ovima autorizovanih kartica (na primjer, Korisnik1, Korisnik2).
- Kreirajte funkciju za poređenje nizova bajtova koja vraća tačno ako su oba identična.
- Uporedite stvarni UID sa svakim ovlaštenim UID-om i, ako se neki podudaraju, aktivirajte digitalni izlaz, prikažite poruku "Pristup odobren" ili aktivirajte električnu bravu.
- Ako se ne podudara ni sa jednim od njih, prikažite poruku „Pristup odbijen“ i držite sistem zatvorenim.
U stvarnom okruženju, takav sistem je ranjiv na kloniranje oznaka jer mnogi jeftini čitači omogućavaju kopiranje ili emulaciju UID-ova. Da bi se povećala sigurnost, bilo bi potrebno koristiti internu memoriju kartice, prilagođene ključeve i moguće robusnije kriptografske mehanizme od onih kod MIFARE Classic-a, čija se sigurnost trenutno uveliko dovodi u pitanje. Uprkos tome, to je odličan pedagoški primjer za učenje radnog procesa čitanja kartica i integracije s fizičkim aktuatorima.
Sa svim gore navedenim, sada imate čvrsto razumijevanje osnovnih RFID koncepata, razumijete kako se ponašaju različiti frekvencijski opsezi, poznajete interni rad MIFARE Classic 1K kartice, savladali ste osnovno povezivanje i korištenje RC522 modula s Arduinom i detaljno ste vidjeli kako čitati i pisati blokove za kreiranje sistema iz stvarnog svijeta poput kontrole pristupa ili tranzitnih kartica . Odavde, sljedeći prirodan korak je kombinovanje RFID-a s drugim modulima (LCD ekrani, releji, Wi-Fi, baze podataka u oblaku) i učenje kako kontrolisati pametne sijalice kako biste izgradili sveobuhvatnija rješenja koja su još bliža profesionalnim sistemima koje svakodnevno viđate u prodavnicama, javnom prevozu i uređajima za beskontaktno plaćanje.
