Kuidas kasutada Arduinot ja RFID-d RC522 mooduliga

  • RFID-tehnoloogia võimaldab objekte tuvastada passiivsete või aktiivsete siltide abil, kasutades raadiosagedust ja unikaalset UID-d ilma otsese visuaalse kontaktita.
  • MFRC522 kiibil põhinev RC522 moodul töötab sagedusel 13,56 MHz MIFARE Classic plaatidega ja suhtleb Arduinoga peamiselt SPI kaudu.
  • MIFARE Classic 1K kaardid korraldavad oma mälu sektoriteks ja plokkideks, millel on võtmed A/B ja juurdepääsutingimused, mida on oluline teada ja muuta.
  • MFRC522 teeki Arduinoga kombineerides on võimalik ellu viia praktilisi projekte, näiteks ligipääsukontrolle või laetavaid transpordikaarte.

Kuidas kasutada Arduinot ja RFID-d: täielik andurite ja projektide juhend

Kui olete kunagi supermarketi iseteeninduskassas käinud ja näinud, kuidas kõik tooted kandikule asetades automaatselt ekraanile ilmuvad , siis olete juba näinud RFID-i toimimas. See pole maagia ega tehnoloogiline telepaatia: see on raadiosagedusel põhinev süsteem, mis võimaldab teil objekte tuvastada ilma otsese kontaktita ja mida saate kodus lihtsa Arduino ja odava lugeja, näiteks RC522, abil korrata.

Selles juhendis õpid samm-sammult, kuidas kasutada Arduinot ja RC522 RFID-lugerit siltide lugemiseks ja kirjutamiseks, saad aru, mis täpselt on RFID, milliseid süsteeme on olemas, kuidas passiivseid kaarte toidetakse, kuidas MIFARE Classic 1K kaardi mälu on korraldatud ja kuidas luua reaalseid projekte, näiteks ligipääsukontrollisüsteemi või laetavat ühistranspordikaarti. Seadke end mugavalt sisse, sest me süveneme teemasse põhjalikult, kuid selgel ja ligipääsetaval viisil.

Mis on RFID-tehnoloogia ja kuidas see töötab?

Raadiosagedustuvastus ehk RFID on süsteem, mis võimaldab objekte tuvastada raadio teel edastatava unikaalse identifikaatori abil. Seda identifikaatorit nimetatakse tavaliselt UID-ks (Unique ID) ja seda võib pidada sildi ID-ks. Täielik süsteem koosneb kahest põhielemendist: RFID-sildist (või transponderist) ja RFID-lugerist (transiiverist).

RFID-silte on saadaval mitmel erineval kujul: krediitkaarditaolised plastkaardid, võtmehoidjad, toodetele varguse vältimiseks kleepuvad kleebised ja isegi loomade naha alla implanteeritud tuvastamiseks mõeldud kiibid. Sisemiselt on neil kõigil samad komponendid: antenn ja väike kiip, mis salvestab teavet ja suhtleb lugejaga.

Saadaval on ainult lugemiseks mõeldud sildid, mille UID on tehases programmeeritud ja mida ei saa muuta, ning lugemis-/kirjutamissildid, millele sobiv lugeja, näiteks RC522 moodul, saab andmeid nii lugeda kui ka kirjutada . See võimaldab rakendusi nagu laetavad ühistranspordikaardid, ettemakstud saldodega juurdepääsukontrollisüsteemid, ajaarvestussüsteemid ja palju muud.

Teisest küljest on meil RFID-lugeja ehk transiiver. See seade mitte ainult ei võta andmeid vastu, vaid kiirgab ka raadiosageduslikku elektromagnetvälja . See väli on võtmetähtsusega passiivsete siltide toite mõistmiseks ja kaardi ning lugeja vahelise teabevahetuse mõistmiseks.

RFID-siltide toiteallikas ja tööpõhimõte

Väga levinud küsimus on: kui supermarketite toodete või ligipääsukaartide RFID-kleebistel pole patareisid, siis kust nad tööks energia saavad? Peamine on see, et paljud neist siltidest on passiivsed ja neid toidab lugeja tekitatud elektromagnetiline induktsioon.

Kui passiivne silt lugeja lähedale tuua, siseneb selle antenn mooduli tekitatud elektromagnetvälja (näiteks RC522 puhul sagedusel 13,56 MHz). See väli indutseerib sildi antennis voolu, mida kasutatakse sisemise kiibi hetkeliseks toiteks . Kui kiip on "ärkvel", moduleerib see lugejale tagasi saadetavat signaali (seda nimetatakse tagasihajumiseks), kodeerides UID-i ja vajadusel ka muid mällu salvestatud andmeid.

Erinevalt sellistest tehnoloogiatest nagu infrapuna ei ole sildi ja lugeja vahel otsest vaatevälja vaja : raadiosagedus suudab tungida läbi teatud materjalide, kuigi selle käitumine sõltub sagedusest, metalli, vee jms olemasolust. Lugeja püüab kinni tagasihajunud signaali, tõlgendab seda ja saadab seejärel andmed mikrokontrollerile (näiteks Arduino, ESP8266 või ESP32) või arvutile.

RFID-süsteemide tüübid vastavalt sagedusele

Raadiosageduste spekter on väga lai ja raadiolained ei käitu kõigil sagedustel ühtemoodi . Seetõttu kasutatakse RFID-s olenevalt rakendusest erinevaid sagedusribasid. Lugeja ja silt peavad olema konstrueeritud töötama samal sagedusel, just nagu raadio peab häälestama õigele jaamale.

Üldiselt saame RFID-süsteemid jagada kolme põhikategooriasse vastavalt kasutatavale sagedusribale:

  • Madalsagedus (LF)umbes 125–134 kHz.
  • Kõrgsagedus (HF)umbes 13,56 MHz, mis hõlmab selliseid tehnoloogiaid nagu MIFARE ja NFC.
  • Ülikõrge sagedus (UHF)umbes 433 MHz ja 860–960 MHz vahel.

Madala sagedusega (LF) RFID-süsteemid

Madala sagedusega RFID-süsteemidel on suhteliselt pikk lainepikkus, mis võimaldab neil paremini tungida õhukestesse materjalidesse ja suure veesisaldusega esemetesse , näiteks puuviljadesse või jookidesse. Samuti toimivad need õhukeste metallide läheduses üsna hästi.

Sellel eelisel on aga märkimisväärsed piirangud: tüüpiline ulatus on vaid paar sentimeetrit ja andmeedastuskiirus on madal, mis toob kaasa väiksema mälumahu ja kõrgemad siltide kulud . Neid süsteeme kasutatakse tavaliselt lihtsa juurdepääsukontrolli, vanemate lähedusvõtmete ja loomade märgistamise jaoks.

Kõrgsageduslikud (HF) RFID- ja NFC-süsteemid

Kõrgsagedusriba sagedusel 13,56 MHz on ilmselt kõige populaarsem "tegijate" ja isetegemisprojektide tasandil, sest just seal kasutatakse MIFARE kaarte ja NFC (Near-Field Communication) tehnoloogiat , mida paljud mobiiltelefonid kasutavad kontaktivabade maksete jaoks.

Kõrgsagedussüsteemid toimivad hästi metalli lähedal ja mõõduka kuni kõrge veetaseme korral, pakkudes ideaalsetes tingimustes tavaliselt leviala mõnest sentimeetrist kuni umbes ühe meetrini . Andmeedastuskiirused jäävad tagasihoidlikuks, kuid on piisavad tuvastamise, juurdepääsu ja väikeste andmeedastusrakenduste jaoks. Paljud ülemaailmsed standardid põhinevad kõrgsagedusel, hõlbustades seadmete ja kaartide koostalitlusvõimet.

Ülikõrgsageduslikud (UHF) RFID-süsteemid

Spektri teises otsas on UHF-süsteemid, mis on võimelised ulatuma vahemaadeni mõnest sentimeetrist kuni üle 20 meetri. Need sobivad ideaalselt olukordadesse, kus on vaja kiiresti ja kaugelt lugeda palju silte , näiteks ladudes inventuuri haldamiseks, üritustel inimeste loendamiseks või sportlaste aja võtmiseks finišijoone ületamisel võistlustel.

Negatiivne külg on see, et lühema lainepikkuse tõttu nõrgeneb signaal rohkem ning tungib metalli ja vett vähem tõhusalt läbi . Sellegipoolest kasutatakse neid laialdaselt teemaksusüsteemides, parkimiskontrollis ja suuremahulise logistika jälgimises.

RC522 RFID-moodul: omadused ja kontaktid

Arduino projektide puhul on üks populaarsemaid lugejaid RC522, mis põhineb NXP MFRC522 kiibil. See on väga taskukohane ja laialdaselt kasutatav moodul, mis töötab MIFARE kaartidega kõrgel sagedusel (13,56 MHz) ja võimaldab nii ühilduvate siltide lugemist kui ka kirjutamist.

Tavaliselt müüakse seda komplektina, mis sisaldab lugejat ennast, krediitkaarti ja RFID-võtmehoidjat. Need kaardid on tavaliselt 1K või 4K MIFARE Classic kaardid, mis on äärmiselt populaarne standard transpordis, ligipääsukontrollis ja odavates lahendustes. RC522 tekitab kõrgsagedusliku elektromagnetvälja ja praktikas on selle kasulik ulatus umbes 3-5 cm, kuigi teoreetiliselt võib see ulatuda mõnevõrra kaugemale.

Mikrokontrolleriga suhtlemise osas on RC522 integreeritud peamiselt SPI (Serial Peripheral Interface) kaudu ja toetab kiirusi kuni 10 Mbps. See toetab ka I2C ja UART-i, kuigi enamikus Arduino projektides kasutatakse SPI-d selle suurema kiiruse ja lihtsuse tõttu selles kontekstis.

Elektriliselt töötab moodul toitepingega vahemikus 2,5 V kuni 3,3 V. Plaadil on tavaliselt selgelt tähistatud VCC-tihvt 3,3 V ühendamiseks. Ärge toidake seda otse 5 V pingega, vastasel juhul riskite seda kahjustada. Positiivse poole pealt taluvad loogikatasandid üldiselt 5 V pinget, seega saab selle põhiliseks testimiseks ühendada Arduino UNO digitaalsete tihvtidega ilma tasememuunduriteta, kuigi professionaalse disaini puhul on tasemete kohandamine soovitatav.

RC522 mooduli kinnitamine

Tüüpiline RC522 sisaldab mikrokontrolleriga ühendamiseks 8 ühendusklemmi:

  • VCCToiteallikas, vahemikus 2,5 V kuni 3,3 V.
  • RST: lähtestamisnööpnõel; võimaldab mooduli välja lülitada ja taaskäivitada, määrates taseme MADALAKS/KÕRGEKS.
  • GNDMaa mass või etalon.
  • IRQ: katkestustihvt, mis saab mikrokontrollerit hoiatada, kui silt siseneb lugejavälja.
  • MISO / SCL / TX: multifunktsionaalne pin; näiteks MISO SPI-s, näiteks SCL I2C-s või näiteks TX UART-is.
  • MOSI: väljundandmeliin master-seadmest slave-seadmesse SPI-s.
  • SCKSPI-liidese kell.
  • SS / SDA / RX: SPI-s alamseadme valikutihvt, I2C-s SDA või UART-is RX.

Arduino UNO-l ja teistel ATmega328P-põhistel plaatidel on SPI-tihvtid juba riistvaraliselt defineeritud, seega on SPI kasutamise tüüpiline ühendusskeem järgmine:

  • VCC → 3,3 V Arduinost.
  • GND → Arduino maandus.
  • SCK → UNO/Nano klemm 13.
  • MOSI → UNO/Nano klemm 11.
  • MISO → UNO/Nano klemm 12.
  • SS (SDA) → pin 10 (või see, mille valid SS-iks, aga pead selle koodis täpsustama).
  • RST → näiteks Arduino 9. pin.
  • IRQ → Valikuline, võib jätta ühendamata, kui katkestust ei kasutata.

Sellistel plaatidel nagu Arduino Mega, Leonardo või Micro võivad SPI-liinid olla erinevatel tihvtidel või ICSP-pistikul, seega on enne millegi ühendamist oluline kontrollida ametlikus dokumentatsioonis olevat ekvivalentsustabelit .

MFRC522 teegi installimine ja siltide põhilugemine

Kuigi MFRC522 saab programmeerida nullist, on selle sisemine kommunikatsioon üsna keeruline, seega on tavaline kasutada Miguel Balboa väljatöötatud teeki , mis on saadaval GitHubis ja Arduino IDE teekide halduris. See teek hõlmab kõiki toiminguid, mis on vajalikud lugeja initsialiseerimiseks, kaartide tuvastamiseks, sektorite autentimiseks ning plokkide lugemiseks või kirjutamiseks.

Selle installimiseks Arduino IDE-st avage lihtsalt teekide haldur, otsige „MFRC522” ja valige kogukonna hallatav versioon (GitHub Community) . Samuti peate lisama SPI teeki, mis on IDE-ga juba kaasas.

Pärast installimist on tüüpiline lihtsa visandi voog sildi UID lugemiseks järgmine:

  • Kaasa raamatupoed SPI.hy MFRC522.h.
  • Määrake lugeja kasutatavad RST ja SS tihvtid.
  • Loo MFRC522 objekt, edastades sellele need tihvtid.
  • Setup() funktsioonis initsialiseeri Serial, SPI ja lugeja PCD_Init().
  • Kasuta tsüklis() PICC_IsNewCardPresent() et teada saada, kas läheduses on kaart ja PICC_ReadCardSerial() teie põhiandmete lugemiseks.
  • UID-le juurdepääsemiseks kasutage mfrc522.uid.uidByte ja suurusele, mille leiate funktsioonist mfrc522.uid.size.
  • Lõpetage suhtlus sildiga helistades PICC_HaltA().

Seda tüüpi visand sobib suurepäraselt mitme kaardi või võtmehoidja UID-de hankimiseks ja kiirtestide tegemiseks, näiteks lihtsa juurdepääsukontrolli jaoks, kus ainult loetud UID-d võrreldakse volitatud UID-de loendiga.

MIFARE Classic 1K kaartide mälustruktuur

RC522-ga tavaliselt kaasas olevad kaardid on MIFARE Classic 1K . Need kaardid pakuvad 1 KB mälu, mis on hierarhiliselt sektoriteks ja plokkideks korraldatud, üsna omapärase võtme- ja õiguste süsteemiga, mida tuleks enne millegi kirjutamist mõista.

Kogu mälu on jagatud 16 sektoriks, mis on nummerdatud vahemikus 0 kuni 15. Iga sektor sisaldab 4 plokki, mis on sektori sees märgistatud numbritega 0 kuni 3. Iga plokk salvestab 16 baiti andmeid , see tähendab 16 positsiooni, mis on nummerdatud vahemikus 0 kuni 15, seega pakub iga sektor 64 baiti.

Nendest neljast plokist sektori kohta on ainult kolm mõeldud kasutajaandmete salvestamiseks: iga sektori plokid 0, 1 ja 2 (välja arvatud sektor 0, millel on eripärad). Iga sektori viimast plokki, plokki 3, nimetatakse treilerplokiks . See salvestab krüpteerimisvõtmed ja juurdepääsubitid, mis kontrollivad, millised toimingud selles sektoris lubatud on.

Treileris on 16 baiti jagatud järgmiselt:

  • Võti A6 baiti.
  • Juurdepääsutingimused3 baiti, mis määravad lugemis-/kirjutamisõigused, autentimise ja võtme nähtavuse.
  • Kasutamata bait (U): 1 bait, mida ei kasutata.
  • Võti B6 baiti.

Tehasest moodulitega kaasasolevatel kaartidel on võtmed A ja B tavaliselt initsialiseeritud väärtusele FF FF FF FF FF FF , mis on äärmiselt ebaturvaline, kuna igaüks, kes standardit tunneb, saab kaardi sisu autentida ja muuta. Isetegemisprojektides on suhteliselt levinud praktika kasutada kõigis sektorites samu võtmeid, kuigi tegeliku turvalisuse tagamiseks oleks parem neid mitmekesistada.

Lisaks on sektori 0 plokk 0 eriline: see salvestab kaardi UID-i (tavaliselt 4 baiti nende MIFARE Classic kaartide puhul) ja tootja andmed. Praktikas peetakse seda plokki kirjutuskaitstud; selle muutmise katse võib kaarti pöördumatult rikkuda.

Vaheta sektoris võtmeid A ja B

Kui soovid MIFARE kaarti Arduino ja RC522 projektis mingilgi mõttekal viisil kasutada, peaksid esimese asjana muutma vaikevõtmeid . See takistab kõigil, kellel on lugeja ja standardteek, teie kaarti ilma loata muutmast.

Konkreetse sektori (näiteks sektori 15) võtmete värskendamise põhiidee on järgmine:

  • Määrake koodis praegused võtmed (tehase vaikesätted, kui neid pole muudetud).
  • Määrake uued märksõnad Key A ja Key B, mida soovite selles sektoris kasutada.
  • Arvutage selle sektori haagise ploki number, mis on sektor * 4 + 3 (sektori 15, ploki 63 jaoks).
  • Autentige esmalt praeguse võtmega A, kasutades PCD_Authenticate() haagiseploki kohta.
  • Lugege treileriplokki koos MIFARE_Read() et oma sisu kätte saada.
  • Muutke puhvris uutele võtmetele vastavaid baite.
  • Vajadusel autentige uuesti (näiteks võtmega B).
  • Kirjutage uuendatud treileriplokk koos MIFARE_kirjutamine().

Selle protsessi käigus on oluline kaarti lugejast mitte eemaldada enne, kui toiming on lõppenud , sest katkenud kirjutamine treilerplokki võib sektori ligipääsmatuks muuta. Kui võtmed on vahetatud, peate ka Arduino koodi värskendama, et neid uusi võtmeid selle sektori edaspidistes toimingutes kasutada.

Lugemis- ja kirjutamisplokid: transpordikaardi simuleerimine

Väga illustreeriv MIFARE Classicu abil lugemise ja kirjutamise rakendus on laetava ühistranspordikaardi käitumise simuleerimine . Idee on lihtne: kaart salvestab teatud arvu reise kindlasse plokki ja süsteem võimaldab teil reise laadida (laadida) või kasutada (valideerida bussi või trammi sisenemisel).

Sel eesmärgil võiks sektori 15 reserveerida näiteks kasutajaandmetele ja ühte selle andmeplokkidest (näiteks plokki 60) saaks kasutada reisiloenduri salvestamiseks. Saadaval olevate sõitude arv salvestatakse ploki baiti 0. Ploki ülejäänud baite võiks kasutada muude andmete jaoks või lihtsalt nulliks jätta.

Tüüpiline koodivoog uuesti laadimise osa jaoks oleks:

  • Määratlema Võti A ja võti B kehtivad eeskirjad, mis kaitsevad kõnealust sektorit (näiteks need, mida me eelmises etapis muutsime).
  • Määrake sektori number, andmeplokk (60) ja treilerplokk (63).
  • Deklareerige 16-baidine massiiv (blockData), kus esimene bait tähistab käikude arvu.
  • Iga kord, kui kaart lugeja lähedale tuuakse, Loe plokki 60 Kasutades MIFARE_Read() funktsiooni praeguste reiside saamiseks.
  • Liita loetud väärtusele laadimisreiside arv (näiteks 10).
  • Andmete uuendamine. Blokeeri uue sõitude arvuga.
  • Autentige võtmega A vastava haagiseploki vastu.
  • Kirjuta plokk 60 koos MIFARE_kirjutamine().
  • Lugege uuesti, et veenduda väärtuse õiges uuendamises.

Reisikulu osas (bussil valideerimine) on kood praktiliselt identne, kuid liitmise asemel lahutatakse loendurist üks. Enne lahutamist kontrollitakse, kas loetud väärtus on null: kui reise pole jäänud, keelatakse juurdepääs ja kasutajal palutakse loendur uuesti laadida . Kui loendur on suurem kui null, vähendatakse seda, plokk kirjutatakse ümber ja ekraanile kuvatakse järelejäänud reiside arv.

Mõlemal juhul on oluline MFRC522 teegi funktsioonide tagastuskoode (nt autentimis- või kirjutamisvead) õigesti käsitleda ning iga tsükli lõpus krüptitud side PCD_StopCrypto1() abil ja kaardi enda side PICC_HaltA() abil peatada .

Lihtne juurdepääsukontroll UID-i põhjal

Teine klassikaline projekt, mis kasutab RC522 ja Arduinot, on lihtne ligipääsukontrollisüsteem , kus sissepääs lubatakse või keelatakse esitatud plaadi UID-i alusel. See lähenemisviis ei kasuta plaadi sisemälu, vaid ainult selle unikaalset identifikaatorit ja on seetõttu turvalisuse poolest üsna piiratud, kuid see on kiire näide.

Tüüpiline lähenemisviis on:

  • Loe kaardi UID-d põhiliste teegifunktsioonide (PICC_IsNewCardPresent, PICC_ReadCardSerial jne) abil.
  • Kopeeri loetud UID baidid ajutisse massiivi (nt ActualUID).
  • Defineeri koodis mitu massiivi autoriseeritud kaartide UID-dega (näiteks Kasutaja1, Kasutaja2).
  • Loo baitimassiivi võrdlusfunktsioon, mis tagastab väärtuse tõene, kui mõlemad on identsed.
  • Võrdle ActualUID-d iga volitatud UID-ga ja kui mõni neist sobib, aktiveeri digitaalväljund, kuva teade „Juurdepääs antud” või aktiveeri elektrilukk.
  • Kui see ei vasta ühelegi neist, kuva teade „Juurdepääs keelatud” ja hoia süsteem suletuna.

Reaalses keskkonnas on selline süsteem siltide kloonimise suhtes haavatav, kuna paljud odavad lugejad võimaldavad UID-sid kopeerida või emuleerida. Turvalisuse suurendamiseks oleks vaja kasutada kaardi sisemälu, kohandatud võtmeid ja võimalik, et ka MIFARE Classicust tugevamaid krüptograafilisi mehhanisme, mille turvalisust praegu laialdaselt kahtluse alla seatakse. Sellegipoolest on see suurepärane pedagoogiline näide kaardilugemise töövoo ja füüsiliste ajamitega integreerimise õppimiseks.

Kõige eelnevaga on teil nüüd kindel arusaam RFID-i põhikontseptsioonidest, saate aru, kuidas erinevad sagedusribad toimivad, teate MIFARE Classic 1K kaardi sisemist toimimist, omandate RC522 mooduli põhiühenduse ja kasutamise Arduinoga ning olete üksikasjalikult näinud, kuidas plokke lugeda ja kirjutada, et luua reaalseid süsteeme, nagu juurdepääsukontroll või ühistranspordikaardid . Järgmine loomulik samm on RFID kombineerimine teiste moodulitega (LCD-ekraanid, releed, WiFi, pilveandmebaasid) ja nutikate pirnide juhtimise õppimine , et luua terviklikumaid lahendusi, mis on veelgi lähedasemad professionaalsetele süsteemidele, mida näete iga päev kauplustes, ühistranspordis ja kontaktivabades makseseadmetes.

Kuidas auditeerida rakenduste õigusi Windows 11-s
Seotud artikkel:
Kuidas auditeerida ja hallata rakenduste õigusi Windows 11-s

Lisa eelistatud allikana Google'is