Kako podesiti pametne telefone i računare. Informativni portal

Budžetski UHF RFID čitač i njegov razvoj. RFID čitač: pričamo o tehnologiji

Svaki sistem identifikacije radio frekvencije (RFID) sastoji se od uređaja za čitanje (čitač, čitač ili ispitivač) i transpondera (poznatog i kao RFID oznaka, ponekad se koristi i termin RFID oznaka). U ovom članku ćemo pogledati jednostavan uređaj za čitanje RFID ključeva koji podržavaju EM4100 protokol i rade na frekvenciji od 125 kHz. Ovaj tip RFID ključa može biti u obliku privezka za ključeve ili kreditne kartice (slika 1).

Glavna komponenta čitača je AVR mikrokontroler, koji čita 10-cifreni jedinstveni identifikacioni broj ključa i šalje ga na ASCII kodiranje By serijski interfejs(UART) brzinom od 2400 bps do Host uređaja. Drugim rečima, čitalac jeste odvojeni modul, povezan sa glavnim procesorom ili mikrokontrolerom sistema (slika 2).

Šematski dijagram RFID čitača je prikazan na slici 3.

Slika 3.

Razmotrimo glavne karakteristike kola. Mikrokontroler koristi ugrađeni PWM modulator za generiranje PB0 izlaza pravougaoni impulsi sa frekvencijom od 125 kHz. Ako je izlaz PB0 log. 0 (padajući rub impulsa), tranzistor T1 je u zatvorenom stanju, a na kalem L1 se preko otpornika R1 primjenjuje napon napajanja +5 V. Uzlazni rub na izlazu PB0 (log 1) otvara tranzistor T1, a gornji terminal zavojnice je spojen na masu. U ovom trenutku zavojnica je spojena paralelno sa kondenzatorom C2, formirajući LC generator (oscilatorni krug). Tranzistor se prebacuje 125.000 puta u sekundi (125 kHz). Kao rezultat, zavojnica generiše sinusoidni signal frekvencije od 125 kHz (slika 4).

Modul čitača generiše elektromagnetno polje čija se energija koristi za napajanje RFID ključa. Prijenos energije između RFID ključa i čitača temelji se na principu rada konvencionalnog transformatora: primarni namotaj transformatora stvara indukovanu emf u svim ostalim namotajima. U našem slučaju, primarni namotaj je zavojnica čitača, a sekundarni namotaj je zavojnica RFID ključa. Elementi D1, C3 i R5 formiraju demodulator signala amplitudne modulacije.

Razmjena podataka između ključa i čitača

Proces razmjene podataka između RFID ključa i čitača je vrlo jednostavan, ali promišljen do najsitnijih detalja. Ako RFID ključ mora prenijeti zapisnik. 0, zatim povezuje određeno „opterećenje“ na svoj izvor napajanja, što zahtijeva više energije koju prenosi čitač. To će uzrokovati blagi pad napona na strani čitača; Upravo taj nivo čitalac percipira kao balvan. 0 (Slika 5).

RFID ukucaj opšti slučaj prenosi 64 bita podataka u sljedećem nizu (slika 6):

  1. Prvih 9 bitova (uvijek log. 1) su početni bitovi, koji označavaju početak razmjene podataka.
  2. 4 bita - najmanje značajan značajni bitovi običaj matični broj(D00 - D03).
  3. 1 bit (P0) - bit parnosti prethodna 4 bita.
  4. 4 bita su najvažniji bitovi identifikacionog broja korisnika (D04 - D07).
  5. 1 bit (P1) - bit parnosti prethodna 4 bita.
  6. 4 bita - prvi dio 32-bitnog serijski broj RFID ključ (D08 - D11).
  7. 1 bit (P2) - bit parnosti prethodna 4 bita.
  8. Zatim se prenose sljedeće grupe od 4 bita ključnog serijskog broja, svaka sa paritetnim bitom.
  9. Zatim se 4 paritetna bita prenose kolonu po kolonu. Na primjer, bit parnosti PC0 za bitove D00, D04, D08, D12, D16, D20, D24, D28, D32 i D36.
  10. 1 stop bit.

Integritet podataka provjerava mikrokontroler tako što izračunava paritetne bite za svaki red i kolonu i upoređuje ih sa podacima primljenim od RFID ključa.

Dizajn zavojnice.

Induktor bez okvira u čitaču promjera 120 mm namotan je žicom promjera 0,5 mm i ima 58 zavoja, ali autor preporučuje dodavanje još 2 - 3 zavoja prilikom namotavanja. Da bi se poboljšala efikasnost zavojnice i povećala udaljenost čitanja RFID ključa, potrebno je izvršiti kalibraciju oscilatorno kolo. Ako, nakon povezivanja osciloskopa na spojnu točku između R1 i L1, vidite izobličene vrhove na ekranu uređaja (slika 7), onda to ukazuje na potrebu kalibracije zavojnice L1.

Kalibracija se može izvršiti na dva načina nakon uključivanja napajanja na modul.

  1. Povežite sonde osciloskopa na spojnu tačku između R1 i L1 i, povećanjem ili smanjenjem broja zavoja L1 zavojnice, eliminišite izobličenje signala.
  2. Ako nemate osciloskop, polako pomičite RFID ključ na zavojnicu dok se ključ ne prepozna, kao što će biti označeno zvučnim signalom. Ako je ključ detektiran s udaljenosti od 2 cm, potrebno je dodati/ukloniti nekoliko okreta, a zatim ponovo provjeriti udaljenost s koje se ključ može pouzdano očitati. Koristeći kalibraciju, autor šeme je postigao pouzdano očitavanje RFID ključa od 3 cm.

Prilikom programiranja mikrokontrolera potrebno je podesiti sljedeću konfiguraciju Fuse bitova: niži bajt 0x7A i visoki bajt 0x1F (mikrokontroler radi od ugrađenog generatora takta od 9,6 MHz, razdjelnika frekvencija sata onemogućen na 8). Programski kod zauzima 1024 bajta u memoriji mikrokontrolera - koristi se cjelokupni raspoloživi memorijski kapacitet ATtiny13 mikrokontrolera. Stoga je u budućnosti, pri proširenju funkcionalnosti čitača, bolje koristiti drugi 8-pinski AVR mikrokontroler, na primjer.

Preuzimanja:

Izvorni kod programa mikrokontrolera (AVRStudio 6), firmver (.hex) i dijagram strujnog kola -

Danas ću govoriti o RFID modulu RC522, baziranom na MFRC522 čipu. Napajanje 3.3V, domet detekcije do 6cm. Dizajniran za čitanje i pisanje RFID oznake sa frekvencijom od 13,56 MHz. Frekvencija in u ovom slučaju je veoma važno, pošto RFID oznake postoje u tri frekventna opsega:


  • Oznake LF opsega (125-134 kHz)

  • Oznake HF opsega (13,56 MHz)

  • Oznake UHF opsega (860-960 MHz)

Ovaj modul radi sa oznakama HF opsega, posebno sa MIFARE protokolom.

Za rad sa modulom možete koristiti standardna biblioteka RFID uključen Arduino IDE, međutim, 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 smanjite konačni programski kod što je više moguće.

Veza

Neki ljudi će naići na problem - naziv pinova u većini lekcija i vodiča možda neće odgovarati pinoutu na vašem modulu. Ako skice ukazuju na SS pin, ali ga vaš modul nema, onda je najvjerovatnije označen kao SDA. U nastavku ću dati tabelu povezivanja 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 Stabilizator 3.3V Stabilizator 3.3V Stabilizator 3.3V
GND GND GND GND GND GND

SS(SDA) i RST kontrolni pinovi su navedeni 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 br. 1: Čitanje broja kartice

Pogledajmo primjer iz RFID biblioteke - cardRead. Ne prikazuje 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 != serNum ! * Ako je kartica nova, pročitajte */ Serial.println(" "); Serial.println("Kartica pronađena"); serNum0 = rfid.serNum; serNum1 = rfid.serNum; serNum2 = rfid.serNum; serNum3 = rfid .serNum; serNum4 = rfid.serNum; //Izlaz broja kartice Serial.println("Cardnumber:"); 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.print(", "); 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(); )

Skica je učitana, LED za napajanje na modulu svetli, ali modul ne reaguje na karticu? Nema potrebe za panikom ili trčanjem u potrazi za “ispravnim” primjerima rada. Najvjerojatnije jednostavno nema kontakta na jednoj od igala - rupe na ploči su nešto veće od debljine kratkospojnika, pa ih vrijedi pokušati preurediti. Da li LED na ploči ne svijetli? Pokušajte promijeniti kratkospojnik koji vodi na 3,3V i provjerite je li 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, čitanje RFID oznaka na monitoru serijski port videcemo sledece:


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

Primjer #2: Čitanje podataka sa kartice

Razmotrimo sofisticiraniju 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 instancu MFRC522 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(); // Ispis podataka o MFRC522 modulu Serial.println(F("Skeniraj PICC da vidi UID, tip i blokove podataka...")); ) void loop() ( // Tražim nova mapa if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Odaberite jednu od kartica if (! mfrc522.PICC_ReadCardSerial()) ( return; ) // Izlaz podataka sa kartice mfrc522.PICC_DumpToSerial(2&(mfrc5) ); ) void ShowReaderDetails() ( // Dobijte bajt broja verzije modula v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("MFRC522 verzija softvera: 0x")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0")); else if (v == 0x92) Serial.print(F(" = v2.0")); else Serial.print( F (" (nepoznato)")); Serial.println(""); // Kada primimo 0x00 ili 0xFF, prijenos podataka je prekinut ako ((v == 0x00) || (v == 0xFF)) ( Serial .println( F("UPOZORENJE: Greška u komunikaciji, da li je MFRC522 ispravno povezan?")); ) )

Ako je prethodni primjer radio bez grešaka, ni to ne bi trebao biti problem. Međutim, ispostavilo se da propusnica za metro, koja je bez problema dala broj kartice u prethodnom primjeru, u ovome ima neotkriven tip 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 standardne kartice sastoje od 16 sektora, svaki sektor se sastoji od 4 bloka, a svaki blok sadrži 16 bajtova podataka.


Primjer br. 3: Upisivanje novog identifikatora na karticu

U ovom primjeru ćemo pogledati promjenu identifikatora kartice (UID). Važno je znati da ne podržavaju sve kartice promjenu ID-a. Kartica se može ponovo upisivati, ali to samo znači da se podaci 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_Key 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 br. 4: Upisivanje podataka na karticu

Evo konačno do čega smo toliko dugo dolazili - snimanja podataka na karticu. Najslađi dio rada sa modulom je mogućnost da već napravite kopiju postojeća mapa, dodati ili promijeniti 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_Key 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, dobivamo karticu s modificiranim blokom podataka:


Sada, nakon što ste naučili čitati i pisati blokove podataka o karticama, možete eksperimentirati s oznakama koje najvjerovatnije imate - propusnice, putne karte 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. Sljedeći put ću vam reći i pokazati kako se koristi standard prikaz znakova 1602 dodaje prilagođene karaktere, u suštini dodajući grafiku na ekran.

Današnja lekcija je o tome kako koristiti RFID čitač sa Arduinom za kreiranje jednostavnog sistema zaključavanja, jednostavnim riječima- RFID brava.

RFID (radio frekvencijska identifikacija, radiofrekventna identifikacija) - metoda za automatsku identifikaciju objekata, u kojoj se podaci pohranjeni u takozvanim transponderima, ili RFID tagovima, čitaju ili zapisuju pomoću radio signala. Svaki RFID sistem se sastoji od uređaja za čitanje (čitač, čitač ili ispitivač) i transpondera (poznatog i kao RFID oznaka, ponekad se koristi i termin RFID oznaka).

Ovaj vodič će koristiti RFID tag sa Arduinom. Uređaj čita jedinstveni identifikator (UID) svake RFID oznake koju postavimo pored čitača i prikazuje ga na OLED displeju. Ako je UID oznake unapred definisana vrednost, koji je pohranjen u Arduino memoriji, tada ćemo na displeju vidjeti poruku “Otključano”. Ako jedinstveni ID nije jednak unaprijed definiranoj vrijednosti, poruka "Otključano" se neće pojaviti - pogledajte sliku ispod.

Dvorac je zatvoren

Brava je otvorena

Dijelovi potrebni za izradu ovog projekta:

  • RFID čitač RC522
  • OLED displej
  • Bread board
  • Žice

Dodatni detalji:

  • baterija (powerbank)

Ukupna cijena komponenti projekta iznosila je približno 15 dolara.

Korak 2: RFID čitač RC522

Svaka RFID oznaka sadrži mali čip (bijela kartica prikazana na fotografiji). Ako upalite baterijsku lampu na ovu RFID karticu, možete vidjeti mali čip i zavojnicu koja ga okružuje. Ovaj čip nema bateriju za proizvodnju energije. Pomoću ovoga bežično prima energiju od čitača veliki kolut. Ovakvu RFID karticu moguće je čitati sa udaljenosti do 20 mm.

Isti čip takođe postoji u RFID oznakama za ključeve.

Svaka RFID oznaka ima jedinstveni broj koji je identifikuje. Ovo je UID koji se prikazuje na OLED ekranu. Osim ovog UID-a, svaka oznaka može pohraniti podatke. Ova vrsta kartice može pohraniti do 1.000 podataka. Impresivno, zar ne? Ova funkcija se danas neće koristiti. Danas je sve što je od interesa identifikovanje određene kartice po njenom UID-u. Cijena RFID čitača i ove dvije RFID kartice je oko 4 USD.

Korak 3: OLED ekran

Lekcija koristi 0,96" 128x64 I2C OLED monitor.

Ovo je veoma dobar displej za upotrebu sa Arduinom. Ovo OLED displej a to znači da ima niska potrošnja energije. Potrošnja energije ovog displeja je oko 10-20mA i zavisi od broja piksela.

Ekran ima rezoluciju od 128 x 64 piksela i male je veličine. Postoje dvije opcije prikaza. Jedna od njih je jednobojna, a druga, kao i ona korištena u lekciji, može prikazati dvije boje: žutu i plavu. Gornji dio ekrana može biti samo žut i Donji dio- plava.

Ovaj OLED ekran je veoma svetao i ima sjajnu i veoma lepu biblioteku koju je Adafruit razvio za ovaj ekran. Pored toga, ekran koristi I2C interfejs, tako da je povezivanje sa Arduinom neverovatno jednostavno.

Trebate spojiti samo dvije žice osim Vcc i GND. Ako ste novi u Arduinu i želite koristiti jeftin i jednostavan zaslon u svom projektu, počnite ovdje.

Korak 4: Spajanje svih dijelova

karakteristike:
Tag frekvencija: 125KHz
Napajanje: +5 VDC
Izlazni podaci: serijski, 2400 bps 8N1. Izdaje se 10-cifreni serijski broj oznake.

Slika 1:Slika 2:

Uvod

Ovaj RFID čitač radi sa oznakama od 125 kHz na karticama veličine kreditne kartice i privjescima za ključeve od 125 kHz (Slika 1). Ovo koristi EM4100 protokol. Kada RFID oznaku približite (4-5 cm) zavojnici čitača (L1), čitač će pročitati 10-cifreni jedinstveni ID oznake i prenijeti ga kao ASCII znakovi preko serijskog izlaza na 2400 bps.

Kolo uključuje alarm koji emituje povremeno zvučni signali kada je oznaka uspješno pročitana.

Opis

Pokušat ću u nekoliko riječi objasniti kako radi RFID čitač. ATtiny13 kontroler koristi PWM funkciju za kreiranje pravokutnog signala od 125 kHz. Ovaj signal izlazi sa pina PB0. Na opadajućoj ivici impulsa na pinu PB0 (logička nula "0"), tranzistor T1 je zatvoren. Dakle, zavojnica L1 se pobuđuje preko otpornika R1 (100 Ohm nominalno) od napona od +5V. Kada se impuls na pinu PB0 poveća (logička jedinica "1"), tranzistor T1 se otvara i jedan od terminala zavojnice L1 je spojen na GND. Kondenzator C2 je spojen paralelno na zavojnicu L1, stvarajući LC oscilator. Podaci o prebacivanju zavojnice L1 sa logičke jedan na logičku nulu se dešavaju 125.000 puta u sekundi (125 kHz).

Slika 3: Oscilacije signala frekvencije 125 kHz, koje se prenose sa zavojnice L1 i kondenzatora C2.

RFID čitač prenosi energiju na transponder (oznaku) stvaranjem elektromagnetnog polja. Prijenos energije između RFID čitača i oznake odvija se po istom principu kao i rad transformatori , pretvarajući napon od 220 V AC u 12 V AC, zahvaljujući magnetnom polju koje stvara primarni namotaj. U našem slučaju, primarni namotaj je RFID čitač, a sekundarni namotaj je RFID oznaka. Jedina razlika je u tome što u kolu čitača RFID ne postoji čelični magnetni krug između dva namotaja (jedan namotaj se nalazi na strani čitača, a drugi namotaj u RFID tag-u). Komponente D1,C3 i R5 čine demodulator AM signal (AM = amplitudna modulacija).

Prijenos podataka između tagova i čitača.

Kako oznake prenose podatke do čitača? Veoma jednostavno! Kada oznaka želi poslati logičku nulu "0" čitaču, ona primjenjuje "opterećenje" na svoju liniju napajanja kako bi izvukla više energije iz čitača. Ovo uzrokuje mali pad napona na strani RFID čitača. Ovaj nivo napona je logička nula "0" (vidi sliku 4). Istovremeno sa čitačem koji prenosi signal frekvencije od 125 kHz, očitava napon prenijeti signal kroz filtere D1, C3 i R5, C1. Kada oznaka padne napon, kao što je ranije rečeno, čitač čita ovaj pad napona kao logičku nulu "0". Ako oznaka ne zahtijeva dodatnu energiju, to ne uzrokuje pad napona. Ovo odgovara logici jedan "1" (slika 3). Dužina "jedinica" ili "nula" ovisi o brzini serijskog prijenosa podataka. Na primjer, za frekvenciju nosioca od 125 kHz ne dobijamo brzinu podataka od 125.000 bita u sekundi! Prijenos podataka od oznake do čitača varira od 500 do 8.000 bita u sekundi.

Slika 4:Snimak ekrana prenesenih podataka...10101...Slika 5


  • RFID oznaka od 125 kHz prenosi 64 bita.
    1. Prvih 9 bitova su početni bitovi prenosa (uvijek "1").
    2. Sljedeća 4 bita su najmanji bitovi korisničkog ID-a (D00,..., D03).
    3. Sljedeći 1 bit (P0) je bit parnosti prethodna 4 bita.
    4. Sljedeća 4 bita su najvažniji bitovi korisničkog ID-a (D04,..., D07).
    5. Sljedeći 1 bit (P1) je bit parnosti prethodna 4 bita.
    6. Sljedeća 4 bita su prvi dio 32-bitnog serijskog broja oznake (D08,..., D11).
    7. Bit PC0 je bit parnosti bitova D00, D04, D08, D12, D16, D20, D24, D28, D32 i D36 (bitovi su u istoj koloni).
    8. Bitovi PC1, PC2, PC3 su paritetni bitovi sljedeće tri kolone.

Verifikacija podataka se vrši pomoću ATtiny13 kontrolera izračunavanjem bita parnosti svakog reda i svake kolone sa bitovima parnosti koji su primljeni u prenošenim podacima RFID oznake.

Pravljenje zavojnice

Zavojnica ima prečnik 120 mm i 58 zavoja. Za svaki slučaj, ostavi malo bakrene žice za dodatna 2-3 okreta (ukupno 60-61 okret). Za postignuće maksimalna udaljenost između RFID oznake i čitača (između oznake i namotaja antene čitača), morate kalibrirati zavojnicu. Ako osciloskop povežete na zajedničku tačku veze između R1 i L1, vidjet ćete mjesto označeno crvenim krugom na slici lijevo. To znači da zavojnica L1 mora biti kalibrirana.

Kako kalibrirati zavojnicu L1?

Uključite RFID čitač:

1. Nakon spajanja sonde osciloskopa na zajedničku tačku R1, L1, pokušajte polako ukloniti ili dodati malo bakrene žice(povećanje ili smanjenje broja zavoja) zavojnice sve dok se buka ne eliminiše.

2. Ako nemate osciloskop, pokušajte da pomerite RFID oznaku blizu L1 zavojnice sve dok čitač ne prepozna oznaku. Ako je vaša oznaka otkrivena na udaljenosti od 2 cm od zavojnice L1, pokušajte dodati nekoliko zavoja bakrene žice na zavojnicu L1 kako biste osigurali da se oznaka detektuje na većoj udaljenosti (npr. 3 cm).

Probajte iste korake uklanjanjem namotaja bakrene žice sa zavojnice L1. Na ovaj način ćete dobiti maksimalan raspon udaljenosti između oznaka i zavojnice L1.

Napravio sam L1 zavojnicu prečnika 120 mm sa 58 zavoja, ali sam kasnije želeo da je napravim manje veličine. Zato sam savio zavojnicu na pola dok nije izgledao kao "osmica" (oblik kao osmica) i ponovo kalibrirao. Dakle, zavojnica L1 na slikama zapravo ima prečnik manji od 120 mm.

Zavojnica L1 na slici ima prečnik 60 mm i skoro 116 zavoja.

ProgramiranjeATtiny13

Set konfiguracijskih bitova (osigurača) za ATtiny13: Visoki osigurač: 0x1F i Niski osigurač: 0x7A. Ovaj set podešavanja ATtiny13 radi sa internim oscilatorom sa frekvencijom od 9,6 MHz. Funkcija deljenja sa 8 sistemskog sata je onemogućena.

Verzija firmvera v1.00 zauzima 1024 bajta i zauzima 100% fleš memorije ATtiny13 kontrolera. Možda bi prelazak na bilo koji drugi 8-pinski AVR kao što je ATtiny85 bila dobra ideja ako želite da dodate neke karakteristike izvornom kodu.

Projekat su osmislili: Vasilis Serasidis ( Vasilis Serasidis) 18. avgusta 2012
Programski jezik: WITH
Razvojno okruženje:
mikrokontroler:ATtiny13 (interni oscilator od 9,6 MHz)

Spisak radioelemenata

Oznaka Tip Denominacija Količina BilješkaProdavnicaMoja beležnica
IC1 MK AVR 8-bit

ATtiny13

1 U notes
IC2 Operativno pojačalo

LM358

1 U notes
IC3 Linearni regulator

LM78L05

1 U notes
T1 MOSFET tranzistor

BS170

1 U notes
T2 Bipolarni tranzistor

BC547B

1 U notes
D1 Ispravljačka dioda

1N4148

1 U notes
C1 Kondenzator12 nF1 U notes
C2 Kondenzator1,5 nF1 U notes
C3 Kondenzator4,7 nF1 U notes
C4, C5 Elektrolitički kondenzator100 µF2 U notes
C6 Kondenzator100 nF1 U notes
R1 Otpornik

100 Ohm

1 U notes
R2 Otpornik

1 kOhm

1 U notes
R3 Otpornik

390 kOhm

1 U notes
R4, R8 Otpornik

33 kOhm

2 U notes
R5 Otpornik

270 kOhm

1 U notes
R6 Otpornik

Nakon nekoliko godina rada na RFID temama i razvoja raznih čitača za modele transpondera popularnih standarda kao što su Mifare, EMMARINE, TIRIS... Često me ovo pitanje počelo zbunjivati ​​- doslovno Prošle godine stekla široku popularnost razne vrste emulatori za popularne oznake protokola i razne fotokopirne mašine za ključeve.

Uzimajući u obzir veliki broj komercijalno dostupnih specijalnih čipova za popularne RFID protokole i jeftine čitače, široko rasprostranjenu upotrebu opreme kao što su digitalni osciloskopi, njuškari i analizatori spektra, ovo pitanje postalo je hitnije za mnoge programere. Tada sam odlučio napraviti protokol razmjene za jedan od projekata koji se razlikovao od gore opisanih standarda.

Naravno, ova ideja ne rješava globalnih problema sigurnost novog sistema i mogu je analizirati drugi programeri ako imaju opremu, ali stvar je u tome da se sve to ne poklapa sa postojećim standardima i sav hardver kopir aparata vam neće dozvoliti da brzo kopirate i ponovo kreirate takav algoritam. Naravno sličan sistem nije predstavljeno ovdje kompletno rješenje sigurnosni problemi, ali kako prilagoditi RFID zatvoreni sistem. Dobar plus po pitanju sigurnosti između ostalog bežični sistemi je sama niskofrekventna RFID tehnologija - ne dozvoljava čitanje oznaka velika udaljenost.

Pasivne oznake su prilično male snage i zahtijevaju prilično moćan generator čitača da ih napaja; posebnosti širenja radio valova na ovim frekvencijama također ograničavaju granice rada ovog sistema. Stvarni opseg očitavanja transpondera rijetko prelazi 20 cm za standarde od 125 KHz kao što je EmMarine, recimo standard EM4001; za druge protokole poput Mifare (13,56 MHz) može biti duži (1,5 metara za iso15693). Može se postići veća udaljenost očitavanje za niskofrekventne čitače ako povećate veličinu zavojnice i napon napajanja, odnosno snagu čitača. Međutim, takvi sistemi su glomazni i obično ih je teško napraviti prenosivim. U pravilu se takvi sistemi implementiraju samo trajno – na primjer, za automobile.

Dakle, sada o stvarnoj arhitekturi našeg RFID sistema. Za eksperimente je odabran atmel atmega8 kontroler. Za potrebe proizvodnje transpondera, ovo izgleda kao pretjerano. Međutim, u ovom slučaju je riješen primarni zadatak razvoja novog interfejsa na gotovoj razvojnoj ploči sa atmegom, nakon čega je uslijedilo portiranje ovog koda na jeftinije kontrolere poput tiny13. Za transponder, radni algoritam je izgrađen na bazi PWM generisanja režima korišćenjem tajmera T1 u CTC režimu sa prekidom i resetovanjem u koincidenciji sa OCR1. Podaci o prijenosu transpondera se čitaju iz EEPROM-a kada je kontroler uključen. Ukupno, transponder prenosi 10 bajtova. Sadržaj EEPROM transpondera se može vidjeti na Slika 1. Prvi bajt 0xE7 je potrebno zaglavlje paketa, jer se njegovo prisustvo prvo provjerava kada čitač analizira paket.

Prvih 8 bajtova je sadržaj transponder paketa, posljednja 2 bajta sadrže CRC16 kontrolni zbir prvih osam bajtova paketa. Na primjer, u našem transponderu su zabilježeni sljedeći podaci: paket 0xE7, 0x05, 0xE8, 0x93, 0x43, 0x7F, 0x20, 0xFF i, shodno tome, kontrolni zbir 0xF5 0xA8. Da biste napravili svoj jedinstveni transponder, pored prvog bajta 0xE7, trebate upisati sljedećih sedam bajtova u EEPROM, a zatim izračunati kontrolnu sumu za prvih osam bajtova. Nakon toga, zapišite dva CRC16 bajta na kraju paketa u EEPROM. Prvi bajt ostavljamo nepromijenjenim - 0xE7. Kada je transponder uključen, podaci ovih bajtova se raščlanjuju na bitove i kodiraju odgovarajućom dužinom impulsa u skladu sa vrijednošću OCR registra. Za prenos se koriste 2 frekvencije od 2KHz i 5KHz za prenos logičkih “0” i “1”. Pored toga, podaci su odvojeni sinhronizacionim impulsima - oznakama za početak paketa.

Fig.1 Sadržaj transponder paketa.


Fig.2 Dump prijenosa transpondera na ekranu virtualnog osciloskopa.

Dijagram transpondera se može vidjeti na Slika 3. Frekvencija glavnog oscilatora je 8 MHz. Napajanje kontrolera +5V. Možete koristiti mega8 kontroler sa oznakom "L", a zatim se može napajati napajanje litijumska baterija 3v (parametri za takav čip su +2,7.... +3,5). Umjesto ovog tranzistora, možete koristiti bilo koji drugi niskonaponski NPN tranzistor. Zavojnica transpondera je namotana na trn prečnika 50 mm sa žicom od 0,22 mm i ima 50 zavoja. Trenutno je transponder aktiviran - sa eksterno napajanje. U sljedećoj fazi planirana je izrada pasivne verzije transpondera, koja je prilično jednostavna - napraviti izolaciju za napajanje iz ove zavojnice, dodati diode ispravljačkog mosta i stabilizator.


Fig.3 Transpondersko kolo.

Hajde sada da pričamo o kolu čitača za ovaj transponder. Kolo je prilagođeno na osnovu prethodno korištenog EMMARINE čitača kartica. Dio kola sa generatorom na 74hc4060 može se sigurno izbrisati u ovoj fazi, jer za sada koristimo aktivnu oznaku. Međutim, ovaj dio kola će nam trebati kasnije, kada napravimo pasivnu oznaku i trebamo primiti napajanje od čitača. Inače, sklop se ne razlikuje značajno od kruga čitača za EMMARINE: pasivni vršni detektor - filter - pojačalo - komparator. Kolo ima najveću moguću jednostavnost i omogućava vam čitanje podataka transpondera na udaljenosti od 10-12 cm sa dobro podešenim krugovima.

Možete još više pojednostaviti sklop, ostavljajući samo detektor i filter, a na izlaz staviti jedan tranzistor koji će igrati ulogu komparatora, ali ja to nisam uradio. Na izlazu dobijamo binarni signal pravokutnog oblika u skladu sa kodiranim trajanjem impulsa koje prenosi transponder. Dozvoljena odstupanja vrijednosti elemenata pri kojima strujno kolo radi su 5-10%. Napajanje za kontroler i opamp +5V. Kvarcna frekvencija glavnog oscilatora kontrolera je 12 MHz. Izlaz komparatora na LM358 je povezan na eksterni prekidni pin INT0 kontrolera. Program kontrolera je konfigurisan da poziva prekid na rastućoj ivici na eksternom prekidnom pinu INT0. Rukovalac prekida provjerava impulse takta, a zatim provjerava zaglavlje paketa i upisuje sadržaj u bafer kontrolera. Podaci o pročitanim paketima se prenose preko RS232 interfejsa do računara. Za konfiguraciju terminala navodimo sljedeće parametre: brzina 57,6Kb/s, 8 bitova podataka, 1 stop bit, bez parnosti.

Prilikom prijema paketa, kontroler izračunava kontrolni zbroj primljenih bajtova i prenosi podatke terminalu (paket i CRC). Ako postoji podudaranje kontrolne sume izračunat od strane kontrolera i primljen u paketu, signal se izlazi na pin PORTB.0 (14) kontrolera (LED1 na dijagramu). Može se povezati na ovu tačku visokotonac sa ugrađenim generatorom ili LED kroz otpor. Prilikom čitanja ispravnog ključa, kontroler onemogućuje eksterne prekide i pravi kašnjenje od 1s prije sljedećeg čitanja. Predviđen je i način rada ovog čitača kao osnove RFID brave. Da biste to učinili, potrebno je upisati čitav dump bajtova transpondera u EEPROM kontrolera čitača - 10 bajtova. Podaci se upisuju u EEPROM čitača na isti način kao i u EEPROM transpondera. U ovom slučaju, kada se pročita sljedeći transponder i on se poklapa sa onim što je zapisano u EEPROM čitača, signal se izlazi na pin PORTB.1 (15) kontrolera (LED2 na dijagramu). Možete spojiti LED na ovu tačku preko otpornika ili izlaznog prekidača (tranzistora) na releju aktuatora. Sada imamo RFID bravu za određeni ključ i običan čitač u jednoj boci.


Fig.4 Dijagram čitača RFID oznaka. (uvećani dijagram)

Dakle, hajde da sumiramo međurezultate. Proizvedeno sopstveni čitač i transponder za ovaj čitač. Zaštitili smo našu opremu od stranih uređaja rad sa popularnim RFID protokolima. Sljedeći korakće biti proizvodnja pasivne oznake za naše čitatelje kao što to rade poznatih proizvođača industrijski transponderi i prenos koda opreme na jeftinije modele kontrolera. U arhivi prilažem firmver za transponder i čitač uz članak.

Preuzmite firmware:
Nemate pristup preuzimanju datoteka sa našeg servera

Najbolji članci na ovu temu