Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Sigurnost
  • Čitanje i pisanje RFID oznaka. RC522 modul za Arduino

Čitanje i pisanje RFID oznaka. RC522 modul za Arduino

Ovaj projekat je napravljen na zahtjev prijatelja za ugradnju na vrata magacina. U budućnosti je napravljeno još nekoliko na zahtjev prijatelja i poznanika. Dizajn se pokazao jednostavnim i pouzdanim. Ovaj uređaj radi ovako: propušta samo one RFID kartice koje su prethodno unesene u memoriju uređaja.

Ključne karakteristike kontrolera pristupa:

Format RFID kartice EMmarin 125kHz

Mikrokontroler ATtiny13

Broj kartica/privezaka je 10.
Dugme "OPEN" je normalno otvoreno, zaštićeno od lijepljenja.
Kontrolni izlaz zaključavanja, visokostrujni tranzistor sa efektom polja, latch mod (uključen na neko vrijeme).

Hrana - 12c.
Potrošnja u standby modu - 35 mA.
Broj pristupnih kartica/privezaka - 10 kom.
Duljina komunikacije sa tipkom "OPEN" je 10 metara.
Tip kontrolnog izlaza za zaključavanje - otvoreni drain (snažni tranzistor sa efektom polja, struja do 2A).

Šematski dijagram kontrolera ograničenja pristupa na 125KHz RFID karticama (Em-Marin) za 10 kartica (na ATtiny13 mikrokontroleru):

Ako je potrebno rukovanje elektromagnetskom bravom, potrebno je ugraditi izlazni relej sa potrebnom kontakt grupom.

Izgled sklopljenog RFID validatora:

Postavljanje bitova osigurača u PonyProgu:

Rad uređaja, preuzmite video koji je snimio autor.
Također, jedan od čitatelja je objavio i video sastavljenog uređaja:

Uputstva za programiranje

Režim rada - kada se 12V dovodi do kontrolera, LED treperi 1Hz.
Način programiranja - LED treperi 2Hz.
Kada se pritisne dugme "OPEN", niz kratkih zvučnih signala tokom otvaranja brave.

Zvučni signali

1 kratak signal - kartica ili privezak se čuvaju u memoriji kontrolera.
2 kratka zvučna signala - kartica ili privezak su već pohranjeni u memoriji kontrolera.
5 kratkih signala - izlaz iz moda programiranja.
1 dugačak zvučni signal - memorija kartice ključa je izbrisana iz kontrolera.
Neprekidni kratki zvučni signali - memorija kartice/ključeva je puna, maksimalno 10 kom. (zahteva isključiti napajanje kontrolera).

Snimanje MASTER CARD-a i vremena otvaranja brave

1 - Isključite napajanje kontrolera.
2 - Pritisnite dugme "OPEN".
3 - Dok držite dugme, priključite napajanje na kontroler, nakon 5 sekundi. kontroler "PISKNET", LED će treptati frekvencijom od 2 Hz.
4 - Otpustite dugme.
5 - Unesite karticu ili privezak za ključeve u zonu za čitanje, čuće se jedan zvučni signal, Master kartica ili privezak za ključeve se SNIME, a vrijeme otvaranja brave 1 sec.

6 - Držeći karticu ili privezak u zoni čitanja - čitamo zvučne signale. Količina određuje potrebno vrijeme za otvaranje brave, korak od 1 sek., ali ne više od 32 sek.
7 - Isključite napajanje kontrolera ili pauzirajte 30 sekundi.

Brisanje sve memorije privjesaka

1 - Radni režim.
2 - Pritisnite dugme "OPEN" i držeći ga, prinesite MASTER karticu ili privezak za ključeve do čitača i držite ga, nakon 5 sekundi će se čuti dug bip - memorija kartica/privezaka je izbrisana.
3 - Otpustite dugme i odnesite karticu ili privezak.

Danas ću vam reći o RFID modulu RC522, baziranom na MFRC522 čipu. Napajanje od 3,3 V, domet detekcije do 6 cm. Dizajniran za čitanje i pisanje RFID oznaka sa frekvencijom od 13,56 MHz. Frekvencija je u ovom slučaju veoma važna, jer RFID oznake postoje u tri frekvencijska opsega:


  • Oznake LF opsega (125-134 kHz)

  • Markeri HF opsega (13,56 MHz)

  • Oznake UHF opsega (860-960 MHz)

Konkretno, ovaj modul radi sa oznakama HF opsega, posebno sa MIFARE protokolom.

Za rad sa modulom možete koristiti standardnu ​​RFID biblioteku uključenu u Arduino IDE, ali postoji još jedna biblioteka napisana posebno za ovaj modul - MFRC522 (1 MB). Obje biblioteke su prilično zgodne, ali MFRC522 ima više posebnih funkcija koje vam omogućavaju da minimizirate konačni programski kod što je više moguće.

Veza

Neki ljudi se suočavaju s problemom - naziv pinova u većini tutorijala i tutorijala možda neće odgovarati pinoutu na vašem modulu. Ako je SS pin naznačen na skicama, ali nije na vašem modulu, onda je najvjerovatnije označen kao SDA. U nastavku ću dati tabelu za povezivanje modula za najčešće ploče.

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.3V 3.3V 3.3V 3.3V stabilizator 3.3V stabilizator 3.3V stabilizator
GND GND GND GND GND GND

Kontrolni pinovi SS (SDA) i RST su postavljeni na skici, tako da ako se vaša ploča razlikuje od one koju ću koristiti u svojim primjerima, a ja koristim UNO R3, navedite pinove iz tabele na početku skice:


#defini SS_PIN 10 #defini RST_PIN 9

Primjer 1: Čitanje broja kartice

Pogledajmo primjer iz RFID biblioteke - cardRead. Ne izdaje podatke sa kartice, već samo njen broj, što je obično dovoljno za mnoge zadatke.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid (SS_PIN, RST_PIN); // Podaci o broju kartice pohranjeni su u 5 varijabli, pamtit ćemo ih da provjerimo da li smo takvu karticu već pročitali 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 ()) (// Uporedite broj kartice sa brojem prethodne kartice ako (rfid.serNum! = SerNum0 && rfid.serNum! = SerNum1 && rfid.serNum! = SerNum2 && rfid.serNum! = SerNum3 && rfid.serNum! = SerNum4) (/ * Ako kartica je nova, zatim pročitajte * / Serial.println (""); Serial.println ("Kartica pronađena"); serNum0 = rfid.serNum; serNum1 = rfid.serNum; serNum2 = rfid.serNum; serNum3 = rfid.serNum ; serNum4 = rfid.serNum; // Ispis broja kartice Serial.println ("Cardnumber:"); Serial.print ("Dec:"); Serial.print (rfid.serNum, DEC); Serial.print (", "); Serijski .print (rfid.serNum, DEC); Serial.print (","); Serial.print (rfid.serNum, DEC); Serijski.print (","); Serijski.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 (/ * Ako je ovo već pročitana kartica, samo odštampajte tačku * / Serial.print (".");))) rfid.halt (); )

Da li je skica popunjena, LED za napajanje na modulu je uključen, ali modul ne reaguje na karticu? Nemojte paničariti, niti trčati tražiti "ispravne" primjere rada. Najvjerovatnije jednostavno nema kontakta na jednoj od igala - rupe na ploči su nešto veće od debljine kratkospojnika, pa biste trebali pokušati da ih preuredite. Da li je LED na ploči isključena? Pokušajte preurediti 3.3V kratkospojnik i uvjerite se da je spojen na 3.3V na ploči, napajanje od 5V može lako ubiti vašu ploču.

Recimo da sve radi za vas. Zatim, čitajući oznake od strane RFID modula, vidjet ćemo sljedeće na monitoru serijskog porta:


Ovdje sam pročitao 3 različite oznake, i kao što vidite sve 3 je uspješno izbrojao.

Primjer 2: Čitanje podataka sa kartice

Razmotrimo detaljniju opciju - čitat će ne samo broj kartice, već i sve podatke dostupne za čitanje. Ovaj put uzmimo primjer iz biblioteke MFRC522 - DumpInfo.


#include #include #define RST_PIN 9 // #define SS_PIN 10 // MFRC522 mfrc522 (SS_PIN, RST_PIN); // Kreirajte MFRC522 instancu void setup () (Serial.begin (9600); // Inicijalizirajte monitor serijskog porta dok (! Serial); // Ne radite ništa dok se ne otvori (za Arduino na ATMEGA32U4 čipu) SPI.begin () ; // Inicijaliziraj SPI sabirnicu mfrc522.PCD_Init (); // Inicijaliziraj RFID modul ShowReaderDetails (); // Ispiši podatke o MFRC522 modulu Serial.println (F ("Skeniraj PICC da vidi UID, tip i blokove podataka . .." ));) void loop () (// Tražim novu karticu if (! mfrc522.PICC_IsNewCardPresent ()) (povratak;) // Odaberite jednu od kartica if (! mfrc522.PICC_ReadCardSerial ()) (povratak ;) // Prikaz podataka s kartice mfrc522.PICC_DumpToSerial (& (mfrc522.uid));) void ShowReaderDetails () (// Dobiti broj verzije bajta modula v = mfrc522.PCD_ReadRegister (mfrc522.Version.Reg); RC5 (F ("MF verzija 0 ")); Serijski.print (v, HEX); ako (v == 0x91) Serijski.print (F (" = v1.0 ")); inače ako (v == 0x92 ) Serial.print (F (" = v2.0 ")); inače Serial.print (F (" (nepoznat) ")); Serial.println (""); // Kada primimo 0x00 ili 0xFF, prijenos podataka je prekinut ako ((v == 0x00) || (v == 0xFF)) (Serial.println (F ("UPOZORENJE: Neuspjeh u komunikaciji, je li MFRC522 ispravno povezan?") )) ;))

Ako je prethodni primjer radio bez grešaka, ni to ne bi trebao biti problem. Međutim, ispostavilo se da je propusnica za metro, koja je u prethodnom primjeru bez ikakvih problema dala broj kartice, u ovome bila sa neotkrivenim tipom podataka, a modul nije mogao pročitati ništa osim broja kartice.

Kao rezultat toga, nakon čitanja podataka sa kartice, dobijamo njen tip, identifikator i podatke iz 16 memorijskih sektora. Treba napomenuti da se MIFARE 1K kartice sastoje od 16 sektora, svaki sektor se sastoji od 4 bloka, a svaki blok sadrži 16 bajtova podataka.


Primjer 3: Upisivanje novog identifikatora na karticu

U ovom primjeru ćemo pogledati promjenu identifikatora kartice (UID). Važno je znati da sve kartice ne podržavaju promjenu identifikatora. Kartica se može ponovo upisivati, ali to znači samo podatke koji se mogu ponovo upisivati. Nažalost, kartice koje sam imao u rukama nisu podržavale prepisivanje UID-a, ali ću ovdje dati skicni kod za svaki slučaj.


#include #include / * Postavite novi UID ovdje * / #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); MFRC522 :: MIFARE_Ključ; void setup () (Serial.begin (9600); while (! Serial); SPI.begin (); mfrc522.PCD_Init (); Serial.println (F ("Upozorenje: ovaj primjer prepisuje UID vaše UID promjenjive kartice, koristite pažljivo! ")); za (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); }

Primjer 4: Upisivanje podataka na karticu

I na kraju, ono do čega nam je trebalo toliko vremena - upisivanje podataka na karticu. Najslađi dio rada sa modulom je mogućnost da napravite kopiju postojeće kartice, dodate ili promijenite nešto, ovo je mnogo zanimljivije od jednostavnog čitanja.

Promijenimo jedan od blokova podataka na mapi:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522 (SS_PIN, RST_PIN); MFRC522 :: MIFARE_Ključ; void setup () (Serial.begin (9600); while (! Serial); SPI.begin (); mfrc522.PCD_Init (); // Pripremite ključ // koristite ključ FFFFFFFFFFFFh koji je standard za prazne kartice za ( 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); } }

I kao rezultat, dobijamo mapu sa promijenjenim blokom podataka:


Sada kada znate kako čitati i pisati blokove podataka o karticama, možete eksperimentirati s oznakama koje najvjerovatnije imate - propusnice, propusnice za javni prijevoz. Pokušajte čitati i pisati podatke sa ovih kartica, par duplih prolaza nikad ne škodi, zar ne?)

To je sve, pretplatite se i pratite publikacije. Sledeći put ću vam objasniti i pokazati kako da dodate prilagođene znakove na standardni ekran od 1602 karaktera, efektivno dodajući grafiku na ekran.

RFID (radiofrekventna identifikacija) koristi elektromagnetna polja za automatsku identifikaciju i praćenje oznaka pričvršćenih na objekte. Oznake sadrže elektronski pohranjene informacije. Pasivne oznake prikupljaju energiju iz radio signala iz obližnjeg RFID čitača. Aktivne oznake imaju lokalni izvor napajanja (kao što je baterija) i mogu raditi stotine metara od čitača. Za razliku od bar koda, oznaka ne mora biti u vidokrugu instrumenta, tako da se može ugraditi u objekt praćenja. RFID je jedna od metoda za automatsku identifikaciju i prikupljanje podataka.

Aplikacija

RFID oznake se koriste u mnogim industrijama. Na primjer, RFID čitač pričvršćen na vozilo tokom proizvodnje može se koristiti za praćenje napretka duž transportne linije. Označeni farmaceutski proizvodi mogu se pratiti kroz skladišta. Implantiranje RFID mikročipova u stoku omogućava identifikaciju životinja.

Budući da se RFID oznake mogu pričvrstiti na novac, odjeću i imovinu ili ugraditi u životinje i ljude, mogućnost čitanja ličnih podataka bez pristanka korisnika predstavlja ozbiljan problem privatnosti. Ovi rizici su doveli do razvoja standardnih specifikacija u pogledu sigurnosti ličnih podataka. Oznake se također mogu koristiti u trgovinama za ubrzavanje plaćanja i sprječavanje krađe.

Priča

Godine 1945. Leon Theremin izumio je uređaj za prisluškivanje za Sovjetski Savez koji je ponovo odašiljao radio valove s dodatnim audio informacijama. Zvučne vibracije tokom vibracija su uticale na dijafragmu, koja je neznatno promenila oblik rezonatora, koji je modulirao reflektovanu radio frekvenciju. Iako je ovaj uređaj bio prikriveni uređaj za prisluškivanje, a ne identifikaciona oznaka, smatra se prethodnikom USB RFID čitača jer su ga aktivirali audio valovi iz vanjskog izvora. Transpondere i dalje koristi većina aviona koji rade. Ranije su sličnu tehnologiju, poput čitača RFID oznaka, redovno koristili Saveznici i Njemačka u Drugom svjetskom ratu za identifikaciju aviona.

Uređaj Maria Cardulla, patentiran 23. januara 1973. godine, bio je prvi pravi prethodnik modernog RFID-a, jer je bio pasivni memorijski radio. Originalni uređaj je bio pasivan, napajan signalom za biranje. Demonstriran je 1971. administraciji New Yorka i drugim potencijalnim korisnicima i sastojao se od 16-bitnog memorijskog transpondera za korištenje kao uređaj za plaćanje. Cardulloov glavni patent pokriva upotrebu radio frekvencija, zvuka i svjetlosti kao medija za prijenos.

Opseg upotrebe

Originalni poslovni plan predstavljen investitorima 1969. godine pokazao je sledeće aplikacije čitača RFID:

  • upotreba u transportu (identifikacija vozila, sistem automatskog plaćanja, elektronska registarska tablica, elektronski manifest, rutiranje vozila, praćenje performansi vozila);
  • bankarstvo (elektronska čekovna knjižica, elektronska kreditna kartica);
  • osoblje, automatske kapije, nadzor); medicinska industrija (identifikacija, istorija pacijenta).

Ranu demonstraciju reflektirane snage (moduliranog povratnog raspršenja) RFID oznaka, pasivnih i polupasivnih, izveli su Stephen Depp, Alfred Coelle i Robert Fraiman u Nacionalnoj laboratoriji Los Alamos 1973. godine. Prenosivi sistem je radio na 915 MHz i koristio je 12-bitne oznake. Ovu metodu koristi većina modernih UHFID i mikrotalasnih RFID čitača. U modernom životu takvi uređaji su u velikoj potražnji.

Specifikacija

RFID sistem koristi oznake pričvršćene za objekte koji se mogu identificirati. Prilikom izrade RFID čitača vlastitim rukama, treba imati na umu da dvosmjerni radio predajnici-prijemnici, koji se nazivaju ispitivači ili čitači, šalju signal na oznaku i čitaju njen odgovor. RFID oznake mogu biti pasivne, aktivne ili pasivne. Aktivna oznaka ima ugrađenu bateriju i periodično prenosi svoj ID signal. Pasivna baterija (BAP) ima malu bateriju na ploči i aktivira se kada je prisutan RFID čitač. Pasivna oznaka je jeftinija i manja jer nema bateriju. Umjesto toga, oznaka koristi radio talas koji prenosi čitač. Međutim, da bi pasivna oznaka funkcionirala, mora biti osvijetljena sa nivoom snage oko hiljadu puta jačim nego za prijenos signala. Ovo utiče na smetnje i izloženost radijaciji.

19. septembar 2013. u 18:32

Budžetski UHF RFID čitač i njegov razvoj

  • Bežična tehnologija

Pozdrav poštovane dame i gospodo.
Najjeftiniji UHF RFID čitač ili EPC Gen2 čitač košta ne manje od 200 USD u maloprodaji.

Kako možete napraviti radni UHF RFID čitač od dijelova za 10 USD i kako možete imati koristi od toga, opisano je u nastavku.

Većina modernih EPC Gen2 RFID čitača koristi specijalizovane čipove. Proizvode ih Impinj, AMS i Phychips. Najjeftinija mikro kola koštaju oko 20 USD u serijama od 1000 komada. RFID čitači su odlični - moćni, okretni i dugog dometa - ali skupi.
U proljeće ove godine na internetu se pojavio članak "Jednostavan i jeftin UHF RFID čitač" o tome kako sastaviti radni RFID čitač od uobičajenih radio komponenti vrijednih oko 5 USD u maloprodaji. Čini se da je ideja jednostavna, ali je tek nedavno došla do realizacije. Pretpostavka za razvoj je zasnovana na činjenici da vrlo često, u blizini antene, morate polako pročitati nekoliko tri oznake, a nema potrebe da plaćate puno novca za čitač sa brzinom vatre od 200 -500 oznaka u sekundi. Blok dijagram čitača je prikazan na slici.


Njegova ljepota je u jednostavnosti. Osnova je konvencionalni mikrokontroler, koji generiše EPC Gen2 signale na GPIO nozi, koji su neophodni za prozivanje oznake. Signali se prenose do mikrokola odašiljača Melexis TH72035, zatim do antene preko Johanson 0910CF15B0100 spojnice. Prijemnik je montiran na jednom komparatoru MAX931 prema sljedećem dijagramu.


Logički signali iz prijemnika idu na drugi GPIO pin mikroprocesora. Dobijamo jednostavan softverski UHF RFID čitač. Naravno, pisanje softvera baziranog na EPC Gen2 RFID čitaču nije kilogram grožđa. Ali ako jasno definirate svoje ciljeve i koristite samo željeni podskup EPC Gen2 protokola, tada je zadatak uvelike pojednostavljen.
Autori opisanog projekta smatraju da je postavljanje svih komponenti RFID čitača na jednu ploču jedan od ciljeva njenog daljeg razvoja. Ali zar ne bi bilo zanimljivije ići u suprotnom smjeru? Odnosno, podijeliti čitač na fizički odvojene funkcionalne module i zatim napraviti RFID čitač sa potrebnim karakteristikama iz različitih modula. Sve ispod je samo ideja, bez detaljne studije.

Jasno je da je glavni modul baziran na mikroprocesoru. Vjerovatno to treba uraditi na Cortex-M0, iznijeti na UART i USB konektore kako bi se mogao kontrolirati čitač. Za povezivanje primopredajnog modula koristite 6-pinski konektor: Rx, Tx, 2 za napajanje primopredajnika, 2 GPIO. Takvih konektora može se napraviti 2-4, koliko su izlazi mikroprocesora dovoljni.
Modul primopredajnika će biti spojen na mikroprocesorski modul direktno ili preko kratkog kabla. Možda je potrebno napraviti nekoliko varijanti primopredajnih modula različite snage i cijene, ali istog konektora. 5. pin konektora se može koristiti za uključivanje primopredajnika, a 6. pin se može koristiti za neku vrstu senzora ako je potrebno. Ima smisla napraviti štampanu ploču primopredajnika sa metaliziranim krajnjim polurupama. Zatim se može zalemiti na PCB sa različitim antenama ili PCB sa koaksijalnim SMA konektorom.
Dakle, povezivanjem mikroprocesorskog modula i primopredajnog modula dobijamo RFID čitač. Ali samo zbog toga, baštu se ne isplati graditi. Idemo dalje. Utaknimo ploču sa RS422 drajverom i RJ45 utičnicom u 6-pinski konektor mikroprocesorskog modula umjesto primopredajnika (par 1 - prijem, par 2 - prijenos, 3 - napajanje, 4 - GPIO). Ubacimo isti u primopredajnik. Jasno je da sada možete povezati mikroprocesorski modul i primopredajnik pomoću bilo kojeg patch kabla ili koristiti uredski SCS za povezivanje. Generalno, antena se može nalaziti veoma daleko od mikroprocesorskog modula. I bez nagovaranja.
I to nije sve :) RS422 je autobus. Primopredajnik može da primi D-flip-flop čip. Povežite module primopredajnika u seriju pomoću patch kablova. Istina, potreban vam je drugi RJ45 konektor ili T-razdjelnik, ako umjesto D-okidača stavite sinhroni brojač. Koristeći dva GPIO-a u četvrtom UTP paru, možete odabrati željeni primopredajnik. Ispada distribuirani RFID čitač, kao na slici.


Zašto vam je potreban USB: ali da biste mogli da povežete čitač sa Android tabletom.

Rješenje je primjenjivo tamo gdje nije potrebna velika brzina čitanja oznaka i domet.
1. Nije prikladno za trgovine prehrambenim proizvodima. Ovo su RFID prodavnice budućnosti. A današnje RFID prodavnice su robne kuće (obuća i odeća). Tamo se RFID čitači već koriste u garderobama (zajedno u interaktivnom displeju), na blagajni i pametnim policama sa robom.
2. Skladišta sa euro paletama (lanac primopredajnih modula gdje se nalaze lijevi uglovi paleta).
3. Sistem pristupa raznim javnim događajima.
4. Sigurno negdje drugdje.

Šema emulatora RFID transpondera EM-Marine standarda (EM4100).
Proximity kartice standarda Em-Marine su daleko najpopularnije sredstvo identifikacije u našoj zemlji i koriste se za identifikaciju korisnika u sistemima kontrole pristupa (ACS).
Drugo, ništa manje popularno, polje primjene Em-Marine kartica je njihova upotreba u logičkim pristupnim sistemima pri autorizaciji korisnika po ID broju kartice u operativnom sistemu računara i radnim aplikacijama itd.

Em-Marine kartice i privjesci za ključeve.
Shodno tome, takvi identifikacioni sistemi su veoma česti i mogu biti od interesa za implementaciju vaših sopstvenih sistema identifikacije i automatizacije. Budući da je protokol za razmjenu i hardver ovakvih niskofrekventnih sistema lakši za samostalnu implementaciju njihovih vlastitih uređaja, većina radioamaterskih dizajna o RFID temama posvećena je niskofrekventnim sistemima.

Radna frekvencija Em-Marine kartica je 125 KHz. Za njihovo očitavanje koriste se specijalizirani čitači beskontaktnih kartica (RFID čitači). Interakcija identifikatora sa takvim čitačem vrši se na daljinu.
Postoji ogroman broj opcija za vanjski dizajn ovih identifikatora: Em-Marine propusnice se izrađuju u obliku tankih i debelih kartica, narukvica za vodene parkove, raznih privjesaka, radio oznaka za integraciju u RFID proizvode.
Za standard transpondera EM4100, kartica sadrži 64 bita podataka, a kartice se obično ne mogu ponovno upisivati. Radi praktičnosti registracije kartica, kod ispisan na kartici se duplira štampanjem na jednoj od strana kartice. Kodiranje podataka koje prenosi transponder je Manchester kodiranje. U ovom slučaju, periodi signala koji transponder prenosi su višekratnici frekvencije 125KHz - frekvencije signala sa čitača transpondera. Sami transponderi su implementirani bez eksternog napajanja (pasivna oznaka), napajanje se napaja iz LC kola (kalem i kondenzator) kada oznaka uđe u polje čitača kartica. Transponder je takođe klokovan signalom čitača - 125KHz. Stoga su parametri rezultirajućeg signala u Mančesterskom kodiranju višestruki od 125KHz signala.

Šema interakcije između transpondera i RFID čitača.
Za potpunije razumevanje, razmotrimo strukturu paketa RFID transpondera u formatu EMMarine EM4100. Dat je opis (na engleskom, preuzet iz napomena) formata transponder paketa.
“…… .EM4100 kompatibilni RFID transponderi nose 64 bita memorije samo za čitanje. To znači da se informacije mogu čitati sa oznake, ali se nikakvi podaci ne mogu mijenjati, ili novi podaci upisani na karticu nakon što je kartica programirana s početnim podacima. Format podataka je prikazan ovdje.
1 1 1 1 1 1 1 1 1 9 bitova zaglavlja, svi 1 "s
8-bitni broj verzije D00 D01 D02 D03 P0
ili ID kupca.
D04 D05 D06 D07 P1
D08 D09 D10 D11 P2 Svaka grupa od 4 bita
D12 D13 D14 D15 P3 prati parni 32 bita podataka
D16 D17 D18 D19 P4 bit parnosti
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
4 kolone Paritet bitovi PC0 PC1 PC2 PC3 S0 1 stop bit (0)
Prvih 9 bitova su logički 1”.
U skladu s tim, imamo 9 početnih bitova paketa (uvijek logička 1), 11 grupa od 4 bita podataka sa 1 bitom parnosti reda, 4 bita parnosti stupaca na kraju paketa i završni bit (uvijek 0).
Na primjer, uzmimo transponder sa brojem podataka 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 podataka 0x06 smatra se brojem verzije. Na EM-Marine karticama na koje sam naišao utisnute su decimalne vrijednosti koje odgovaraju posljednja 3 bajta paketa. U svakom slučaju, za implementaciju ćemo morati reproducirati svih 64 bita paketa prema ovom opisu.
Pređimo sada pažljivo na opis modulacije podataka transpondera. Podaci preuzeti iz AN680 napomene. Na slici sam napravio oznake crvenom bojom u odnosu na dijagrame koji nas zanimaju.

Sada ćemo detaljnije opisati dijagrame koji su nam potrebni. CLK signal sata je signal čitača RFID, kao što je ranije spomenuto. NRZ kodirani podaci trebaju biti pripremljeni za transponder u skladu sa snimljenim paketnim podacima (64 bita). Vidi se da je implementacija NRZ kodiranja na osnovu transponder paketa elementarna i zahtijeva minimalne resurse. Zapravo, analiziramo paket u bitstream i mijenjamo logičke vrijednosti signala za 0 i 1 u podacima i to je to. Da bismo dobili rezultujući signal, programski XOR trenutno stanje signala u NRZ formatu i CLK takt signala čitača. Kao rezultat, dobijamo Manchestersko kodiranje rezultirajućeg signala. Neću detaljnije opisivati ​​Manchestersko kodiranje - podaci se mogu naći u zasebnim bilješkama. Za detaljniji opis metoda modulacije, pogledajte podatke iz „Metode modulacije H.R. Walker Data Systems 05/01/04 (pregledano 4/18/10) “, proučavao sam ove primjere. Glavna stvar je da uz minimalni utrošak resursa možemo implementirati transponder u formatu EM-Marine. Na primjer, možete uzeti AVR kontroler serije tiny45 (možete to učiniti na tiny13). Testirano na tiny45 jer je ovaj bio dostupan za eksperimentiranje.
Sada ćemo predstaviti funkcionalni dijagram transpondera zasnovanog na modelu u Proteusu za tiny45 kontroler.

Funkcionalni dijagram transpondera u Proteusu.

Ovako izgleda signal koji generiše transponder. Početak paketa je označen crvenom bojom.
Kao što možete vidjeti iz dijagrama, pin kontrolera T0 (PORTB.2) se koristi za napajanje signala takta za 8-bitni tajmer TIMER0. Program implementira prekid slučajnosti na tajmeru TIMER0 (TIM0_COMPA). Sat se postavlja iz vanjskog signala za ovaj tajmer. Za nas je signal takta 125KHz sa čitača kartica. Na dijagramu je uklonjeno sve što je vezano za napajanje kontrolera i kola sata iz čitača. U stvarnom kolu, sam kontroler je taktiran od 4 MHz kvarcnog kristala instaliranog između 2 i 3 noge kontrolera. Na ove pinove kontrolera možete dodati i kvarcne premosne kondenzatore od 22 pF.
Postavke Proteus simulacije za kontroler su specificirane na sljedeći način:

Prilikom programiranja tiny45 kontrolera, postavite osigurače (konfiguracijske bitove) na isti način kao što je prikazano na slici. 2. Za taktiranje kontrolera koristi se kvarc od 4 MHz.
Što se tiče implementacije sheme cjevovoda vanjskog regulatora, razmotrit ćemo ovo pitanje detaljnije. Za primjere su uzeti materijali RFID priručnika (E2E_chapter03-rfid-handbook), koji opisuje osnovne principe izgradnje RFID sistema. Sam dokument je u prilogu članka. Pogledajmo primjer dijagrama pasivnog transpondera (dio dijagrama na strani 46). Radi razumijevanja, napravio sam bilješke na dijagramu crvenom bojom.
Vidi se da imamo prijemno kolo na L1C1, koje služi za napajanje transponderskog kola i sata. Možemo bezbedno izbaciti sve što se tiče kontra-razdelnika IC1 (4024), logičkih elemenata IC3 (7400) - neće nam trebati. Razdjelnik za tajmer je implementiran postavkama tajmera bez eksternih razdjelnika - brojača, logički dio je implementiran i softverski. Međutim, ovaj primjer omogućava potpunije razumijevanje rada kola pasivnog transpondera. Maksimalna udaljenost čitanja za transponder ovog formata je 200 cm. U stvarnosti, većina kola radi na udaljenosti od 2-10 cm. Parametri kapacitivnog i induktivnog kola LC-a su odabrani što je preciznije moguće na rezonantnu frekvenciju od 125KHz. Kao primjer koristili smo kolo kapaciteta 1nF i zavojnicu od 60 navoja na trnu promjera 50 mm pomoću žice od 0,2 PEV. Željenu konturu možete izračunati u posebnom programu (možete izračunati konturu za pravokutnu zavojnicu, tiskanu, itd.). Glavna stvar je odabrati točne ocjene za frekvenciju od 125 KHz, inače će se udaljenost čitanja i osjetljivost kruga značajno pogoršati. Kod loše podešenih kola, radit će samo kada se zavojnica transpondera približi čitaču. Uređaj radi na principu Full Duplex (FDX) - generira podatke transpondera kontinuirano kada je kolo napajano. Taktiranje kola od čitača i prijenos podataka se vrši kontinuirano. Neke transponderske šeme koriste HDX (Half Duplex) radnu šemu - čitač emituje u impulsnom režimu, transponder prenosi podatke u intervalima ovih impulsa punjenja iz čitača. Ovo se, na primjer, odnosi na TIRIS transpondere kompanije Texas Instruments.

Pasivni transponderski krug baziran na kolu iz RFID priručnika.


Uzimajući u obzir dio kola koji nam nije potreban na osnovu originalnog kola, dobivamo cjevovod regulatora u ovom obliku.



Kako vam se sviđa ovaj članak?

Top srodni članci