Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Lexuesi buxhetor UHF RFID dhe zhvillimi i tij. Lexuesi RFID: duke folur për teknologjinë

Çdo sistem identifikimi i frekuencave radio (RFID) përbëhet nga një pajisje leximi (lexues, lexues ose pyetës) dhe një transponder (i njohur gjithashtu si etiketë RFID, ndonjëherë përdoret edhe termi etiketë RFID). Në këtë artikull do të shikojmë një pajisje të thjeshtë për leximin e çelësave RFID që mbështesin protokollin EM4100 dhe funksionojnë në një frekuencë prej 125 kHz. Ky lloj çelësi RFID mund të jetë në formën e një fob çelësi ose karte krediti (Figura 1).

Komponenti kryesor i lexuesit është Mikrokontrollues AVR, i cili lexon numrin unik të identifikimit 10-shifror të çelësit dhe ia dërgon Kodimi ASCII Nga ndërfaqe serike(UART) në 2400 bps në pajisjen Host. Me fjalë të tjera, lexuesi është modul i veçantë, i lidhur me procesorin kryesor ose mikrokontrolluesin e sistemit (Figura 2).

Diagrami skematik i lexuesit RFID është paraqitur në figurën 3.

Figura 3.

Le të shqyrtojmë tiparet kryesore të qarkut. Mikrokontrolluesi përdor një modulator të integruar PWM për të gjeneruar dalje PB0 pulset drejtkëndëshe me një frekuencë prej 125 kHz. Nëse dalja PB0 është log. 0 (buza në rënie e pulsit), transistori T1 është në gjendje të mbyllur dhe një tension furnizimi +5 V aplikohet në spiralen L1 përmes rezistencës R1. Buza në rritje në daljen PB0 (log 1) hap transistorin T1 dhe terminali i sipërm i spirales është i lidhur me tokën. Në këtë moment, spiralja lidhet paralelisht me kondensatorin C2, duke formuar një gjenerator LC (qark oshilues). Transistori ndërron 125,000 herë në sekondë (125 kHz). Si rezultat, spiralja gjeneron një sinjal sinusoidal me një frekuencë prej 125 kHz (Figura 4).

Moduli i lexuesit gjeneron një fushë elektromagnetike, energjia e së cilës përdoret për të fuqizuar çelësin RFID. Transferimi i energjisë midis çelësit RFID dhe lexuesit bazohet në parimin e funksionimit të një transformatori konvencional: dredha-dredha parësore e transformatorit krijon një emf të induktuar në të gjitha mbështjelljet e tjera. Për rastin tonë, mbështjellja kryesore është spiralja e lexuesit, dhe mbështjellja dytësore është spiralja e çelësit RFID. Elementet D1, C3 dhe R5 formojnë një demodulator të sinjalit të modulimit të amplitudës.

Shkëmbimi i të dhënave ndërmjet çelësit dhe lexuesit

Procesi i shkëmbimit të të dhënave midis çelësit RFID dhe lexuesit është shumë i thjeshtë, por i menduar deri në detajet më të vogla. Nëse çelësi RFID duhet të transmetojë një regjistër. 0, atëherë lidh një "ngarkesë" të caktuar me burimin e tij të energjisë, i cili kërkon më shumë energji të transmetuar nga lexuesi. Kjo do të shkaktojë një rënie të lehtë të tensionit në anën e lexuesit; Është ky nivel që perceptohet nga lexuesi si një regjistër. 0 (Figura 5).

Çelësi RFID futet rast i përgjithshëm transmeton 64 bit të dhëna në sekuencën e mëposhtme (Figura 6):

  1. 9 bitët e parë (gjithmonë log. 1) janë bit startues, që tregojnë fillimin e shkëmbimit të të dhënave.
  2. 4 bit - më pak i rëndësishëm pjesë të rëndësishme zakon numrin e identifikimit(D00 - D03).
  3. 1 bit (P0) - bit i barazisë së 4 biteve të mëparshëm.
  4. 4 bit janë pjesët më të rëndësishme të numrit të identifikimit të përdoruesit (D04 - D07).
  5. 1 bit (P1) - bit i barazisë së 4 biteve të mëparshëm.
  6. 4 bit - pjesa e parë e 32-bit numër serikÇelësi RFID (D08 - D11).
  7. 1 bit (P2) - bit i barazisë së 4 biteve të mëparshëm.
  8. Më pas, transmetohen grupet e mëposhtme me 4 bit të numrit të serisë së çelësit, secili me një bit barazie.
  9. Pastaj 4 bitet e barazisë transmetohen kolonë për kolonë. Për shembull, biti i barazisë PC0 për bitet D00, D04, D08, D12, D16, D20, D24, D28, D32 dhe D36.
  10. 1 bit ndalimi.

Integriteti i të dhënave kontrollohet nga mikrokontrolluesi duke llogaritur bitet e barazisë për çdo rresht dhe kolonë dhe duke e krahasuar atë me të dhënat e marra nga çelësi RFID.

Dizajni i mbështjelljes.

Induktori pa kornizë në lexues me një diametër prej 120 mm është i mbështjellë me një tel me diametër 0,5 mm dhe ka 58 kthesa, por autori rekomandon shtimin e 2 - 3 kthesave të tjera gjatë dredha-dredha. Për të përmirësuar efikasitetin e spirales dhe për të rritur distancën e leximit të çelësit RFID, është e nevojshme të kryhet kalibrimi qark oscilues. Nëse, pasi të keni lidhur një oshiloskop në pikën e lidhjes midis R1 dhe L1, shihni majat e shtrembëruara në ekranin e pajisjes (Figura 7), atëherë kjo tregon nevojën për të kalibruar spiralen L1.

Kalibrimi mund të kryhet në dy mënyra pas furnizimit me energji në modul.

  1. Lidhni sondat e oshiloskopit në pikën e lidhjes midis R1 dhe L1 dhe, duke rritur ose ulur numrin e rrotullimeve të spirales L1, eliminoni shtrembërimin e sinjalit.
  2. Nëse nuk keni një oshiloskop, atëherë lëvizni ngadalë tastin RFID në spirale derisa tasti të njihet, siç tregohet nga një bip. Nëse çelësi zbulohet nga një distancë prej 2 cm, atëherë është e nevojshme të shtoni/hiqni disa kthesa dhe më pas të kontrolloni përsëri distancën nga e cila çelësi mund të lexohet me siguri. Duke përdorur kalibrimin, autori i skemës arriti një lexim të besueshëm të çelësit RFID nga 3 cm.

Kur programoni mikrokontrolluesin, është e nevojshme të vendosni konfigurimin e mëposhtëm të biteve të siguresave: bajt i ulët 0x7A dhe bajt i lartë 0x1F (mikrokontrolluesi funksionon nga një gjenerator i integruar i orës 9,6 MHz, ndarës frekuenca e orës me aftësi të kufizuara në 8). Kodi i programit zë 1024 Bajt në kujtesën e mikrokontrolluesit - përdoret i gjithë kapaciteti i disponueshëm i memories së mikrokontrolluesit ATtiny13. Prandaj, në të ardhmen, kur zgjeroni funksionalitetin e lexuesit, është më mirë të përdorni një tjetër mikrokontrollues AVR me 8 pin, për shembull.

Shkarkimet:

Kodi burimor i programit të mikrokontrolluesit (AVRStudio 6), firmware (.hex) dhe diagrami i qarkut -

Sot do të flas për modulin RFID RC522, bazuar në çipin MFRC522. Furnizimi me energji elektrike 3.3V, diapazoni i zbulimit deri në 6cm. Projektuar për lexim dhe shkrim Etiketat RFID me një frekuencë prej 13.56 MHz. Frekuenca në në këtë rastështë shumë e rëndësishme, pasi etiketat RFID ekzistojnë në tre intervale frekuencash:


  • Shenjat e diapazonit LF (125-134 kHz)

  • Etiketat e brezit HF (13,56 MHz)

  • Etiketat e brezit UHF (860-960 MHz)

Ky modul i veçantë funksionon me etiketat e brezit HF, veçanërisht me protokollin MIFARE.

Për të punuar me modulin mund të përdorni bibliotekë standarde RFID i përfshirë Arduino IDE, megjithatë, ekziston një bibliotekë tjetër e shkruar posaçërisht për këtë modul - MFRC522 (1 MB). Të dy bibliotekat janë mjaft të përshtatshme, por MFRC522 ka më shumë funksione speciale që ju lejojnë të zvogëloni kodin përfundimtar të programit sa më shumë që të jetë e mundur.

Lidhje

Disa njerëz do të hasin një problem - emri i kunjave në shumicën e mësimeve dhe udhëzuesve mund të mos përputhet me pikën në modulin tuaj. Nëse skicat tregojnë pinin SS, por moduli juaj nuk e ka atë, atëherë ka shumë të ngjarë që është shënuar si SDA. Më poshtë do të jap një tabelë lidhjeje të modulit për bordet më të zakonshme.

MFRC522 Arduino Uno Arduino Mega Arduino Nano v3

Arduino Leonardo/Micro

Arduino Pro Micro
RST 9 5 D9 RESET/ICSP-5 RST
SDA (SS) 10 53 D10 10 10
MOSI 11 (ICSP-4) 51 D11 ICSP-4 16
MISO 12 (ICSP-1) 50 D12 ICSP-1 14
SCK 13 (ICSP-3) 52 D13 ICSP-3 15
3.3 V 3.3 V 3.3 V Stabilizues 3.3V Stabilizues 3.3V Stabilizues 3.3V
GND GND GND GND GND GND

Kunjat e kontrollit SS(SDA) dhe RST janë të specifikuara në skicë, kështu që nëse bordi juaj është i ndryshëm nga ai që do të përdor në shembujt e mi dhe po përdor UNO R3, tregoni kunjat nga tabela në fillim të skicës :


#define SS_PIN 10 #define RST_PIN 9

Shembulli nr. 1: Leximi i numrit të kartës

Le të shohim një shembull nga biblioteka RFID - cardLead. Nuk shfaq të dhëna nga karta, por vetëm numrin e saj, i cili zakonisht është i mjaftueshëm për shumë detyra.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // Të dhënat për numrin e kartës ruhen në 5 variabla, ne do t'i kujtojmë ato për të kontrolluar nëse e kemi lexuar tashmë një kartë të tillë int serNum0; int serNum1; int serNum2; int serNum3; int serNum4; void setup() ( Serial.begin(9600); SPI.begin(); rfid.init(); ) void loop() ( if (rfid.isCard()) ( if (rfid.readCardSerial()) ( // Krahasoni numrin e kartës me numrin e kartës së mëparshme nëse (rfid.serNum != serNum0 && rfid.serNum != serNum1 && rfid.serNum != serNum2 && rfid.serNum != serNum3 && rfid.serNum != serNum4) ( / * Nëse karta është e re, atëherë lexoni */ Serial.println(" "); Serial.println("Karta e gjetur"); serNum0 = rfid.serNum; serNum1 = rfid.serNum; serNum2 = rfid.serNum; serNum3 = rfid .serNum; serNum4 = rfid.serNum; //Nxjerr numrin e kartës Serial.println("Numri i kartës:"); Serial.print("Dhjetor: "); Serial.print(rfid.serNum,DEC); Serial.print( )", "); Serial .print(rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.print(", "); Serial.print( rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.println(" "); Serial.print ("Hex: "); Serial.print(rfid .serNum,HEX);Serial .print(", ");Serial.print(rfid.serNum,HEX);Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.println(" "); ) else ( /* Nëse kjo është tashmë një kartë e lexuar, thjesht printoni pikën */ Serial.print("."); ) ) ) rfid.halt(); )

Skica është ngarkuar, drita LED e energjisë në modul ndizet, por moduli nuk i përgjigjet kartës? Nuk ka nevojë për panik ose vrap për të kërkuar shembujt "korrektë" të punës. Me shumë mundësi, thjesht nuk ka asnjë kontakt në njërën nga kunjat - vrimat në tabelë janë pak më të mëdha se trashësia e kërcyesit, kështu që ia vlen të përpiqeni t'i rirregulloni ato. A nuk është ndezur LED në tabelë? Provoni të ndryshoni kërcyesin që çon në 3.3V dhe sigurohuni që ai të jetë i lidhur me 3.3V në tabelë; furnizimi me energji 5V mund ta vrasë me lehtësi tabelën tuaj.

Le të themi se gjithçka funksionon për ju. Pastaj, duke lexuar etiketat RFID në monitor porta serike do të shohim sa vijon:


Këtu lexova 3 etiketa të ndryshme, dhe siç mund ta shihni, ai i lexoi me sukses të tre.

Shembulli #2: Leximi i të dhënave nga një kartë

Le të shqyrtojmë një opsion më të sofistikuar - do të lexojë jo vetëm numrin e kartës, por edhe të gjitha të dhënat e disponueshme për lexim. Këtë herë le të marrim një shembull nga biblioteka MFRC522 - DumpInfo.


#include #include #define RST_PIN 9 // #define SS_PIN 10 // MFRC522 mfrc522(SS_PIN, RST_PIN); ( ) ; // Inicializoni autobusin SPI mfrc522.PCD_Init(); // Inicializoni Moduli RFID ShowReaderDetails(); // Printoni të dhëna për modulin MFRC522 Serial.println(F("Skanoni PICC për të parë UID, llojin dhe blloqet e të dhënave...")); ) void loop() ( // Në kërkim të harta e re nëse (! mfrc522.PICC_IsNewCardPresent()) (kthim; ) // Zgjidhni një nga kartat nëse (! mfrc522.PICC_ReadCardSerial()) (kthim;) // Nxjerr të dhëna nga karta mfrc522.PICC_DumpToSerial(&(mfrc)2 ); ) void ShowReaderDetails() ( // Merrni numrin e versionit të modulit byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);Serial.print(F("Versioni i softuerit MFRC522: 0x")); Serial.print(v, HEX); nëse (v == 0x91) Serial.print(F(" = v1.0")); përndryshe nëse (v == 0x92) Serial.print(F(" = v2.0")); tjetër Serial.print( F (" (i panjohur)")); Serial.println(""); // Kur marrim 0x00 ose 0xFF, transmetimi i të dhënave prishet nëse ((v == 0x00) || (v == 0xFF)) ( Serial .println( F("PARALAJMËRIM: Dështim komunikimi, a është MFRC522 i lidhur siç duhet?")); ) )

Nëse shembulli i mëparshëm funksionoi pa gabime, atëherë as ky nuk duhet të jetë problem. Megjithëse, leja e metrosë, e cila dha numrin e kartës pa asnjë problem në shembullin e mëparshëm, doli të kishte një lloj të dhënash të pazbuluar në këtë, dhe moduli nuk mund të lexonte asgjë tjetër përveç numrit të kartës.

Si rezultat, pasi kemi lexuar të dhënat nga karta, marrim llojin, identifikuesin dhe të dhënat e saj nga 16 sektorë të memories. Duhet të theksohet se kartat standarde MIFARE 1K përbëhen nga 16 sektorë, secili sektor përbëhet nga 4 blloqe dhe çdo bllok përmban 16 bajt të dhënash.


Shembulli nr. 3: Shkrimi i një identifikuesi të ri në kartë

Në këtë shembull, ne do të shikojmë ndryshimin e identifikuesit të kartës (UID). Është e rëndësishme të dini se jo të gjitha kartat mbështesin ndryshimin e ID-së. Karta mund të rishkruhet, por kjo do të thotë vetëm se të dhënat janë të rishkruhen. Fatkeqësisht, kartat që kisha në duart e mia nuk mbështesin rishkrimin e UID, por unë do të jap kodin e skicës këtu për çdo rast.


#include #include /* Vendos një UID të ri këtu */ #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::Çelësi MIFARE_Key; void setup() ( Serial.begin(9600); ndërsa (!Serial); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("Paralajmërim: ky shembull mbishkruan UID-në e kartës suaj të ndryshueshme UID, përdorni me kujdes!")); për (bajt i = 0; i< 6; i++) { key.keyByte[i] = 0xFF; } } void loop() { if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { delay(50); return; } // Считываем текущий UID Serial.print(F("Card UID:")); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); // Записываем новый UID byte newUid = NEW_UID; if (mfrc522.MIFARE_SetUid(newUid, (byte)4, true)) { Serial.println(F("Wrote new UID to card.")); } // Halt PICC and re-select it so DumpToSerial doesn"t get confused mfrc522.PICC_HaltA(); if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { return; } // Считываем данные с карты Serial.println(F("New UID and contents:")); mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); delay(2000); }

Shembulli nr. 4: Shkrimi i të dhënave në një kartë

Këtu është më në fund ajo që ne kemi arritur për kaq shumë kohë - regjistrimi i të dhënave në kartë. Pjesa më e ëmbël e punës me një modul është aftësia për të bërë një kopje tashmë harta ekzistuese, për të shtuar ose ndryshuar diçka, kjo është shumë më interesante sesa thjesht të lexosh.

Le të ndryshojmë një nga blloqet e të dhënave në hartë:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::Çelësi MIFARE_Key; void setup() ( Serial.begin(9600); ndërsa (!Serial); SPI.begin(); mfrc522.PCD_Init(); // Përgatitni çelësin // përdorni tastin FFFFFFFFFFFFFFh që është standardi për karta bosh për (bajt i = 0; i< 6; i++) { key.keyByte[i] = 0xFF; } Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } void loop() { // Ждем новую карту if (! mfrc522.PICC_IsNewCardPresent()) return; // Выбираем одну из карт if (! mfrc522.PICC_ReadCardSerial()) return; // Показываем подробности карты Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Проверяем совместимость if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } // В этом примере мы используем первый сектор данных карты, блок 4 byte sector = 1; byte blockAddr = 4; byte dataBlock = { // Данные, которые мы запишем на карту 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, 0x08, 0x09, 0xff, 0x0b, // 9, 10, 255, 12, 0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16 }; byte trailerBlock = 7; byte status; byte buffer; byte size = sizeof(buffer); // Аутентификация Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Показываем текущие данные сектора Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // Читаем данные из блока Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); // Аутентификация Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Записываем данные в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // Читаем данные снова, чтобы проверить, что запись прошла успешно Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(F("Checking result...")); byte count = 0; for (byte i = 0; i < 16; i++) { if (buffer[i] == dataBlock[i]) count++; } Serial.print(F("Number of bytes that match = ")); Serial.println(count); if (count == 16) { Serial.println(F("Success:-)")); } else { Serial.println(F("Failure, no match:-(")); Serial.println(F(" perhaps the write didn"t work properly...")); } Serial.println(); // Выводим данные Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }

Dhe si rezultat, marrim një kartë me një bllok të modifikuar të të dhënave:


Tani, pasi keni mësuar të lexoni dhe shkruani blloqe të të dhënave të kartave, mund të eksperimentoni me etiketat që ka shumë të ngjarë të keni - leje, karta udhëtimi Transporti publik. Provoni të lexoni dhe shkruani të dhëna nga këto karta, disa leje të kopjuara nuk dëmtojnë kurrë, apo jo?)

Kjo është e gjitha, abonohuni dhe ndiqni botimet. Herën tjetër do t'ju tregoj dhe do t'ju tregoj se si të përdorni një standard shfaqja e karaktereve 1602 shtoni karaktere të personalizuara, duke shtuar në thelb grafikë në ekran.

Mësimi i sotëm është se si të përdorni një lexues RFID me Arduino për të krijuar një sistem të thjeshtë mbylljeje, me fjalë të thjeshta- Kyçja RFID.

RFID (identifikimi i frekuencës së radios, identifikimi i radiofrekuencës) - një metodë për identifikimin automatik të objekteve, në të cilën të dhënat e ruajtura në të ashtuquajturit transponderë, ose etiketa RFID, lexohen ose shkruhen duke përdorur sinjale radio. Çdo sistem RFID përbëhet nga një pajisje leximi (lexues, lexues ose pyetës) dhe një transponder (i njohur gjithashtu si etiketë RFID, ndonjëherë përdoret edhe termi etiketë RFID).

Ky tutorial do të përdorë një etiketë RFID me Arduino. Pajisja lexon identifikuesin unik (UID) të çdo etikete RFID që vendosim pranë lexuesit dhe e shfaq atë në ekranin OLED. Nëse UID e etiketës është vlera e paracaktuar, i cili ruhet në memorien Arduino, atëherë në ekran do të shohim mesazhin “Unlocked”. Nëse ID unike nuk është e barabartë me një vlerë të paracaktuar, mesazhi "E zhbllokuar" nuk do të shfaqet - shihni foton më poshtë.

Kalaja është e mbyllur

Kyçja është e hapur

Pjesët e nevojshme për të krijuar këtë projekt:

  • Lexuesi RFID RC522
  • Ekran OLED
  • Tabela e bukës
  • Tela

Detaje shtese:

  • Bateria (powerbank)

Kostoja totale e komponentëve të projektit ishte afërsisht 15 dollarë.

Hapi 2: Lexuesi RFID RC522

Çdo etiketë RFID përmban një çip të vogël (kartë e bardhë e treguar në foto). Nëse ndriçoni një elektrik dore në këtë kartë RFID, mund të shihni çipin e vogël dhe spiralen që e rrethon atë. Ky çip nuk ka një bateri për të gjeneruar energji. Ai merr energji nga lexuesi me valë duke përdorur këtë bobina e madhe. Është e mundur të lexoni një kartë RFID si kjo deri në 20 mm larg.

I njëjti çip ekziston edhe në etiketat e çelësave RFID.

Çdo etiketë RFID ka një numër unik që e identifikon atë. Ky është UID që shfaqet në ekranin OLED. Përveç këtij UID, çdo etiketë mund të ruajë të dhëna. Kjo lloj karte mund të ruajë deri në 1 mijë të dhëna. Impresionuese, apo jo? Kjo veçori nuk do të përdoret sot. Sot, gjithçka që është me interes është identifikimi i një karte specifike nga UID e saj. Kostoja e lexuesit RFID dhe këtyre dy kartave RFID është rreth 4 dollarë.

Hapi 3: Ekrani OLED

Mësimi përdor një monitor OLED 0,96" 128x64 I2C.

Kjo është shumë shfaqje e mirë për përdorim me Arduino. Kjo Ekran OLED dhe kjo do të thotë se ai ka konsumi i ulët i energjisë. Konsumi i energjisë i këtij ekrani është rreth 10-20 mA dhe varet nga numri i pikselëve.

Ekrani ka një rezolucion prej 128 me 64 piksele dhe ka përmasa të vogla. Ekzistojnë dy opsione të shfaqjes. Njëra prej tyre është pikturë njëngjyrëshe, dhe tjetra, si ajo e përdorur në mësim, mund të shfaqë dy ngjyra: të verdhë dhe blu. Pjesa e sipërme e ekranit mund të jetë vetëm e verdhë, dhe Pjesa e poshtme- blu.

Ky ekran OLED është shumë i ndritshëm dhe ka një bibliotekë të shkëlqyer dhe shumë të bukur që Adafruit ka zhvilluar për këtë ekran. Përveç kësaj, ekrani përdor një ndërfaqe I2C, kështu që lidhja me Arduino është tepër e lehtë.

Ju duhet të lidhni vetëm dy tela përveç Vcc dhe GND. Nëse jeni i ri në Arduino dhe dëshironi të përdorni një ekran të lirë dhe të thjeshtë në projektin tuaj, filloni këtu.

Hapi 4: Lidhja e të gjitha pjesëve

Karakteristikat:
Frekuenca e etiketës: 125 KHz
Furnizimi me energji elektrike: +5 VDC
Të dhënat dalëse: seriale, 2400 bps 8N1. Lëshohet një numër serial me 10 shifra.

Fotografia 1:Figura 2:

Prezantimi

Ky lexues RFID punon me etiketa 125 kHz në kartat e madhësisë së kartës së kreditit dhe çelësat 125 kHz (Figura 1). Kjo përdor protokollin EM4100. Kur afroni një etiketë RFID (4-5 cm) me bobinën e lexuesit (L1), lexuesi do të lexojë ID-në unike 10-shifrore të etiketës dhe do ta transmetojë atë si Personazhet ASCII nëpërmjet daljes serike në 2400 bps.

Qarku përfshin një alarm që lëshon me ndërprerje sinjale zanore kur etiketa lexohet me sukses.

Përshkrim

Do të përpiqem të shpjegoj me pak fjalë se si funksionon një lexues RFID. Kontrolluesi ATtiny13 përdor funksionin PWM për të krijuar një sinjal me valë katrore 125 kHz. Ky sinjal del nga pin PB0. Në skajin në rënie të pulsit në pinin PB0 (Zo logjike "0"), transistori T1 është i mbyllur. Kështu, spiralja L1 ngacmohet përmes rezistencës R1 (100 Ohm nominale) nga një tension prej +5 V. Kur rritet pulsi në pinin PB0 (njësia logjike "1"), hapet transistori T1 dhe një nga terminalet e spirales L1 lidhet me GND. Kondensatori C2 është i lidhur paralelisht me spiralen L1, duke krijuar një oshilator LC. Të dhënat e kalimit të spirales L1 nga logjika një në zero logjike ndodhin 125,000 herë në sekondë (125 kHz).

Figura 3: Lëkundjet e sinjalit me frekuencë 125 kHz, të cilat transmetohen nga spiralja L1 dhe kondensatori C2.

Lexuesi RFID transmeton energji në transponder (etiketë) duke krijuar një fushë elektromagnetike. Transferimi i energjisë ndërmjet lexuesit RFID dhe etiketës ndodh në të njëjtin parim si funksionimi transformatorëve , duke konvertuar tensionin prej 220 V AC në 12 V AC, falë fushës magnetike të krijuar nga mbështjellja primare. Në rastin tonë, dredha-dredha kryesore është lexuesi RFID, dhe dredha-dredha dytësore është etiketa RFID. Dallimi i vetëm është se në qarkun e lexuesit RFID nuk ka qark magnetik çeliku midis dy bobinave (njëra spirale është e vendosur në anën e lexuesit, dhe spiralja tjetër është në etiketën RFID). Komponentët D1, C3 dhe R5 përbëjnë demodulatorin Sinjali AM (AM = Modulimi i Amplitudës).

Transferimi i të dhënave ndërmjet etiketave dhe lexuesit.

Si i transmetojnë etiketat të dhënat lexuesit? Shume e thjeshte! Kur një etiketë dëshiron të dërgojë një zero logjike "0" te lexuesi, ai aplikon një "ngarkesë" në linjën e tij të furnizimit me energji elektrike për të marrë më shumë energji nga lexuesi. Kjo shkakton një rënie të vogël të tensionit në anën e lexuesit RFID. Ky nivel i tensionit është zero logjike "0" (shih Figurën 4). Njëkohësisht me lexuesin që transmeton një sinjal me një frekuencë prej 125 kHz, ai lexon tensionin sinjali i transmetuar përmes filtrave D1, C3 dhe R5, C1. Kur etiketa ul tensionin, siç u tha më herët, lexuesi e lexon këtë rënie të tensionit si zero logjike "0". Nëse etiketa nuk kërkon energji shtesë, nuk shkakton rënie të tensionit. Kjo korrespondon me logjikën "1" (Figura 3). Gjatësia e "njëve" ose "zerove" varet nga shpejtësia serike e transferimit të të dhënave. Për shembull, për një frekuencë bartëse prej 125 kHz nuk marrim një shpejtësi të dhënash prej 125,000 bit për sekondë! Transmetimi i të dhënave nga etiketa te lexuesi varion nga 500 në 8000 bit në sekondë.

Figura 4:Pamja e ekranit të të dhënave të transmetuara...10101...Figura 5


  • Një etiketë RFID 125 kHz transmeton 64 bit.
    1. 9 bitet e para jane bitet e fillimit te transmetimit (gjithmone "1").
    2. 4 bitet e ardhshme janë bitet më pak të rëndësishme të ID-së së përdoruesit (D00,..., D03).
    3. 1 biti tjetër (P0) është biti i barazisë së 4 biteve të mëparshëm.
    4. 4 bitët e ardhshëm janë pjesët më të rëndësishme të ID-së së përdoruesit (D04,..., D07).
    5. 1 biti tjetër (P1) është biti i barazisë së 4 biteve të mëparshëm.
    6. 4 bitët e ardhshëm janë pjesa e parë e numrit serial 32-bit të etiketës (D08,..., D11).
    7. Biti PC0 është biti i barazisë së biteve D00, D04, D08, D12, D16, D20, D24, D28, D32 dhe D36 (bitët janë në të njëjtën kolonë).
    8. Bitet PC1, PC2, PC3 janë bitet e barazisë së tre kolonave të ardhshme.

Verifikimi i të dhënave kryhet duke përdorur kontrolluesin ATtiny13 duke llogaritur bitin e barazisë së çdo rreshti dhe çdo kolone me bitet e barazisë që merren në të dhënat e etiketës RFID të transmetuara.

Bërja e një spirale

Spiralja ka një diametër prej 120 mm dhe 58 kthesa. Për çdo rast, lini pak Tel bakri për 2-3 kthesa shtesë (gjithsej 60-61 kthesa). Për arritje distancë maksimale midis etiketës RFID dhe lexuesit (midis etiketës dhe spirales së antenës së lexuesit), duhet të kalibroni spiralen. Nëse e lidhni oshiloskopin në pikën e përbashkët të lidhjes midis R1 dhe L1, do të shihni vendin e shënuar me një rreth të kuq në figurën në të majtë. Kjo do të thotë që spiralja L1 duhet të kalibrohet.

Si të kalibroni spiralen L1?

Aktivizoni lexuesin RFID:

1. Pasi të lidhni sondën e oshiloskopit me pikën e përbashkët R1, L1, përpiquni të hiqni ngadalë ose të shtoni pak Tel bakri(rritni ose ulni numrin e rrotullimeve) të spirales derisa zhurma të eliminohet.

2. Nëse nuk keni një oshiloskop, atëherë përpiquni ta zhvendosni etiketën RFID afër spirales L1 derisa etiketa të njihet nga lexuesi. Nëse shenja juaj zbulohet në një distancë prej 2 cm nga spiralja L1, atëherë provoni të shtoni disa rrotullime teli bakri në spiralen L1 për të siguruar që shenja të zbulohet në një distancë më të gjatë (p.sh. 3 cm).

Provoni të njëjtat hapa duke hequr mbështjelljet e telit të bakrit nga spiralja L1. Në këtë mënyrë ju do të merrni gamën maksimale të distancës midis shenjave dhe spirales L1.

Bëra një spirale L1 me diametër 120 mm me 58 kthesa, por më pas doja ta bëja një madhësi më të vogël. Kështu që e përkula spiralen në gjysmë derisa të dukej si një "figurë tetë" (formë si një figurë tetë) dhe u rikalibrova. Kështu, spiralja L1 në foto në fakt ka një diametër prej më pak se 120 mm.

Spiralja L1 në foto ka një diametër prej 60 mm dhe pothuajse 116 kthesa.

ProgramimiATtiny13

Set i bitave të konfigurimit (siguresave) për ATtiny13: Siguresa e lartë: 0x1F dhe Siguresa e ulët: 0x7A. Ky grup cilësimet ATtiny13 punon me një oshilator të brendshëm me një frekuencë prej 9.6 MHz. Funksioni i ndarjes me 8 të orës së sistemit është i çaktivizuar.

Versioni i firmuerit v1.00 merr 1024 bajt dhe zë 100% të memories Flash të kontrolluesit ATtiny13. Ndoshta kalimi në ndonjë AVR tjetër 8-pin si ATtiny85 do të ishte një ide e mirë nëse dëshironi të shtoni disa veçori në kodin burimor.

Projekti u hartua nga: Vassilis Serasidis ( Vassilis Serasidis) 18 gusht 2012
Gjuha e programimit: ME
Mjedisi i zhvillimit:
Mikrokontrolluesi:ATtiny13 (oshilator i brendshëm 9,6 MHz)

Lista e radioelementeve

Emërtimi Lloji Emërtimi sasi shënimDyqanblloku im i shënimeve
IC1 MK AVR 8-bit

ATtiny13

1 Në bllokun e shënimeve
IC2 Përforcues operacional

LM358

1 Në bllokun e shënimeve
IC3 Rregullator linear

LM78L05

1 Në bllokun e shënimeve
T1 Transistor MOSFET

BS170

1 Në bllokun e shënimeve
T2 Tranzistor bipolar

BC547B

1 Në bllokun e shënimeve
D1 Diodë ndreqës

1N4148

1 Në bllokun e shënimeve
C1 Kondensator12 nF1 Në bllokun e shënimeve
C2 Kondensator1,5 nF1 Në bllokun e shënimeve
C3 Kondensator4,7 nF1 Në bllokun e shënimeve
C4, C5 Kondensator elektrolitik100 µF2 Në bllokun e shënimeve
C6 Kondensator100 nF1 Në bllokun e shënimeve
R1 Rezistencë

100 Ohm

1 Në bllokun e shënimeve
R2 Rezistencë

1 kOhm

1 Në bllokun e shënimeve
R3 Rezistencë

390 kOhm

1 Në bllokun e shënimeve
R4, R8 Rezistencë

33 kOhm

2 Në bllokun e shënimeve
R5 Rezistencë

270 kOhm

1 Në bllokun e shënimeve
R6 Rezistencë

Pas disa vitesh pune në tema RFID dhe zhvillimit të lexuesve të ndryshëm për modelet e transponderëve të standardeve të njohura si Mifare, EMMARINE, TIRIS... Shpesh fillova të hutohesha nga kjo pyetje - fjalë për fjalë. Vitin e kaluar fitoi popullaritet të gjerë lloje te ndryshme emulatorë për etiketat e njohura të protokollit dhe kopjues të ndryshëm të çelësave/çelësave.

Duke marrë parasysh numrin e madh të çipave specialë të disponueshëm në treg për protokollet e njohura RFID dhe lexuesit e lirë, përdorimin e gjerë të pajisjeve si oshiloskopët dixhitalë, sniferët dhe analizuesit e spektrit, kjo çështje është bërë më e ngutshme për shumë zhvillues. Pastaj vendosa të krijoj një protokoll shkëmbimi për një nga projektet që ndryshonte nga standardet e përshkruara më sipër.

Sigurisht, kjo ide nuk zgjidh problemet globale siguria e sistemit të ri dhe mund të analizohet nga zhvilluesit e tjerë nëse kanë pajisje, por çështja është se e gjithë kjo nuk përkon me standardet ekzistuese dhe i gjithë pajisja e kopjimit nuk do t'ju lejojë të kopjoni dhe rikrijoni shpejt një algoritëm të tillë. Sigurisht sistem të ngjashëm nuk paraqitet këtu zgjidhje e plotë problemet e sigurisë, por si të përshtatet RFID me sistem i mbyllur. Një plus i mirë për çështjen e sigurisë ndër të tjera të ngjashme sistemet pa telaështë vetë teknologjia RFID me frekuencë të ulët - nuk lejon aktivizimin e etiketave distancë e madhe.

Etiketat pasive janë me fuqi mjaft të ulët dhe kërkojnë një gjenerator mjaft të fuqishëm lexuesi për t'i fuqizuar ato; veçoritë e përhapjes së valëve të radios në këto frekuenca kufizojnë gjithashtu kufijtë e funksionimit të këtij sistemi. Gama aktuale e leximit të transponderëve rrallë i kalon 20 cm për standardet 125 KHz si EmMarine, le të themi standardi EM4001; për protokollet e tjera si Mifare (13,56 MHz) mund të jetë më i gjatë (1,5 metra për iso15693). Mund të arrihet distancë më të madhe lexim për lexuesit me frekuencë të ulët nëse rritni madhësinë e spirales dhe tensionin e furnizimit, përkatësisht, dhe fuqinë e lexuesit. Megjithatë, sisteme të tilla janë të mëdha dhe zakonisht të vështira për t'u bërë portative. Si rregull, sisteme të tilla zbatohen vetëm përgjithmonë - për shembull, për makinat.

Pra, tani në arkitekturën aktuale të sistemit tonë RFID. Për eksperimentet u zgjodh kontrolluesi atmel atmega8. Për qëllime të prodhimit të transponderëve, kjo duket si e tepruar. Sidoqoftë, në këtë rast, detyra kryesore e zhvillimit të një ndërfaqeje të re në një tabelë të gatshme zhvillimi me atmega u zgjidh, e ndjekur nga transferimi i këtij kodi në kontrollues më të lirë si tiny13. Për transponderin, algoritmi i funksionimit u ndërtua në bazë të modalitetit të gjenerimit PWM duke përdorur kohëmatësin T1 në modalitetin CTC me ndërprerje dhe rivendosje në koincidencë me OCR1. Të dhënat e transmetimit të transponderit lexohen nga EEPROM kur kontrolluesi është i ndezur. Në total, transponderi transmeton 10 bajt. Përmbajtja e transponderit EEPROM mund të shihet në Figura 1. Bajti i parë 0xE7 është një titull i kërkuar i paketës, pasi prania e tij kontrollohet së pari kur lexuesi analizon paketën.

8 bajtët e parë janë përmbajtja e paketës së transponderit, 2 bajtët e fundit përmbajnë shumën kontrolluese CRC16 të tetë bajtëve të parë të paketës. Për shembull, të dhënat e mëposhtme u regjistruan në transponderin tonë: paketa 0xE7, 0x05, 0xE8, 0x93, 0x43, 0x7F, 0x20, 0xFF dhe, në përputhje me rrethanat, kontrolli 0xF5 0xA8. Për të bërë transponderin tuaj unik, përveç bajtit të parë 0xE7, duhet të shkruani shtatë bajtët e ardhshëm në EEPROM dhe më pas të llogarisni kontrollin për tetë bajtët e parë. Pas kësaj, shkruani dy bajt CRC16 në fund të paketës në EEPROM. E lëmë bajtin e parë të pandryshuar - 0xE7. Kur transponderi është i ndezur, të dhënat e këtyre bajteve ndahen në bit dhe kodohen me gjatësinë e duhur të pulsit në përputhje me vlerën e regjistrit OCR. Për transmetim, 2 frekuenca 2KHz dhe 5KHz përdoren për të transmetuar "0" dhe "1" logjike. Përveç kësaj, të dhënat ndahen nga pulset e sinkronizimit - shenjat e fillimit të paketës.

Fig.1 Përmbajtja e paketës së transponderit.


Fig.2 Deponia e transmetimit të transponderit në ekranin e oshiloskopit virtual.

Diagrami i transponderit mund të shihet në Figura 3. Frekuenca e oshilatorit kryesor është 8 MHz. Furnizimi me energji i komanduesit +5V. Ju mund të përdorni një kontrollues mega8 të shënuar "L", pastaj mund të furnizohet me energji nga bateri litiumi 3v (parametrat për një çip të tillë janë +2.7.... +3.5). Në vend të këtij transistori, mund të përdorni çdo tjetër me fuqi të ulët Transistor NPN. Spiralja e transponderit është mbështjellë në një mandrel me diametër 50 mm me tel 0,22 mm dhe ka 50 kthesa. Në momentin që transponderi është aktivizuar - me furnizimi i jashtëm me energji elektrike. Në fazën tjetër, është planifikuar të bëhet një version pasiv i transponderit, i cili është mjaft i thjeshtë - të bëhet një izolim për fuqinë nga kjo spirale, të shtoni diodat e urës ndreqës dhe një stabilizues.


Fig.3 Qarku i transponderit.

Tani le të flasim për qarkun e lexuesit për këtë transponder. Qarku u përshtat në bazë të lexuesit të kartave EMMARINE të përdorur më parë. Pjesa e qarkut me gjeneratorin në 74hc4060 mund të fshihet në mënyrë të sigurt në këtë fazë, pasi tani për tani ne përdorim një etiketë aktive. Sidoqoftë, kjo pjesë e qarkut do të na duhet më vonë, kur të bëjmë një etiketë pasive dhe duhet të marrim energji nga lexuesi. Përndryshe, qarku nuk ndryshon dukshëm nga qarku i lexuesit për EMMARINE: detektor i pikut pasiv - filtër - amplifikues - krahasues. Qarku ka thjeshtësinë më të madhe të mundshme dhe ju lejon të lexoni të dhënat e transponderit në një distancë prej 10-12 cm me qarqe të akorduara mirë.

Ju mund ta thjeshtoni qarkun edhe më tej, duke lënë vetëm një detektor dhe një filtër, dhe të vendosni një transistor në dalje që do të luajë rolin e një krahasuesi, por unë nuk e bëra këtë. Në dalje marrim sinjal binar në formë drejtkëndëshe në përputhje me kohëzgjatjet e koduara të pulseve të transmetuara nga transponderi. Devijimet e lejuara të vlerave të elementeve në të cilat qarku është funksional është 5-10%. Furnizimi me energji elektrike për kontrolluesin dhe opamp +5V. Frekuenca e kuarcit të oshilatorit kryesor të kontrolluesit është 12 MHz. Dalja e krahasuesit në LM358 është e lidhur me pinin e ndërprerjes së jashtme të kontrolluesit INT0. Programi i kontrolluesit është konfiguruar të thërrasë një ndërprerje në një skaj në rritje në pinin e jashtëm të ndërprerjes INT0. Trajtuesi i ndërprerjeve kontrollon pulset e orës dhe më pas kontrollon kokën e paketës dhe shkruan përmbajtjen në buferin e kontrolluesit. Të dhënat e paketave të lexuara transmetohen përmes ndërfaqes RS232 në PC. Për të konfiguruar terminalin, ne specifikojmë parametrat e mëposhtëm: shpejtësia 57.6 Kb/s, 8 bit të dhënash, 1 bit ndalimi, pa barazi.

Kur merr një paketë, kontrolluesi llogarit shumën e kontrollit të bajteve të marra dhe i transmeton të dhënat në terminal (paketë dhe CRC). Nëse ka një ndeshje shumat e kontrollit llogaritur nga kontrollori dhe marrë në paketë, një sinjal del në pinin PORTB.0 (14) të kontrolluesit (LED1 në diagram). Mund të lidhet me këtë pikë një tweeter me një gjenerator të integruar ose një LED përmes një rezistence. Kur lexoni tastin e saktë, kontrolluesi çaktivizon ndërprerjet e jashtme dhe bën një vonesë 1s përpara leximit tjetër. Është dhënë gjithashtu mënyra e funksionimit të këtij lexuesi si bazë e një bllokimi RFID. Për ta bërë këtë, është e nevojshme të shkruani të gjithë bajtet e depozitimit të transponderit në EEPROM të kontrolluesit të lexuesit - 10 bajtë. Të dhënat i shkruhen lexuesit EEPROM në të njëjtën mënyrë si në transponderin EEPROM. Në këtë rast, kur transponderi tjetër lexohet dhe përputhet me atë që është shkruar në EEPROM-in e lexuesit, një sinjal del në pinin PORTB.1 (15) të kontrolluesit (LED2 në diagram). Ju mund të lidhni një LED në këtë pikë përmes një rezistence ose një ndërprerës dalës (tranzistor) në stafetën e aktivizuesit. Tani kemi një bllokues RFID për një çelës specifik dhe një lexues të rregullt në një shishe.


Fig.4 Diagrami i lexuesit të etiketave RFID. (zmadho diagramin)

Pra, le të përmbledhim rezultatet e ndërmjetme. Prodhuar lexuesin e vet dhe një transponder për këtë lexues. Ne kemi mbrojtur pajisjet tona nga pajisje të huaja duke punuar me protokollet e njohura RFID. Hapi tjeter do të jetë prodhimi i një etikete pasive për lexuesin tonë siç bëjnë ata prodhuesit e famshëm Kodi i transponderëve industrialë dhe pajisjeve transportuese në modelet më të lira të kontrolluesve. Në arkiv, artikullit i bashkangjit firmuerin për transponderin dhe lexuesin.

Shkarkoni firmware:
Ju nuk keni akses për të shkarkuar skedarë nga serveri ynë

Artikujt më të mirë mbi këtë temë