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

Leximi dhe shkrimi i etiketave RFID. Moduli RC522 për Arduino

Ky projekt është bërë me kërkesë të një miku për instalim në një derë të një magazine. Në të ardhmen, disa të tjera u bënë me kërkesë të miqve dhe të njohurve. Dizajni doli të jetë i thjeshtë dhe i besueshëm. Kjo pajisje funksionon kështu: kalon vetëm ato karta RFID që janë futur më parë në memorien e pajisjes.

Karakteristikat kryesore të kontrolluesit të aksesit:

Formati i kartës RFID EMmarin 125 kHz

Mikrokontrolluesi ATtiny13

Numri i kartave / çelësave është 10.
Butoni "OPEN" është normalisht i hapur, i mbrojtur nga ngjitja.
Dalja e kontrollit të kyçjes, tranzistori me rrymë të lartë me efekt në terren, modaliteti i mbylljes (i ndezur për një kohë).

Ushqimi - 12c.
Konsumi në modalitetin e gatishmërisë - 35 mA.
Numri i kartave të aksesit / çelësave - 10 copë.
Gjatësia e komunikimit me butonin "OPEN" është 10 metra.
Lloji i daljes së kontrollit të bllokimit - kullimi i hapur (tranzistor i fuqishëm me efekt në terren, rrymë deri në 2A).

Diagrami skematik i një kontrolluesi të kufizimit të aksesit në kartat RFID 125 KHz (Em-Marin) për 10 karta (në një mikrokontrollues ATtiny13):

Nëse është e nevojshme të përdorni një bllokim elektromagnetik, kërkohet të instaloni një stafetë dalëse me grupin e kërkuar të kontaktit.

Pamja e vleftësuesit RFID të montuar:

Vendosja e bitave të siguresave në PonyProg:

Funksionimi i pajisjes, shkarkoni videon e regjistruar nga autori.
Gjithashtu, një nga lexuesit publikoi një video të pajisjes së montuar:

Udhëzime programimi

Mënyra e funksionimit - kur kontrolluesi furnizohet me 12 V, LED pulson 1Hz.
Modaliteti i programimit - LED pulson 2Hz.
Kur shtypet butoni "OPEN", një seri bipe të shkurtra gjatë hapjes së bravës.

Sinjalet e zërit

1 sinjal i shkurtër - karta ose çelësi ruhen në memorien e komanduesit.
2 bip të shkurtër - karta ose çelësi i çelësit është ruajtur tashmë në memorien e komanduesit.
5 sinjale të shkurtra - dilni nga modaliteti i programimit.
1 bip i gjatë - kujtesa e kartës kryesore është fshirë nga kontrolluesi.
Bipe të shkurtra të vazhdueshme - memoria e kartës / çelësit është plot, maksimumi 10 copë. (kërkon fikjen e komanduesit).

Regjistrimi i MASTER CARD dhe koha e hapjes së bravës

1 - Fikni furnizimin me energji të kontrollorit.
2 - Shtypni butonin "OPEN".
3 - Duke mbajtur butonin, lidhni rrymën me komanduesin, pas 5 sekondash. kontrolluesi "PISKNET", LED do të pulsojë me një frekuencë prej 2 Hz.
4 - Lëshoni butonin.
5 - Sillni kartën ose çelësin e çelësit në zonën e leximit, do të dëgjohet një sinjal i vetëm zanor, Karta Master ose foleja e çelësit Regjistrohet dhe koha e hapjes së bllokimit 1 sekondë do të regjistrohet.

6 - Mbajtja e kartës ose çelësit në zonën e leximit - lexojmë sinjalet e zërit. Sasia përcakton kohën e nevojshme për hapjen e bravës, rritje prej 1 sek., por jo më shumë se 32 sek.
7 - Fikni kontrolluesin ose ndaloni për 30 sekonda.

Fshirja e të gjithë kujtesës së zinxhirit të çelësave

1 - Mënyra e punës.
2 - Shtypni butonin "OPEN" dhe duke e mbajtur atë, sillni kartën MASTER ose çelësin e çelësit te lexuesi dhe mbajeni atë, pas 5 sekondash do të dëgjohet një bip i gjatë - kujtesa e kartave / çelësave është fshirë.
3 - Lëshojeni butonin dhe hiqni kartën ose folenë e çelësit.

Sot do t'ju tregoj për modulin RFID RC522, bazuar në çipin MFRC522. Furnizimi me energji 3.3 V, diapazoni i zbulimit deri në 6 cm. Projektuar për të lexuar dhe shkruar etiketa RFID me një frekuencë prej 13,56 MHz. Frekuenca është shumë e rëndësishme në këtë rast, pasi etiketat RFID ekzistojnë në tre intervale frekuencash:


  • Etiketat e brezit LF (125-134 kHz)

  • Shënuesit e brezit HF (13,56 MHz)

  • Etiketat e brezit UHF (860-960 MHz)

Konkretisht, ky modul punon me etiketa të gamës HF, veçanërisht me protokollin MIFARE.

Për të punuar me modulin, mund të përdorni bibliotekën standarde RFID të përfshirë në Arduino IDE, por 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 të veçanta që ju lejojnë të minimizoni kodin përfundimtar të programit sa më shumë që të jetë e mundur.

Lidhje

Disa njerëz përballen me një problem - emri i kunjave në shumicën e udhëzimeve dhe udhëzimeve mund të mos korrespondojë me pikën në modulin tuaj. Nëse kunja SS tregohet në skica, por nuk është në modulin tuaj, atëherë ka shumë të ngjarë që është shënuar si SDA. Më poshtë do të jap një tabelë për lidhjen e 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.3 V Stabilizues 3.3 V Stabilizues 3.3 V
GND GND GND GND GND GND

Kunjat e kontrollit SS (SDA) dhe RST janë vendosur 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, specifikoni kunjat nga tabela në fillim të skicës:


#define SS_PIN 10 #define RST_PIN 9

Shembulli # 1: Leximi i numrit të kartës

Le të shohim një shembull nga biblioteka RFID - cardLead. Nuk lëshon 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; konfigurimi i zbrazët () (Serial.fillimi (9600); SPI.fillimi (); rfid.init ();) loop void () (if (rfid.isCard ()) (if (rfid.readCardSerial ()) (// Krahasoni numrin e kartës me numrin e mëparshëm të kartës nëse (rfid.serNum! = SerNum0 && rfid.serNum! = SerNum1 && rfid.serNum! = SerNum2 && rfid.serNum! = SerNum3 && rfid.serNum! = SerNum4) (/ * Nëse karta është e re, pastaj lexoni * / Serial.println (""); Serial.println ("Karta e gjetur"); serNum0 = rfid.serNum; serNum1 = rfid.serNum; serNum2 = rfid.serNum; serNum3 = rfid.serNum ; serNum4 = rfid.serNum; // Shtypni numrin e kartës Serial.println ("Numri i kartës:"); Serial.print ("Dec:"); 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.pr int (","); 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 një pikë * / Serial.print (".");))) rfid.halt (); )

A është skica e mbushur, drita LED e energjisë në modul është ndezur, por moduli nuk i përgjigjet kartës? Mos u frikësoni, ose vraponi për të kërkuar shembuj "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ë duhet të përpiqeni t'i rirregulloni ato. A është fikur LED në tabelë? Përpiquni të riorganizoni kërcyesin 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 bordin tuaj.

Le të themi se gjithçka funksionon për ju. Pastaj, duke lexuar etiketat nga moduli RFID, do të shohim sa vijon në monitorin e portit serik:


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

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

Le të shqyrtojmë një opsion më të përpunuar - do të lexojë jo vetëm numrin e kartës, por 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); // Krijoni konfigurimin e zbrazët të instancës MFRC522 () (Serial.begin (9600); // Inicializoni monitorin e portës serike ndërsa (! Serial); // Mos bëni asgjë derisa të hapet (për Arduino në çipin ATMEGA32U4) SPI.begin () ; // Inicializoni autobusin SPI mfrc522.PCD_Init (); // Inicializoni modulin RFID ShowReaderDetails (); // Printoni të dhëna rreth modulit MFRC522 Serial.println (F ("Skanoni PICC për të parë UID, llojin dhe blloqet e të dhënave . .." ));) void loop () (// Duke kërkuar për një kartë të re nëse (! mfrc522.PICC_IsNewCardPresent ()) (kthim;) // Zgjidhni një nga kartat nëse (! mfrc522.PICC_ReadCardSerial ()) (kthim ;) // Shfaq të dhënat nga karta mfrc522.PICC_DumpToSerial (& (mfrc522.uid));) void ShowReaderDetails () (// Merrni numrin e versionit të bajtit të modulit v = mfrc522.PCD_ReadRegister (mfrc522.VersionReg); Serial. RC5 (F ("Versioni MF 0")); printim serial (v, HEX); nëse (v == 0x91) printim serial (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, transferimi i të dhënave prishet nëse ((v == 0x00) || (v == 0xFF)) (Serial.println (F ("PARALAJMËRIM: Dështimi i komunikimit, 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 jepte pa asnjë problem numrin e kartës në shembullin e mëparshëm, doli të ishte me një lloj të dhënash të pazbuluar në këtë, dhe moduli nuk mund të lexonte asgjë 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 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ëna.


Shembulli # 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 identifikuesit. Karta mund të rishkruhet, por kjo do të thotë vetëm të dhëna të rishkueshme. 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; konfigurimi void () (Serial.begin (9600); ndërsa (! Serial); SPI.begin (); mfrc522.PCD_Init (); Serial.println (F ("Kujdes: 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 # 4: Shkrimi i të dhënave në një kartë

Dhe së fundi, çfarë na desh kaq shumë kohë për të arritur - shkrimi i të dhënave në kartë. Pjesa më e ëmbël e punës me modulin është aftësia për të bërë një kopje të një karte ekzistuese, për të shtuar ose ndryshuar diçka, kjo është shumë më interesante sesa leximi i thjeshtë.

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; konfigurimi i zbrazët () (Serial.begin (9600); ndërsa (! Serial); SPI.begin (); mfrc522.PCD_Init (); // Përgatitni çelësin // përdorni çelësin FFFFFFFFFFFFFFh që është standardi për kartat boshe 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ë hartë me një bllok të ndryshuar të të dhënave:


Tani që dini se si të lexoni dhe shkruani blloqe të të dhënave të kartave, mund të eksperimentoni me etiketat që ka shumë të ngjarë të keni - leje, leje transporti publik. Mundohuni 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 shpjegoj dhe do t'ju tregoj se si të shtoni karaktere të personalizuara në një ekran standard 1602 karakteresh, duke shtuar në mënyrë efektive grafika në ekran.

RFID (Radio Frequency Identification) përdor fusha elektromagnetike për të identifikuar dhe gjurmuar automatikisht etiketat e bashkangjitura në objekte. Etiketat përmbajnë informacione të ruajtura në mënyrë elektronike. Etiketat pasive mbledhin energji nga sinjalet radio nga një lexues RFID aty pranë. Etiketat aktive kanë një burim lokal energjie (si p.sh. një bateri) dhe mund të funksionojnë qindra metra larg lexuesit. Ndryshe nga një barkod, etiketa nuk ka nevojë të jetë brenda shikimit të instrumentit, kështu që mund të futet në objektin e gjurmuar. RFID është një nga metodat për identifikimin dhe mbledhjen automatike të të dhënave.

Aplikacion

Etiketat RFID përdoren në shumë industri. Për shembull, një lexues RFID i lidhur me një automjet gjatë prodhimit mund të përdoret për të gjurmuar përparimin përgjatë një linje transportieri. Farmaceutikët e etiketuar mund të gjurmohen nëpër magazina. Implantimi i mikroçipave RFID në bagëti lejon identifikimin e kafshëve.

Për shkak se etiketat RFID mund t'i bashkëngjiten parave, veshjeve dhe pronës, ose të implantohen te kafshët dhe njerëzit, aftësia për të lexuar informacionin personal pa pëlqimin e përdoruesit paraqet një problem serioz të privatësisë. Këto rreziqe kanë çuar në zhvillimin e specifikimeve standarde në lidhje me sigurinë e të dhënave personale. Etiketat mund të përdoren gjithashtu në dyqane për të përshpejtuar arkëtimet dhe për të parandaluar vjedhjen.

Histori

Në vitin 1945, Leon Theremin shpiku një pajisje dëgjimi për Bashkimin Sovjetik që ritransmetonte valët e radios me informacion të shtuar audio. Dridhjet e zërit gjatë dridhjeve prekën diafragmën, e cila ndryshoi paksa formën e rezonatorit, i cili moduloi frekuencën e reflektuar të radios. Megjithëse kjo pajisje ishte një pajisje dëgjimi e fshehtë dhe jo një etiketë identifikimi, ajo konsiderohet si paraardhësi i lexuesit USB RFID pasi aktivizohej nga valët audio nga një burim i jashtëm. Transponderët përdoren ende nga shumica e avionëve në funksionim. Më parë, teknologji e ngjashme, si lexuesi i etiketave RFID, përdorej rregullisht nga Aleatët dhe Gjermania në Luftën e Dytë Botërore për të identifikuar avionët.

Pajisja e Mario Cardullo, e patentuar më 23 janar 1973, ishte pararendësi i parë i vërtetë i RFID-së moderne, pasi ishte një radio me memorie pasive. Pajisja origjinale ishte pasive, e mundësuar nga një sinjal votimi. Ai u demonstrua në 1971 për administratën e qytetit të Nju Jorkut dhe përdorues të tjerë të mundshëm dhe përbëhej nga një transponder memorie 16-bit për t'u përdorur si një pajisje pagese. Patenta kryesore e Cardullo mbulon përdorimin e frekuencave të radios, zërit dhe dritës si media transmetimi.

Fusha e përdorimit

Plani origjinal i biznesit i paraqitur investitorëve në 1969 tregoi aplikacionet e mëposhtme të lexuesve RFID:

  • përdorimi në transport (identifikimi i automjetit, sistemi automatik i pagesës, targa elektronike, manifesti elektronik, drejtimi i automjeteve, monitorimi i performancës së automjetit);
  • bankare (libër çeqesh elektronike, kartë krediti elektronike);
  • personeli, portat automatike, mbikëqyrja); industria mjekësore (identifikimi, historia e pacientit).

Një demonstrim i hershëm i fuqisë së reflektuar (shpërndarja e pasme e moduluar) e etiketave RFID, pasive dhe gjysmë pasive, u krye nga Stephen Depp, Alfred Coelle dhe Robert Fraiman në Laboratorin Kombëtar të Los Alamos në 1973. Sistemi portativ funksiononte në 915 MHz dhe përdorte etiketa 12-bit. Kjo metodë përdoret nga shumica e lexuesve modernë UHFID dhe RFID me mikrovalë. Në jetën moderne, pajisje të tilla janë në kërkesë të madhe.

Specifikim

Një sistem RFID përdor etiketa të bashkangjitura në objekte të identifikueshme. Kur bëni një lexues RFID me duart tuaja, duhet të kihet parasysh se transmetuesit-marrës të dyanshëm të radios, të quajtur hetues ose lexues, dërgojnë një sinjal në etiketë dhe lexojnë përgjigjen e tij. Etiketat RFID mund të jenë pasive, aktive ose pasive. Etiketa aktive ka një bateri të integruar dhe në mënyrë periodike transmeton sinjalin e saj ID. Bateria pasive (BAP) ka një bateri të vogël në bord dhe aktivizohet kur është i pranishëm një lexues RFID. Etiketa pasive është më e lirë dhe më e vogël sepse nuk ka bateri. Në vend të kësaj, etiketa përdor valën e radios të transmetuar nga lexuesi. Sidoqoftë, që një etiketë pasive të funksionojë, ajo duhet të ndriçohet me një nivel fuqie rreth një mijë herë më të fortë se sa për transmetimin e sinjalit. Kjo ndikon në ndërhyrjen dhe ekspozimin ndaj rrezatimit.

19 shtator 2013 në orën 06:32

Lexuesi buxhetor UHF RFID dhe zhvillimi i tij

  • Teknologjia me valë

Përshëndetje të nderuar zonja dhe zotërinj.
Lexuesi më i lirë UHF RFID ose lexuesi EPC Gen2 kushton jo më pak se 200 USD me pakicë.

Si mund të bëni një lexues UHF RFID të funksionueshëm nga pjesët për 10 USD dhe si mund të përfitoni prej tij, përshkruhet më poshtë.

Shumica e lexuesve modernë EPC Gen2 RFID përdorin çipa të specializuar. Ato prodhohen nga Impinj, AMS dhe Phychips. Mikroqarqet më të lira kushtojnë rreth 20 USD në shumë prej 1000 copë. Lexuesit RFID janë të shkëlqyer - të fuqishëm, të shkathët dhe me rreze të gjatë - por të kushtueshëm.
Në pranverën e këtij viti, në internet u shfaq një artikull "Lexues i thjeshtë UHF RFID me kosto të ulët" se si të montoni një lexues RFID që funksionon nga komponentët e zakonshëm të radios me vlerë rreth 5 USD në shitje me pakicë. Ideja duket të jetë e thjeshtë, por vetëm kohët e fundit erdhi në zbatim. Premisa për zhvillimin bazohet në faktin se shumë shpesh, afër antenës, duhet të lexoni ngadalë nja dy tre etiketa, dhe nuk ka nevojë të paguani shumë para për një lexues me një shkallë zjarri prej 200 -500 etiketa në sekondë. Diagrami bllok i lexuesit është paraqitur në foto.


Bukuria e saj është në thjeshtësi. Baza është një mikrokontrollues konvencional, i cili gjeneron sinjale EPC Gen2 në këmbën GPIO, të cilat janë të nevojshme për votimin e etiketës. Sinjalet transmetohen në mikroqarkun e transmetuesit Melexis TH72035, më pas në antenë përmes bashkuesit Johanson 0910CF15B0100. Marrësi është montuar në një krahasues MAX931 sipas diagramit të mëposhtëm.


Sinjalet logjike nga marrësi shkojnë në një pin tjetër GPIO të mikroprocesorit. Ne marrim një lexues të thjeshtë softuerësh UHF RFID. Sigurisht, shkrimi i një lexuesi RFID EPC Gen2 të bazuar në softuer nuk është një kile rrush i thatë. Por nëse i përcaktoni qartë qëllimet tuaja dhe përdorni vetëm nëngrupin e dëshiruar të protokollit EPC Gen2, atëherë detyra thjeshtohet shumë.
Autorët e projektit të përshkruar e konsiderojnë vendosjen e të gjithë komponentëve të lexuesve RFID në një tabelë si një nga qëllimet e zhvillimit të tij të mëtejshëm. Por a nuk do të ishte më interesante të shkoje në drejtim të kundërt? Kjo do të thotë, të ndahet lexuesi në module funksionale fizikisht të veçanta dhe më pas të ndërtohet një lexues RFID me karakteristikat e nevojshme nga module të ndryshme. Gjithçka më poshtë është vetëm një ide, pa një studim të detajuar.

Është e qartë se moduli kryesor është i bazuar në mikroprocesor. Ndoshta, duhet të bëhet në Cortex-M0, të nxjerrë në lidhësit UART dhe USB për të kontrolluar lexuesin. Për të lidhur modulin e marrësit, përdorni lidhësin 6-pin: Rx, Tx, 2 për të fuqizuar transmetuesin, 2 GPIO. Lidhës të tillë mund të bëhen 2-4, për aq sa janë të mjaftueshme daljet e mikroprocesorit.
Moduli i transmetuesit do të lidhet me modulin e mikroprocesorit drejtpërdrejt ose përmes një kablloje të shkurtër. Ndoshta, është e nevojshme të bëhen disa variante të moduleve të transmetuesit me fuqi dhe çmim të ndryshëm, por të njëjtin lidhës. Pini i 5-të i lidhësit mund të përdoret për të ndezur transmetuesin, dhe pini i 6-të mund të përdoret për një lloj sensori nëse është e nevojshme. Ka kuptim të bëhet një tabelë e qarkut të printuar të transmetuesit me gjysmë vrima fundore të metalizuara. Pastaj mund të ngjitet në PCB me antena të ndryshme ose PCB me një lidhës SMA koaksial.
Pra, duke lidhur modulin e mikroprocesorit dhe modulin e transmetuesit, marrim një lexues RFID. Por vetëm për hir të kësaj, nuk ia vlen të rrethosh një kopsht. Le të shkojmë më tej. Le të lidhim një tabelë me një drejtues RS422 dhe një prizë RJ45 në lidhësin 6-pin të modulit të mikroprocesorit në vend të transmetuesit (çifti 1 - marrë, çifti 2 - transmetim, 3 - fuqi, 4 - GPIO). Le të ngjitim të njëjtin në transmetues. Është e qartë se tani mund të lidhni modulin e mikroprocesorit dhe transmetuesin duke përdorur çdo kordon patch ose të përdorni një SCS të zyrës për lidhje. Në përgjithësi, antena mund të vendoset shumë larg nga moduli i mikroprocesorit. Dhe pa liri.
Dhe kjo nuk është e gjitha :) RS422 është një autobus. Transmetuesi mund të akomodojë një çip D-flip-flop. Lidhni modulet e transmetuesit në seri me korda patch. Vërtetë, ju duhet një lidhës i dytë RJ45 ose një ndarës T, nëse vendosni një numërues sinkron në vend të një shkrepëse D. Duke përdorur dy GPIO në çiftin e katërt UTP, mund të zgjidhni transmetuesin e dëshiruar. Rezulton një lexues RFID i shpërndarë, si në foto.


Pse keni nevojë për USB: por në mënyrë që të mund të lidhni lexuesin me një tabletë Android.

Zgjidhja është e zbatueshme kur nuk nevojitet një shpejtësi e lartë e leximit të etiketave dhe diapazonit.
1. Jo i përshtatshëm për dyqane ushqimore. Këto janë dyqanet RFID të së ardhmes. Dhe dyqanet RFID të tanishme janë dyqane të mëdha (këpucë dhe rroba). Atje, lexuesit RFID përdoren tashmë në dhomat e montimit (së bashku në një ekran interaktiv), në arka dhe rafte inteligjente me mallra.
2. Magazina me Euro paleta (zinxhiri i moduleve të transmetuesit ku ndodhen këndet e majta të paletave).
3. Sistemi i aksesit për ngjarje të ndryshme publike.
4. Me siguri diku tjetër.

Skema e një emulatori të transponderit RFID të standardit EM-Marine (EM4100).
Kartat e afërsisë të standardit Em-Marine janë mjetet më të njohura të identifikimit në vendin tonë dhe përdoren për të identifikuar përdoruesit në sistemet e kontrollit të aksesit (ACS).
Fusha e dytë, jo më pak e popullarizuar, e aplikimit të kartave Em-Marine është përdorimi i tyre në sistemet e aksesit logjik kur autorizohen përdoruesit me numrin ID të kartës në sistemin operativ të kompjuterit dhe aplikacionet e punës, etj.

Kartat dhe çelësat e Em-Marine.
Prandaj, sisteme të tilla identifikimi janë shumë të zakonshme dhe mund të jenë me interes për zbatimin e sistemeve tuaja të identifikimit dhe automatizimit. Meqenëse protokolli i shkëmbimit dhe hardueri i sistemeve të tilla me frekuencë të ulët është më i lehtë për zbatimin e pavarur të pajisjeve të tyre, shumica e modeleve radio amatore në temën RFID i kushtohen sistemeve me frekuencë të ulët.

Frekuenca e funksionimit të kartave Em-Marine është 125 KHz. Për t'i lexuar ato, përdoren lexues të specializuar të kartave pa kontakt (lexuesit RFID). Ndërveprimi i identifikuesit me një lexues të tillë kryhet nga distanca.
Ekzistojnë një numër i madh opsionesh për dizajnin e jashtëm të këtyre identifikuesve: Kalimet Em-Marine bëhen në formën e kartave të holla dhe të trasha, byzylykët për parqet ujore, çelësat e ndryshëm, etiketat e radios për integrim në produktet RFID.
Për standardin e transponderit EM4100, karta përmban 64 bit të dhënash dhe kartat zakonisht nuk mund të rishkruhen. Për lehtësinë e regjistrimit të kartave, kodi i shkruar në kartë kopjohet duke shtypur në njërën nga anët e kartës. Kodimi i të dhënave të transmetuara nga transponderi është kodimi Manchester. Në këtë rast, periudhat e sinjalit të transmetuar nga transponderi janë shumëfish të frekuencës 125 KHz - frekuenca e sinjalit të lexuesit të transponderit. Vetë transponderët zbatohen pa furnizim të jashtëm me energji (etiketë pasive), fuqia sigurohet nga qarku LC (spiralja dhe kondensatori) kur etiketa hyn në fushën e lexuesit të kartave. Transponderi gjithashtu klockohet nga sinjali i lexuesit - 125 KHz. Prandaj, parametrat e sinjalit që rezulton në kodimin Mançester janë shumëfish të sinjalit 125 KHz.

Skema e ndërveprimit ndërmjet transponderit dhe lexuesit RFID.
Për një kuptim më të plotë, le të shqyrtojmë strukturën e paketës së transponderit RFID në formatin EMMarine EM4100. Jepet përshkrimi (në anglisht, marrë nga shënimet) i formatit të paketës së transponderit.
Transponderët RFID të përputhshëm me .EM4100 mbajnë 64 bit memorie vetëm për lexim. Kjo do të thotë që informacioni mund të lexohet nga Etiketa, por asnjë e dhënë nuk mund të ndryshohet, ose të dhëna të reja të shkruhen në kartë pasi karta të jetë programuar me të dhënat fillestare. Formati i të dhënave është siç tregohet këtu.
1 1 1 1 1 1 1 1 1 1 9 bit koka, të gjitha 1 "s
Numri i versionit 8 bit D00 D01 D02 D03 P0
ose ID e klientit.
D04 D05 D06 D07 P1
D08 D09 D10 D11 P2 Secili grup me 4 bit
D12 D13 D14 D15 P3 ndiqet nga një çift 32 bit të dhënash
D16 D17 D18 D19 P4 biti i barazisë
D20 D21 D22 D23 P5
D24 D25 D26 D27 P6
D28 D29 D30 D31 P7
D32 D33 D34 D35 P8
D36 D37 D38 D39 P9
Bit barazie me 4 kolona PC0 PC1 PC2 PC3 S0 1 bit ndalimi (0)
9 bitët e parë janë logjikë 1”.
Prandaj, ne kemi 9 bit fillimi të paketës (gjithmonë logjik 1), 11 grupe me 4 bit të dhënash me 1 bit barazie rreshti, 4 bit barazie kolone në fund të paketës dhe një bit përfundimtar (gjithmonë 0).
Për shembull, le të marrim një transponder me numër të dhënash 06001259E3.
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 00
0 6 0 0 1 2 5 9 E 3

Bajt i të dhënave 0x06 konsiderohet numri i versionit. Në kartat EM-Marine që kam hasur, janë vulosur vlerat dhjetore që korrespondojnë me 3 bajtët e fundit të paketës. Në çdo rast, për zbatimin, do të na duhet të riprodhojmë të gjitha 64 bitët e paketës sipas këtij përshkrimi.
Tani le t'i drejtohemi me kujdes përshkrimit të modulimit të të dhënave të transponderit. Të dhënat e marra nga shënimi AN680. Në figurë, kam bërë shenjat me të kuqe në lidhje me diagramet me interes për ne.

Tani le të përshkruajmë më në detaje diagramet që na duhen. Sinjali i orës CLK është sinjali i lexuesit RFID, siç u përmend më herët. Të dhënat e koduara NRZ duhet të përgatiten për transponderin në përputhje me të dhënat e paketës së regjistruar (64 bit). Mund të shihet se zbatimi i kodimit NRZ bazuar në paketën e transponderit është elementar dhe kërkon burime minimale. Në fakt, ne e analizojmë paketën në një bitstream dhe ndryshojmë vlerat logjike të sinjalit me 0 dhe 1 në të dhëna dhe kaq. Për të marrë sinjalin që rezulton, ne XOR programatikisht gjendjen aktuale të sinjalit në formatin NRZ dhe CLK të sinjalit të orës së lexuesit. Si rezultat, marrim kodimin Manchester të sinjalit që rezulton. Unë nuk do të përshkruaj më në detaje rreth kodimit të Mançesterit - të dhënat mund të gjenden në shënime të veçanta. Për një përshkrim më të detajuar të metodave të modulimit, shihni të dhënat nga “Metodat e Modulimit H.R. Walker Data Systems 05/01/04 (rishikuar 4/18/10) ", kam studiuar këta shembuj. Gjëja kryesore është që me një shpenzim minimal burimesh, ne mund të zbatojmë kështu një transponder në formatin EM-Marine. Për shembull, mund të merrni kontrolluesin AVR të serisë tiny45 (mund ta bëni në tiny13). Testuar në tiny45 sepse kjo ishte e disponueshme për eksperimentim.
Tani do të paraqesim një diagram funksional të një transponderi bazuar në modelin në Proteus për kontrolluesin tiny45.

Diagrami funksional i transponderit në Proteus.

Kështu duket sinjali i gjeneruar nga transponderi. Fillimi i paketës është shënuar me të kuqe.
Siç mund ta shihni nga diagrami, kunja e kontrolluesit T0 (PORTB.2) përdoret për të furnizuar sinjalin e orës për kohëmatësin 8-bit TIMER0. Programi zbaton një ndërprerje të rastësishme në kohëmatësin TIMER0 (TIM0_COMPA). Ora caktohet nga një sinjal i jashtëm për këtë kohëmatës. Për ne, sinjali i orës është 125 KHz nga lexuesi i kartave. Në diagram, gjithçka që lidhet me furnizimin me energji të kontrollorit dhe qarqeve të orës nga lexuesi është hequr. Në një qark të vërtetë, vetë kontrolluesi është i fiksuar nga një kristal kuarci 4 MHz i instaluar midis 2 dhe 3 këmbëve të kontrolluesit. Mund të shtoni gjithashtu kondensatorë anashkalues ​​kuarci 22 pF në këto kunja kontrolluesi.
Cilësimet e simulimit të Proteus për kontrolluesin specifikohen si më poshtë:

Kur programoni kontrolluesin tiny45, vendosni siguresat (bitët e konfigurimit) në të njëjtën mënyrë siç tregohet në figurë. 2. Për të fiksuar kontrolluesin, përdoret kuarci 4 MHz.
Lidhur me zbatimin e skemës së tubacioneve të kontrolluesit të jashtëm, ne do ta shqyrtojmë këtë çështje më në detaje. Për shembull, materialet janë marrë Manuali RFID (E2E_chapter03-rfid-handbook), i cili përshkruan parimet themelore të ndërtimit të sistemeve RFID. Vetë dokumenti është bashkangjitur artikullit. Le të shohim një shembull të një diagrami të transponderit pasiv (pjesë e diagramit në faqen 46). Për të kuptuar, kam bërë shënime në diagram me të kuqe.
Mund të shihet se kemi një qark marrës në L1C1, i cili shërben për të fuqizuar qarkun e transponderit dhe orën. Ne mund të hedhim me siguri gjithçka që ka të bëjë me kundërndarësit IC1 (4024), elementët logjikë IC3 (7400) - nuk do të na duhet. Ndarësi për kohëmatësin zbatohet nga cilësimet e kohëmatësit pa ndarës të jashtëm - numërues, pjesa logjike gjithashtu zbatohet në softuer. Sidoqoftë, ky shembull lejon një kuptim më të plotë të funksionimit të qarkut të transponderit pasiv. Distanca maksimale e leximit për një transponder të këtij formati është 200 cm. Në realitet, shumica e qarqeve punojnë në distanca 2-10 cm. Parametrat e qarkut të kapacitetit dhe induktivitetit të LC zgjidhen sa më saktë që të jetë e mundur në frekuencën rezonante prej 125 KHz. Si shembull, ne përdorëm një qark me një kapacitet 1nF dhe një spirale prej 60 rrotullimesh në një mandrelë me një diametër prej 50 mm duke përdorur një tel 0.2 PEV. Ju mund të llogarisni konturin e dëshiruar në një program të veçantë (mund të llogarisni konturin për një spirale drejtkëndore, të shtypur, etj.). Gjëja kryesore është të zgjidhni vlerësimet e sakta për frekuencën 125 KHz, përndryshe distanca e leximit dhe ndjeshmëria e qarkut do të përkeqësohen ndjeshëm. Me qarqe të akorduara dobët, do të funksionojë vetëm kur spiralja e transponderit afrohet pranë lexuesit. Pajisja funksionon sipas parimit Full Duplex (FDX) - duke gjeneruar të dhëna të transponderit vazhdimisht kur qarku është i ndezur. Clocking e qarkut nga lexuesi dhe transferimi i të dhënave kryhet vazhdimisht. Disa skema të transponderëve përdorin skemën e funksionimit HDX (Half Duplex) - lexuesi lëshon në një modalitet pulsi, transponderi transmeton të dhëna në intervalet e këtyre impulseve të karikimit nga lexuesi. Kjo vlen, për shembull, për transponderët TIRIS nga Texas Instruments.

Një qark transponder pasiv i bazuar në një qark nga Manuali RFID.


Duke marrë parasysh pjesën e qarkut që nuk na nevojitet bazuar në qarkun origjinal, marrim tubacionin e kontrolluesit në këtë formë.



Si ju pëlqen ky artikull?

Artikujt kryesorë të lidhur