
Ако сте икада били на самопослужној каси у супермаркету и видели како се, када ставите све своје артикле на послужавник, они аутоматски појављују на екрану , већ сте видели РФИД у акцији. То није магија или технолошка телепатија: то је систем заснован на радио-фреквенцијама који вам омогућава да идентификујете објекте без директног контакта, а можете га реплицирати код куће помоћу једноставног Ардуина и јефтиног читача попут RC522.
У овом водичу ћете корак по корак научити како да користите Ардуино и RC522 РФИД читач за читање и писање ознака, разумећете тачно шта је РФИД, које врсте система постоје, како се напајају пасивне картице, како је организована меморија MIFARE Classic 1K картице и како да направите пројекте из стварног света попут система за контролу приступа или пуњиве транзитне картице. Удобно се сместите, јер ћемо темељно обрадити тему, али на јасан и приступачан начин.
Шта је РФИД технологија и како функционише?
Радиофреквентна идентификација, или РФИД, је систем који омогућава препознавање објеката помоћу јединственог идентификатора који се преноси радиом. Овај идентификатор се обично назива УИД (Јединствени ИД) и може се сматрати ИД-ом ознаке. Комплетан систем се састоји од два главна елемента: РФИД ознаке (или транспондера) и РФИД читача (примопредајника).
РФИД ознаке долазе у много различитих формата: пластичне картице сличне кредитним картицама, привесци за кључеве, лепљиве налепнице које се лепе на производе како би се спречила крађа, па чак и чипови имплантирани испод коже животиња ради идентификације. Унутра, све деле исте компоненте: антену и мали чип који чува информације и комуницира са читачем.
Постоје ознаке само за читање, чији је UID фабрички програмиран и не може се мењати, и ознаке за читање/писање, на које одговарајући читач, као што је модул RC522, може и да чита и да пише податке . Ово омогућава апликације као што су пуњиве транзитне картице, системи контроле приступа са претплаћеним стањем, системи за евиденцију радног времена и још много тога.
С друге стране, имамо РФИД читач или примопредајник. Овај уређај не само да прима податке већ и емитује радиофреквентно електромагнетно поље . Ово поље је кључно за разумевање како се пасивне ознаке напајају и како се информације размењују између картице и читача.
Напајање и принцип рада РФИД ознака
Веома често питање је: ако РФИД налепнице на производима у супермаркетима или приступне карте немају батерије, одакле добијају енергију за рад? Кључно је да су многе од ових ознака пасивне и напајају се електромагнетном индукцијом из поља које генерише читач.
Када приближите пасивну ознаку читачу, њена антена улази у електромагнетно поље које генерише модул (на пример, на 13,56 MHz у случају RC522). Ово поље индукује струју у антени ознаке, која се користи за тренутно напајање унутрашњег чипа . Када се „пробуди“, чип модулира сигнал који шаље назад читачу (ово се назива повратно расејање), кодирајући UID и, ако је применљиво, друге податке сачуване у меморији.
За разлику од технологија као што је инфрацрвено зрачење, директна линија вида између ознаке и читача није потребна : радиофреквенција може да продре кроз одређене материјале, иако њено понашање зависи од фреквенције, присуства метала, воде итд. Читач хвата сигнал расејаног повратног таласа, интерпретира га, а затим шаље податке микроконтролеру (као што су Ардуино, ESP8266 или ESP32) или рачунару.
Врсте РФИД система према учесталости
Радио-фреквентни спектар је веома широк и радио таласи се не понашају исто на свим фреквенцијама . Стога се у РФИД-у користе различити опсези у зависности од примене. Читач и ознака морају бити дизајнирани да раде на истој фреквенцији, баш као што радио мора да се подеси на исправну станицу.
Генерално, РФИД системе можемо груписати у три главне категорије према опсегу који користе:
- Ниска фреквенција (LF)око 125-134 kHz.
- Висока фреквенција (HF)око 13,56 MHz, што укључује технологије као што су MIFARE и NFC.
- Ултра висока фреквенција (UHF)између приближно 433 MHz и 860-960 MHz.
Нискофреквентни (LF) РФИД системи
Нискофреквентни РФИД системи имају релативно дугу таласну дужину, што им омогућава бољи продор кроз танке материјале и предмете са високим садржајем воде , као што су воће или пића. Такође се прилично добро понашају у близини танких метала.
Међутим, ова предност долази са значајним ограничењима: типичан домет је само неколико центиметара, а брзина преноса података је ниска, што резултира смањеним капацитетом меморије и вишим трошковима ознака . Ови системи се обично користе за једноставну контролу приступа, старије кључеве за мерење близине и означавање животиња.
Високофреквентни (HF) РФИД и НФЦ системи
Високофреквентни опсег, на 13,56 MHz, вероватно је најпопуларнији на нивоу „мајстора“ и „уради сам“ пројеката, јер се ту налазе MIFARE картице и NFC (Near-Field Communication) технологија , коју многи мобилни телефони користе за бесконтактна плаћања.
ВФ системи добро раде у близини метала и у присуству умерених до високих нивоа воде, обично пружајући домет од неколико центиметара до око једног метра под идеалним условима. Брзине преноса података остају скромне, али су довољне за идентификацију, приступ и мале апликације за пренос података. Многи глобални стандарди су засновани на ВФ-у, што олакшава интероперабилност опреме и картица.
Ултра-високофреквентни (UHF) РФИД системи
На супротном крају спектра су UHF системи, способни да досегну удаљености од неколико центиметара до преко 20 метара. Они су идеални када је потребно брзо и на даљину очитати много ознака , на пример, за управљање залихама у складиштима, бројање људи на догађајима или мерење времена спортиста док прелазе циљну линију у тркама.
Мана им је што, због краће таласне дужине, сигнал више слаби и мање ефикасно продире кроз метал и воду . Упркос томе, широко се користе у системима наплате путарине, контроли приступа паркингу и праћењу логистике великих размера.
RC522 РФИД модул: карактеристике и пинови
За Ардуино пројекте, један од најпопуларнијих читача је RC522, базиран на NXP MFRC522 чипу. То је веома приступачан и широко коришћен модул који ради на високој фреквенцији (13,56 MHz) са MIFARE картицама и омогућава и читање и писање на компатибилне ознаке.
Обично се продаје у комплету који укључује сам читач, кредитну картицу и РФИД привезак за кључ. Ове картице су типично 1K или 4K MIFARE Classic картице, изузетно популаран стандард у транспорту, контроли приступа и јефтиним решењима. RC522 генерише ВФ електромагнетно поље, а у пракси је његов корисни домет око 3-5 цм, мада теоретски може досегнути и нешто даље.
Што се тиче комуникације са микроконтролером, RC522 је првенствено интегрисан преко SPI (серијски периферни интерфејс) и подржава брзине до 10 Mbps. Такође подржава I2C и UART, иако се у већини Arduino пројеката SPI користи због веће брзине и једноставности у овом контексту.
Електрично, модул ради на напону напајања између 2,5 V и 3,3 V. Плоча обично има јасно означен VCC пин за повезивање на 3,3 V. Немојте га директно напајати са 5 V или ризикујете да га оштетите. Са позитивне стране, логички нивои су генерално толерантни на 5 V, тако да се може повезати са дигиталним пиновима Arduino UNO без конвертора нивоа за основно тестирање, иако је у професионалном дизајну препоручљиво прилагодити нивое.
Причвршћивање RC522 модула
Типични RC522 укључује 8 пинова за повезивање са микроконтролером:
- ВЦЦ: напајање, између 2,5 V и 3,3 V.
- РСТ: пин за ресетовање; омогућава искључивање и поновно покретање модула подешавањем нивоа на НИЗКО/ВИСОКО.
- ГНД: маса или референца Земље.
- ИРК: пин за прекид који може упозорити микроконтролер када ознака уђе у поље читача.
- MISO / SCL / TX: мултифункционални пин; као што је MISO у SPI, као што је SCL у I2C или као што је TX у UART.
- МОСИ: излазна линија података од главног до подређеног уређаја у SPI-ју.
- СЦК: Такт SPI интерфејса.
- СС / СДА / РX: пин за избор подређеног уређаја у SPI, SDA у I2C или RX у UART-у.
На Arduino UNO и другим плочама базираним на ATmega328P, SPI пинови су већ дефинисани хардвером, тако да је типичан дијаграм повезивања за коришћење SPI-ја:
- ВЦЦ → 3,3 V са Ардуина.
- ГНД → Ардуино уземљење.
- СЦК → пин 13 на UNO/Nano.
- МОСИ → пин 11 на UNO/Nano.
- МИСО → пин 12 на UNO/Nano.
- СС (СДА) → пин 10 (или онај који изаберете као СС, али морате га навести у коду).
- РСТ → на пример, Ардуино пин 9.
- ИРК → Опционо, може се оставити неповезано ако се не користи прекид.
На плочама као што су Arduino Mega, Leonardo или Micro, SPI линије могу бити на различитим пиновима или на ICSP конектору, тако да је важно проверити табелу еквиваленције у званичној документацији пре него што било шта повежете.
Инсталирање библиотеке MFRC522 и основно читање ознака
Иако се MFRC522 може програмирати од нуле, његова интерна комуникација је прилично сложена, па је уобичајена пракса да се користи библиотека коју је развио Мигел Балбоа , доступна на GitHub-у и у менаџеру библиотека Arduino IDE-а. Ова библиотека обухвата све операције потребне за иницијализацију читача, детекцију картица, аутентификацију сектора и читање или писање блокова.
Да бисте га инсталирали из Arduino IDE-а, једноставно отворите Library Manager, потражите „MFRC522“ и изаберите верзију коју одржава заједница (GitHub Community) . Такође је потребно да укључите SPI библиотеку, која је већ укључена у IDE.
Једном инсталиран, типичан ток у једноставној скици за читање UID-а етикете је:
- Укључи књижаре SPI.hy MFRC522.h.
- Дефинишите RST и SS пинове које ће читач користити.
- Направите објекат MFRC522 тако што ћете му проследити те пинове.
- У setup(), иницијализујте Serial, SPI и читач са PCD_Init().
- У петљи(), користите PICC_ЈеНеваКартицаПрисутна() да сазнате да ли постоји картица у близини и PICC_ReadCardSerial() да прочита ваше основне податке.
- Приступите UID-у користећи mfrc522.uid.uidByte и до величине са mfrc522.uid.size.
- Завршите комуникацију са ознаком позивањем PICC_HaltA().
Ова врста скице је савршена за добијање UID-а неколико картица или привесака за кључеве и обављање брзих тестова, на пример, за једноставну контролу приступа где се само очитани UID упоређује са листом овлашћених UID-ова.
Структура меморије у MIFARE Classic 1K картицама
Картице које обично прате RC522 су типично MIFARE Classic 1K . Ове картице нуде 1 KB меморије хијерархијски организоване у секторе и блокове, са прилично необичним системом кључева и дозвола који треба разумети пре него што се било шта напише.
Укупна меморија је подељена на 16 сектора нумерисаних од 0 до 15. Сваки сектор садржи 4 блока, означена од 0 до 3 унутар тог сектора. Сваки блок чува 16 бајтова података , односно 16 позиција нумерисаних од 0 до 15, тако да сваки сектор нуди 64 бајта.
Унутар та четири блока по сектору, само три су намењена за чување корисничких података: блокови 0, 1 и 2 сваког сектора (осим сектора 0, који има посебне карактеристике). Последњи блок сваког сектора, блок 3, познат је као трејлер блок . Он чува кључеве за шифровање и битове приступа који контролишу које су операције дозвољене у том сектору.
У трејлеру, 16 бајтова је подељено на следећи начин:
- Кључ А.: 6 бајтова.
- Услови приступа: 3 бајта која дефинишу дозволе за читање/писање, аутентификацију и видљивост кључа.
- Неискоришћени бајт (U): 1 бајт који се не користи.
- Тастер Б.: 6 бајтова.
Картице које долазе из фабрике са модулима обично имају кључ А и кључ Б иницијализоване на FF FF FF FF FF FF , што је изузетно небезбедно, јер свако ко познаје стандард може да аутентификује и измени садржај картице. Релативно уобичајена пракса у „уради сам“ пројектима је коришћење истих кључева у свим секторима, иако би за праву безбедност било боље диверзификовати их.
Штавише, блок 0 сектора 0 је посебан: он чува UID картице (обично 4 бајта код ових MIFARE Classic картица) и податке произвођача. Овај блок се у пракси сматра само за читање; покушај његове измене може неповратно оштетити картицу.
Промените тастере А и Б у сектору
Ако желите да користите MIFARE картицу у Arduino и RC522 пројекту на било који смислен начин, прво што треба да урадите је да промените подразумеване тастере . Ово спречава било кога са читачем и стандардном библиотеком да неовлашћено мења вашу картицу.
Основна идеја за ажурирање кључева одређеног сектора (на пример, сектор 15) је следећа:
- Дефинишите тренутне кључеве у коду (фабричке вредности, ако нису промењене).
- Дефинишите нове кључне речи А и Б које желите да користите у том сектору.
- Израчунајте број блокова приколице за тај сектор, који је сектор * 4 + 3 (за сектор 15, блок 63).
- Прво се аутентификујте са тренутним кључем А користећи PCD_Authenticate() о блоку приколице.
- Прочитајте трејлер блок са MIFARE_Read() да добијете свој садржај.
- Измените бајтове који одговарају новим кључевима у баферу.
- Поново потврдите идентитет ако је потребно (на пример, помоћу кључа Б).
- Напишите ажурирани блок трејлера са MIFARE_Write().
Током овог процеса, кључно је да не померате картицу са читача док се операција не заврши , јер прекинуто писање у трејлер блок може учинити сектор недоступним. Након што се кључеви промене, такође ћете морати да ажурирате Ардуино код да бисте користили ове нове кључеве у будућим операцијама на том сектору.
Блокови читања и писања: симулација транспортне картице
Веома илустративна примена читања и писања помоћу MIFARE Classic-а је симулација понашања пуњиве картице за јавни превоз . Идеја је једноставна: картица чува одређени број путовања у одређеном блоку, а систем вам омогућава да учитате путовања (допуните их) или их користите (валидација при укрцавању у аутобус или трамвај).
У ту сврху, сектор 15 би могао бити резервисан за корисничке податке, на пример, а један од његових блокова података (на пример, блок 60) би могао бити коришћен за чување бројача путовања. Број доступних путовања се чува у бајту 0 блока. Преостали бајтови блока би могли бити коришћени за друге податке или једноставно остављени на нули.
Типичан ток кода за део за поновно учитавање би био:
- Дефинисати Тастер А и тастер Б важећи прописи који штите дотични сектор (на пример, они које смо променили у претходном кораку).
- Дефинишите број сектора, блок података (60) и трејлер блок (63).
- Декларисати низ од 16 бајтова (blockData) где ће први бајт представљати број путовања.
- Сваки пут када се картица приближи читачу, Прочитај блок 60 користећи MIFARE_Read() да бисте добили тренутна путовања.
- Додајте број путовања за пуњење (на пример, 10) очитаној вредности.
- Ажурирајте податке. Блокирајте новим бројем путовања.
- Аутентификујте кључем А у односу на одговарајући блок трејлера.
- Напиши блок 60 са MIFARE_Write().
- Поново прочитајте да бисте проверили да ли је вредност исправно ажурирана.
За део који се односи на потрошњу путовања (валидација на аутобусу), код је практично идентичан, али уместо сабирања, од бројача се одузима јединица. Пре одузимања, проверава се да ли је очитана вредност нула: ако нема преосталих путовања, приступ се одбија и корисник се позива да поново учита бројач . Ако је бројач већи од нуле, смањује се, блок се поново уписује, а број преосталих путовања се приказује на екрану.
У оба случаја је важно правилно обрадити повратне кодове функција библиотеке MFRC522 (нпр. грешке аутентификације или писања) и увек зауставити шифровану комуникацију са PCD_StopCrypto1() и саму картицу са PICC_HaltA() на крају сваког циклуса.
Једноставна контрола приступа заснована на UID-у
Још један класичан пројекат који користи RC522 и Arduino је основни систем контроле приступа где се улаз одобрава или забрањује на основу UID-а представљене плоче. Овај приступ не користи интерну меморију плоче, већ само њен јединствени идентификатор, и стога је прилично ограничен у погледу безбедности, али служи као кратак пример.
Типичан приступ је:
- Прочитајте UID картице користећи основне библиотечке функције (PICC_IsNewCardPresent, PICC_ReadCardSerial, итд.).
- Копирајте бајтове прочитаног UID-а у привремени низ (нпр. ActualUID).
- Дефинишите у коду неколико низова са UID-овима овлашћених картица (на пример, Корисник1, Корисник2).
- Направите функцију поређења низова бајтова која враћа тачно ако су оба идентична.
- Упоредите стварни UID са сваким овлашћеним UID-ом и, ако се нешто подудара, активирајте дигитални излаз, прикажите поруку „Приступ одобрен“ или активирајте електричну браву.
- Ако се не подудара ни са једним од њих, прикажите „Приступ одбијен“ и држите систем затвореним.
У стварном окружењу, такав систем је подложан клонирању ознака јер многи јефтини читачи омогућавају копирање или емулацију UID-ова. Да би се повећала безбедност, било би неопходно користити интерну меморију картице, прилагођене кључеве и могуће робусније криптографске механизме од оних код MIFARE Classic-а, чија се безбедност тренутно увелико доводи у питање. Упркос томе, служи као одличан педагошки пример за учење тока рада читања картица и интеграције са физичким актуаторима.
Са свим наведеним, сада чврсто разумете основне RFID концепте, разумете како се понашају различити фреквентни опсези, знате унутрашње функционисање MIFARE Classic 1K картице, савладали сте основно повезивање и коришћење RC522 модула са Arduino-ом и детаљно сте видели како се читају и пишу блокови за креирање система из стварног света попут картица за контролу приступа или транзитних картица . Одавде, следећи природан корак је комбиновање RFID-а са другим модулима (LCD екрани, релеји, Wi-Fi, базе података у облаку) и учење како да контролишете паметне сијалице како бисте изградили свеобухватнија решења која су још ближа професионалним системима које свакодневно виђате у продавницама, јавном превозу и уређајима за бесконтактно плаћање.
