RFID (Radio-Frequency Identification) [310463]
Capitolul I
RFID (Radio-Frequency Identification)
RFID – [anonimizat], este de fapt utilizarea undelor radio pentru citirea și capturarea informațiilor stocate pe card de tipul RFID. Un astfel de card poate fi detectat de la câțiva metri distanță și nu este necesar să fie amplasat în linie dreaptă pentru ca informația stocată pe el sa poată fi recepționată de către cititor.
[anonimizat], cardurile tip RFID ([anonimizat]) și software specializat RFID.[4]
Figura I.1 – Structura sistemului RFID[1]
În Figura I.1 este reprezentată structura sistemului RFID și comunicarea dintre componentele acestuia.
[anonimizat] I.1 este compus din: [anonimizat]-o [anonimizat] o bază de date[4].
[anonimizat]-ul special RFID. [anonimizat].
[anonimizat] o [anonimizat] o [anonimizat].
I.1 Sistemul RFID
Un sistem RFID are nevoie de următoarele componente: [anonimizat], calculator, interfață GUI și o bază de date.
Figura I.2 – Sistemului RFID[2]
În Figura I.2, [anonimizat] a acestuia.
După cum se poate observa din Figura I.2, sistemul RFID este alcătuit din următoarele componente:
– [anonimizat] (graphical user interface) [anonimizat] a [anonimizat], [anonimizat]. Pentru citirea completă a memoriei unui card de tip RFID este necesar ca acesta să fie alimentat timp de 6 secunde și totodată pentru aceeași perioadă de timp sa fie in aria e acțiune a cititorului RFID.
– cititorul citește informația înscrisă pe card și o trimite calculatorului.
– calculatorul, [anonimizat], [anonimizat].
– pentru terminarea sesiunii de citire a cardului este de ajuns doar ca acest card sa fie scos din raza de acțiune a cititorului
– [anonimizat].
– pentru încetarea funcționării programului se folosește programul de rulare pe calculator (Windows/IOS/Linux)
– pentru oprirea cititorului RFID este necesară scoaterea comunicației seriale (USB) [anonimizat]-un cablu diferit de USB sau prin acumulatori.
Paralel cu tehnologia RFID s-a [anonimizat]. Codul de bare folosește un sistem unic de scriere a acestora, numit și UPC (Universal Product Code). Acesta conține un număr unic de 12 digiți în care se află vânzătorul, tipul produsului, cât și producătorul acestuia. Codul de bare este scris pe fiecare produs, în general, în două formate:
– în format binar reprezentat prin bare verticale albe și negre, cele negre reprezentând numărul 1, iar cele albe reprezentând 0. Liniile sunt foarte subțiri, iar când sunt comasate mai multe atunci se poate observa o îngroșare a liniei negre/albe;
– în format zecimal, in care primele 6 cifre reprezintă numărul unic al producătorului, iar următoarele 5 cifre reprezintă numărul unic de identificare a produsului (lot, data când a fost produs), iar ultimul digit, numărul 12 este numit si digitul de verificare, fiind utilizat pentru verificarea dacă UPC-ul pentru produsul specific este corect.
Pe lângă codul de bare se mai poate folosi și scanarea retinei, amprentei degetului sau modelul pigmentarii pielii pentru identificarea unui individ/ animal. Dar pentru acestea este necesară o bază de date, unde sunt trecute aceste date, astfel încât aceasta să fie transmise către cititor când acesta citește un tip din acestea. De obicei acestea sunt utilizate de organele de poliție și de companiile specializate. Dar acestea necesită un program destul de dezvoltat, componente hardware avansate și, și așa rularea programului necesită timp și trebuie comparată poza/ informația primita cu fiecare persoană/animal/element stocat în baza de date, iar la final programul oferă mai multe posibilități găsite în baza de date, similare cu poza/ informația primită inițial.
Tabelul I.1 – Comparație între codul de bare si RFID[2]
În Tabelul I.1 este realizată o comparație între codul de bare și sistemul RFID (nu am introdus sistemul de identificare prin retină/amprentă/model, deoarece acestea sunt folosite de obicei de organele de poliție).
I.2 Funcționarea sistemului RFID
Sistemul RFID este compus din două părți: un card din plastic si un cititor-emițător. Cardurile RFID au încorporat un emițător și un receptor. Componenta RFID de pe card are două părți: un microcip care are rolul de a stoca și a procesa informații și o antenă pentru a recepționa și transmite semnalul. Cardul conține un număr de serie specific pentru un anumit obiect.
Pentru a putea citi informația înscrisă in cardul de memorie, care aparține cardului de plastic, un emițător-receptor radio cu două căi numit un interogator sau cititor, emite un semnal către card cu ajutorul unei antene. Cardul răspunde la interogator, trimițând informațiile scrise în memorie. Interogatorul va transmite apoi informațiile citite la un program de pe calculator, specific citirii RFID.
La un sistem RFID simplu, semnalul transmis de cititor funcționează ca un întrerupător on-off, la sistemul RFID mai sofisticat semnalul transmis de cititor poate conține comenzi transmise către card (instrucțiuni de scriere-citire la o parte specifica a memoriei sau poate conține chiar și parole).
Istoric, cititorul RFID a fost conceput sa citească doar un tip de carduri, însă în ziua de astăzi cititoarele multi-moduri pot citi o gama variată de carduri și au devenit foarte populare.
Cititoarele RFID sunt în permanență active, setate pe on, transmițând semnal radio în mod continuu și sunt în așteptarea unui card, care intră în aria semnalului radio. Pentru unele cititoare RFID care funcționează pe baterii și trebuie să conserve energia, a fost proiectat un buton fizic/virtual pentru activarea semnalului radio. Cu toate că unele aplicații nu sunt necesare și sunt nedorite, la cititoarele RFID care funcționează pe baterii se poate opta pentru două funcționalități: să transmită semnal radio atât timp cat este apăsat butonul sau după apăsarea butonului semnalul radio sa rămân activ o anumita perioada de timp (presetată sau setabilă).
Benzile de frecvență diferă de la un sistem RFID la altul, acestea diferă și în funcție de legile aplicate într-o țară cât și de domeniul de aplicare a acestuia. Frecvența se referă la mărimea undelor radio pe care o utilizează un sistem RFID specific. Urcând în spectrul radio, transmiterea de date este din ce în ce mai bună și mai rapidă, dar la undele înalte sensibilitatea la mediul înconjurător este ridicată, acesta putând interfera cu datele transmise-recepționate. În ziua de astăzi sunt folosite 3 tipuri majore de frecvențe care sunt utilizate în sistemele RFID: Low Frequency (frecvențe joase), High Frequency (frecvențe înalte), Ultra High Frequency (frecvențe foarte înalte) și microundele.
Tabelul I.2 – Banda de frecvențe a cardurilor [1]
În Tabelul I.2 sunt prezentate beneficiile și dezavantajele benzilor de frecvențe utilizate în sistemele RFID.
În funcție de unde este instalat și activitatea, pentru un cititor RFID sunt scrise diferite programe, de exemplu:
la un garaj unde trebuie citit cardul de pe mașină pentru a o identifica se optează la un cititor RFID cu semnal radio prelungit după activarea butonului (acesta fiind necesar deoarece fiecare mașină are nevoie de o durată de timp diferită pentru parcurgerea aceleași distante);
la un depozit, unde cititorul RFID este mobil se optează la un program care transmite semnal radio atâta timp cat este apăsat butonul de citire (pentru a economisi energia bateriei).
Ca și in cazul cardurilor, cititoarele RFID au diferite mărimi, cel mai mare fiind de dimensiunea unui calculator personal, totodată având foarte multe funcții, ca de exemplu: conectarea la o rețea de calculatoare si transmițând celorlalte calculatoare informația citita de pe card, dar si primind informația citită de pe card ca alte calculatoare, astfel fiind creata o rețea de cititoare RFID. Cele mai mici cititoare RFID au dimensiunea unui timbru, fiind concepute pentru a fi integrate într-un telefon inteligent sau într-un dispozitiv mobil.
În zilele noastre, mai multe firme se ocupă de vânzarea cititoarelor RFID, cum ar fi: Mifare, Hitachi si Philip. Datorită multitudinilor de aplicații folosite în întreaga lume, aceste sisteme necesită funcționare simultană pe mai multe frecvențe. Sistemele disponibile pentru consumul de piață operează în următoarele plaje de frecvență: sub 135 kHz (125 kHz – 134.2 kHz), 13.56 MHz, UHF (860/960 MHz), 2.45 GHz si 5.8 GHz. Operațiile și controlul caracteristicilor diferă pentru fiecare frecvență și de aceea fiecare din ea este mai bună pentru diferitele tipuri de aplicații sau diferitelor țări, unde diferă legea radio a frecvențelor utilizabile.
I.3 Cardul RFID
Figura I.3 – Card RFID
În Figura I.3 am reprezentat cardul RFID, în partea stângă se găsesc două dintre cel mai des utilizate modele, iar în partea dreaptă se află schema electronică, din interiorul acestora.
Cunoscut și sub numele de transponder, derivat din transmitter (transmițător) și responder (răspuns la anumit semnal) conține date și transmite către cititor când acesta este interogat de el. Cele mai comune carduri folosite au în componență un circuit integrat împreună cu o memorie și un card microprocesor esențial. Alte carduri nu au niciun circuit integrat și niciun chip. Acestea sunt eficiente în aplicații, unde raza de acțiune pentru radio-transmițător și funcțiile acestui card sunt minime. Acestea pot atinge o acuratețe mai bună în raza de acțiune a radio-transmițătorului, chiar și un cost mai redus decât cele ce au un circuit integrat.
Sunt două tipuri majore de carduri RFID: active și pasive. Cele pasive nu necesită o sursă de curent internă, acestea sunt activate doar închizând circuitul radio de la cititorul RFID, acesta alimentând acest card, iar cele active necesită o sursă de alimentare de obicei sub forma unei baterii.
Funcționalitatea întregului sistem RFID, incluzând atât cardul cât și cititorul RFID.
Pentru cardurile pasive, sistemul transmite unde radio cu ajutorul antenei pentru captarea unui card pasiv intrat în zona de acțiune a undei radio. În funcție de sistem, această transmitere de unde radio poate să fie continuă sau activată prin impuls, la fel și în funcție de tip, model transmițător RFID, raza de transmitere a undei radio diferă. Când cardul pasiv intră în acțiunea undei radio, cu ajutorul acestei unde, cardul RFID se alimentează cu energie, aceasta fiind necesară pentru activarea chipului amplasat în acesta. Cardul trebuie alimentat minim timp de 6 secunde pentru ca cititorul RFID să citească toata informația de pe memorie. Dacă nu este alimentat, cardul RFID este scos din raza de acțiune a undei radio, iar cititorul RFID poate citi doar o parte din informația scrisă în cardul de memorie.
Pentru cardurile active, indiferent de sistemul de citire RFID care este activat continuu sau prin impuls, acesta transmite un semnal continuu pentru a fi recepționat, acest card putând fi citit de la marginea razei de acțiune a undei radio. Acest sistem este util la cardurile care sunt în trecere pe lângă sistemul cititor RFID, fie pe bandă sau alte mijloace de transport, acestea având o raza mai mare de activare a cardurilor pentru a fi citite. Având implementat o sursă de alimentare în componența lor, sistemul este alimentat continuu, nu se pierde timp prin alimentarea acestuia când intră în raza de acțiune a cititorului RFID, astfel datele pot fi transmise imediat la întâmpinarea unui cititor, indiferent unde se află în raza de acțiune a acestuia. Acest sistem se folosește unde este necesară o citire rapidă, completă și de acuratețe.
S-au inventat diferite forme de carduri RFID, care pot fi utilizate în diferite activități, în funcție unde este necesară amplasarea acestora, sau unde sunt utilizate acestea, pot avea mai multe dimensiuni și forme, de exemplu:
într-o rețea de siguranță, unde un angajat are dreptul doar la o parte din incinta unei clădiri s-a optat la un card RFID tip card de bancă, unde este lipită poza angajatului și anumite informații despre el, acesta fiind obligat să o poarte la piept/gât pentru a putea fi identificat cu ușurință.
La o scară de bloc sau locuințe unde nu este un portar s-a optat pentru un card RFID tip breloc, acesta fiind atașat cu ușurință la chei.
La colete/containere ambalaje se poate opta la un card tip placă de metal, înlăturarea acestuia nefiind necesară la fiecare ciclu.
La cheile de mașină s-a introdus un card RFID tip tub de sticlă, acesta dacă este imobilizat de carcasa cheii, rezistă foarte bine în timp și la șocuri.
La trimiterea unei scrisori se poate atașa un card RFID pentru hârtie (acesta fiind compus doar din circuitul necesar pe un abțibild care se lipește de hârtie) acesta se mai folosește și la magazine, unde este folosit ca și sistem anti-furt.
Există trei tipuri de carduri:
Pasive:
carduri foarte mici de tipul RFID;
fără alimentare internă;
care nu necesită baterii/alimentare și au durată de viață mare.
Semi-Active:
similare cu cele pasive;
baterie mică;
bateria adițională ajută la o viteza de reacție mai mare a cardului RFID;
putere de citire mai mare, totodată si de la distanțe mai mari.
Active
conțin sursă de alimentare internă (baterie);
bateria alimentează circuitul cardului RFID, cât și transmițătorul acestuia.
Cardul RFID, Clasa-1 Generatia-2 ("Gen-2") este utilizat pentru identificarea produselor utilizate în zona de comerț. „Clasa-1" se referă la funcționalitatea cardului RFID, în timp ce "Gen-2" se referă la standardele fizice și logice ale cardului RFID și a sistemului cuprinzător. Aceste standarde sunt menținute de EPC global. Standardele "Gen-2" au fost adoptate în decembrie 2004 și oferă numeroase avantaje față de "Gen-1", cum ar fi:
un standard interoperabil, global;
viteze de citire mai rapide și mai flexibile;
performanță mai rapidă și mai precisă prin utilizarea protocoalelor anti coliziune avansate;
o modalitate mai ușoară de a trimite mai mulți cititori la un moment dat către utilizatorii finali;
îmbunătățirea securității și confidențialității.
Cardurile RFID sunt de mai multe feluri, acestea fiind clasificate în clase de la 0 până la 5, în funcție de funcționalitatea lor:
Clasa 0: UHFI numai pentru citire, card pasiv preprogramat;
Clasa 1: UHF sau HF; scris o singura data, citire multipla (WORM);
Clasa 2: carduri de tip citire-scriere, poate fi scris și citit de ori câte ori este nevoie;
Clasa 3: citire-scriere cu senzori incorporați în card, capabili să înregistreze parametri precum temperatura, presiunea și mișcarea; pot fi semi-pasive sau active.
Clasa 4: carduri de tip scriere-citire, cu transmițători integrați; un card poate comunica cu alte carduri și/sau cititoare, însă nu în același timp, doar pe rând.
Clasa 5: similar cardurilor din clasa 4 dar cu funcționalități suplimentare, cum ar fi: alimentarea cu energie a altor carduri de tipul RFID și pot să comunice și cu alte dispozitive în afară de cititoare.
Cardurile RFID de Clasa-1 Gen-2 sunt compatibile cu cardurile din Gen-1 Clasa 0 și Clasa 1.
EPC/RFID (Electronic Product Code) – este o sintaxă pentru identificarea unică asignată unui obiect fizic, încărcarea unității, locația acesteia sau alte identificări ale obiectului, având un rol important în operațiile de afaceri.
EPC are reprezentări multiple, incluzând și o formă binară potrivită pentru utilizarea cardurilor RFID și o formă text potrivită pentru schimbarea de date a sistemelor între corporații.
TDS (Tag Data Standard) – specifica formatul de date al EPC-ului si oferă codarea pentru scheme numerice, incluzând si parole in componenta EPC-ului.
Aplicațiile actuale a sistemelor RFID:
Sistemele RFID au o gama foarte larga de aplicabilitate, cum ar fi:
industria comerțului;
transport și logistică;
transport public;
infrastructura de supervizare și protecție;
pașaport;
plătirea transportului (exemplu: carduri benzinării, iar nota de plată se face la finalul lunii);
plăti bancare;
identificarea animalelor;
identificarea oamenilor;
identificarea plantelor;
identificarea echipamentelor (exemple: bagaje, lucruri personale);
instituții publice/private;
sport;
înlocuitor de cod de bare;
identificarea autovehiculul și plătirea automată a taxelor de drum aferente fiecărui mijloc de transport.
Avantajele sistemelor RDIF:
Un sistem RFID oferă multe avantaje pentru furnizorii magazinelor mici, mari și mijlocii. Mai jos se afla beneficiile unui astfel de sistem:
reducerea costurilor logistice;
inventarierea logistica îmbunătățita;
procese de afaceri simplificate;
creșterea vânzărilor;
reducerea contractanților;
stocarea de date diferite a unui obiect/persoană.
Spre deosebire de un sistem de cod de bare, un sistem de identificare RFID nu are nevoie de contact, vizibilitatea fizică a cartelei nefiind necesară pentru citirea ei.
Aceasta automatizare reduce necesitatea scanării manuale a produselor și a timpului necesar pentru această operație, astfel reducând costul logistic total pentru companie.
Capitolul II
ARDUINO
Arduino Uno este un microcontroller bazat pe ATmega328. Are 14 pini digitali de intrare / ieșire (din care 6 pot fi utilizați ca și ieșiri PWM), 6 intrări analogice, un oscilator de cristal de 16 MHz, o conexiune USB, o mufă de alimentare, mufa ICSP și un buton de resetare. Conține tot ce este necesar pentru a susține microcontroller-ul; pur și simplu se poate conecta la un computer cu un cablu USB sau se poate alimenta cu un adaptor AC-DC sau cu o baterie pentru a-l activa. Uno diferă de toate modelele predecesoare acestei plăci în care nu utilizează chip-ul FTDI USB-to-serial driver, în schimb acesta dispune de Atmega8U2[9], programat ca un convertor USB-serial[11].
"Uno" înseamnă unul în italiană și este numit pentru a marca lansarea viitoare a Arduino 1.0. Uno și versiunea 1.0 vor fi versiunile de referință ale lui Arduino. Acesta este ultimul într-o serie de plăci USB Arduino, utilizat in platforma Arduino.
II.1 Placa Arduino UNO
Figura II.1 – Placa Arduino UNO[11]
În Figura II.1 este reprezentată placa Arduino, în stânga este placa reală, iar în partea dreaptă sunt reprezentate ieșirile plăcii Arduino realizate pritr-o schemă grafică.
Placa Arduino poate fi alimentată în două moduri: prin USB sau printr-o sursă de alimentare externă, de exemplu o baterie. Mufa de alimentare electrică externă este în partea stânga, jos a imaginii reale, iar mufa USB se află în partea stangă, sus a imagii reale din Figura II.1.
II.2 Componentele plăcii Arduino UNO
Microcontroller ATmega328;
Tensiune de operare 5V;
Tensiune de intrare (recomandată) 7-12V;
Tensiune de intrare (limite) 6-20V;
14 pini I / O de tip digital (din care 6 asigură ieșire PWM);
6 pini de intrare de tip analogic;
Curentul continuu pe pinul I / O de 40 mA;
Curentul continuu pentru pinul de 3.3V 50 mA;
Memorie flash de 32 KB din care 0,5 KB folosiți de bootloader-ul SRAM de 2KB;
EEPROM de 1 KB;
Viteza ceasului 16 MHz.[8]
Figura II.2 – Schema electronică a plăcii Arduino UNO [8]
În Figura II.2 este reprezentată schema electronică a unei plăci Arduino, care folosește un microcontroller ATMEGA328P-PU.
Arduino Uno poate fi alimentat prin conexiunea USB sau cu o sursă de alimentare externă. Sursa de alimentare este selectată automat. Puterea externă (non-USB) poate proveni de la un dispozitiv transformator AC-DC (din curent alternativ in curent continuu) sau baterie. Adaptorul poate fi conectat prin conectarea unui cablu de 2,1 mm, cu centru-pozitiv si exteriorul negativ în mufa de alimentare a plăcii. Conductorii de la o baterie pot fi inserați în ground și in pinul de power al plăcii.
Placa poate funcționa pe o sursă externă de la 6 până la 20 de volți. Dacă este furnizat cu mai puțin de 7V, cu toate acestea, pinul 5V poate furniza mai puțin de cinci volți și placa poate fi instabilă. Dacă se folosesc mai mult decât 12V, regulatorul de tensiune se poate supraîncălzi și poate deteriora placa. Intervalul recomandat este 7 la 12 volți.[8]
Pinii de alimentare sunt următorii:
VIN: Tensiunea de intrare la placa Arduino atunci când utilizează o sursă externă de alimentare (spre deosebire la 5 volți de la conexiunea USB sau de la altă sursă de alimentare reglată). Se poate furniza tensiune prin acest pin sau, dacă se alimentează tensiune prin mufă de alimentare.
5V: sursa de alimentare reglată utilizată pentru alimentarea microcontrolerului și a altor componente de pe placa. Acest lucru poate veni fie de la VIN prin intermediul unui regulator de pe placa, fie poate fi furnizat de USB sau de alt regulator de alimentare de 5V.
3V3: o alimentare de 3,3 volți generată de regulatorul de pe placa. Rezistența curentului maxim este de 50 mA.
GND: pini de impamantare.Atmega328 are 32 KB de memorie flash pentru stocarea codului (din care 0,5 KB este folosit pentru bootloader). De asemenea, are 2 KB de SRAM și 1 KB de EEPROM (care poate fi citit și scris cu biblioteca EEPROM). Fiecare dintre cei 14 pini digitali de pe Uno pot fi folosiți ca intrare sau ieșire, utilizând funcțiile pinMode (), digitalWrite () și digitalRead (). Acestea funcționează la 5 volți. Fiecare pin poate asigura sau primi un maxim de 40 mA și are o rezistență internă (deconectată implicit) de 20-50 KΩ. În plus, unii pini au funcții specializate:
Serial: 0 (RX) și 1 (TX). Folosit pentru a recepționa (RX) și a transmite (TX) date seriale TTL. Acești pini sunt
conectați la pinii corespunzători ai cipului ATmega8U2 USB-to-TTL Serial.
Întreruperi externe: pinii 2 și 3. Acești pini pot fi configurați pentru a declanșa o întrerupere la o valoare mică, marginea în creștere sau în scădere sau o modificare a valorii. Prin funcția attachInterrupt () se poate declanșa o întrerupere de valoare mica, când valoarea este crescuta sau scăzută, sau apare o modificare a valorii.
PWM: pinii 3,5, 6, 9, 10 și 11asigura ieșirea PWM pe 8 biți cu funcția analogWrite ().
SPI: pinii 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Acești pini ajuta la comunicarea SPI, care, deși furnizat de hardware-ul de bază, nu este inclus în limbajul Arduino.
LED-ul: pinul 13. Există un LED încorporat conectat la pinul digital 13. Când pinul este setata pe HIGH, LED-ul este pornit, iar când pinul este setat pe LOW, este oprit.[8]
Uno are 6 intrări analogice, fiecare furnizând 10 biți de rezoluție (adică 1024 valori diferite). În mod prestabilit, se măsoară de la împământare la 5 volți, deși este posibil să se schimbe vârful superior al lui, gama lor folosind pinul AREF și funcția analogReference ().
În plus, unii pini au funcționalitate specializată:
I2C: pinii 4 (SDA) și 5 (SCL). Suportă comunicarea I2C (TWI) folosind biblioteca Wire.
Există și alți pini pe placa:
AREF. Tensiunea de referință pentru intrările analogice. Folosit cu analogReference ().
Reset. Activata această linie pe LOW se resetează microcontrolerul. De obicei, pentru a adăuga un buton de resetare pe module care blochează acest buton.
Arduino Uno are mai multe facilități pentru a comunica cu un computer, sau alte microcontrolere. ATmega328 furnizează 5V pe UART TTL, care este disponibil pe pinii digitali 0 (RX) și 1 (TX). Un ATmega8U2 de pe placă canalizează o comunicație serială prin USB și aceasta apare ca un port virtual pentru software-ul de pe calculator. Firmware-ul 8U2 folosește driverele standard pentru comunicare pe USB și nu este nevoie de un alt driver. Cu toate acestea, pentru Windows, este necesar un fișier * .inf. [11]
Software-ul pentru Arduino include un monitor serial care permite trimiterea de date tip text simplu, trimise la și de la placa Arduino. LED-urile RX și TX de pe placă vor palpai când există date transmise prin chip si conexiunea USB către computer, dar nu si prin comunicația seriala de pe pinii 0 si 1. [11]
O bibliotecă de programe software permite comunicarea serială pe oricare dintre pinii digitali ale lui Uno. ATmega328 suportă, de asemenea, comunicarea I2C (TWI) și SPI. Software-ul Arduino include o bibliotecă Wire pentru simplificarea utilizării interfeței I2C. Arduino Uno poate fi programat cu software-ul specific pentre Arduino. Se selectează "Arduino Uno w / ATmega328" din meniul Tools> Board (pe microcontrolerul de pe placa).
ATmega328 de pe Arduino Uno are deja instalat bootloader, care permite încărcarea codului nou fără utilizarea unui programator hardware extern. Comunicarea se face prin protocolul original STK500 (referință, fișiere C header).
De asemenea, se poate ocoli bootloader-ul și programa microcontrolerul prin ICSP (In-Circuit Programare seriale). Codul sursă al firmware-ului ATmega8U2 este deja disponibil pe el. ATmega8U2 este încărcat cu un DFU încărcător de boot, care poate fi activat prin conectarea jumperului de lipire pe spatele plăcii și apoi se resetează 8U2. Apoi se poate utiliza software-ul FLIP al lui Atmel (Windows) sau programatorul DFU (Mac OS X și Linux) pentru a încărca un nou firmware. Se mai poate utiliza antetul ISP cu un programator extern (suprascrierea bootloader-ului DFU).
În locul unei apăsări fizice a butonului de resetare înainte de încărcare, Arduino Uno este proiectat într-un mod care îi permite să fie resetat prin software-ul rulat pe computer-ul conectat. Controlarea hardware-ului (DTR) ale lui ATmega8U2 sunt controlate prin liniile de flux si sunt conectate la circuitul de resetare a liniei. Când această linie începe sa nu mai fir alimentata, iar curentul prin ea tinde spre zero, linia de reset este întrerupta atâta timp cât să permită resetarea chip-ului.[11]
Software-ul Arduino folosește această capacitate pentru a permite încărcarea codului prin simpla apăsare a butonului de încărcare din mediul Arduino. Aceasta înseamnă că bootloader-ul are un timp mai scurt de executare, atâta timp cat DTR-ul este scăzut poate fi bine coordonat cu pornirea încărcării programului. [11]
Această configurație are o implicare de resetare a Uno-ului. Când Uno se conectează la un computer pe care rulează Mac OS X sau Linux, acesta se resetează de fiecare dată atunci când o conexiune software este făcută prin USB. După jumătate de secundă, bootloader-ul care rulează pe Uno este programat să ignore orice date deformate înscrise pe el, in afara de încărcarea unui nou cod, aceasta însemnând ca primii bytes trimiși către placa prin conexiunea USB vor fi interceptați.
Dacă o schiță de program rulează pe placă si primește o configurație unică, sau alte date, când rulează prima oară, software-ul trebuie scris sa aștepte minim o secundă pentru deschiderea canalului USB înainte să trimită date.[11]
Uno-ul conține o ruta care poate fi tăiată pentru a dezactiva resetarea automată. Contactele din fiecare parte a rutei pot fi lipite împreună pentru a o reactiva. Aceasta este etichetata "RESET-EN". Se poate dezactiva resetarea automata conectând o rezistență de 110 ohmi de la o alimentare de 5V la linia de resetare.
Arduino Uno are o siguranța care protejează porturile USB ale computerului de scurt-circuit și supracurent. Deși majoritatea computerelor oferă protecție proprie internă, siguranța amplasată pe placa Arduino oferă o protecție suplimentară. Dacă se aplică mai mult de 500mA la portul USB, siguranța va întrerupe automat conexiunea până când scurt-circuit-ul sau suprasarcina este rezolvat sau înlăturat. [11]
Lungimea și lățimea maximă a plăcilor PCB Uno sunt de 6,9 și, respectiv, 5.3 cm, dar Conectorul USB și mufa de alimentare se extind dincolo de dimensiunea anterioară. Trei găuri de șuruburi permit placa să fie atașată de o suprafață sau la o carcasă. Distanța dintre pinii digitali 7 și 8 este 160mil nu un multiplu uniform de spațiere de 100mil al celorlalți pini. Arduino poate simți mediul prin primirea de informații de la o varietate de senzori si poate afecta mediul înconjurător prin controlul luminilor, al motoarelor și al altor dispozitive de acționare. Microcontrolerul de pe placa este programat folosind limba de programare Arduino (bazată pe cablare) și Arduino mediu de dezvoltare (bazat pe procesare). Proiectele Arduino pot fi independente sau pot comunica cu software-ul pe care rulează pe un computer (de exemplu, Flash, Prelucrare, MaxMSP).
II.3 Modulul RC522 Arduino
Folosind acest modul a lui Arduino ajută foarte mult, deoarece există librării dedicate acestui modul, dezvoltate de compania Arduino, dar si prețul de achiziție al modulului este mic.
Figura II.3 – RFID-RC522[5]
În Figura II.3 am reprezentat cititorul de card RFID-RC522, care este proiectat pe baza microcontroller-ului MFRC522. În partea stângă, sus a figurii II.3[7] am reprezentat imaginea reală a cititorului RFID-RC522. În partea dreaptă, sus a figurii II.3 am reprezentat grafic ieșirile microcontroller-ului MFRC522. În partea de jos a figurii II.3 am reprezentat schema electronică a cititorului de card RFID-RC522.
Modulul RFID-RC522 este un cititor de carduri RFID foarte utilizat în proiectele realizate cu Arduino. Acesta citește cardul RFID care se află in raza lui de acțiune de maxim 1 metru prin undele radio.
Microcontroller-ul “Mifare RFID Reader/Writer”, încorporate în modul permite citirea simultană a mai multor carduri pe frecventa înaltă de 13.56 MHz. Acesta are un cost de producție scăzut, de aici și prețul de achiziție este destul de mic, acest lucru favorizând la utilizarea în multiple proiecte Arduino.
Acest microcontroller are 32 de pini:
IIC (GND)
PVDD (+3.3V)
DVDD (+3.3V)
DVSS (GND)
PVSS (GND)
/RST (+3.3V conectați la o rezistența de 10KΩ)
MFIN
MFOUT
SVDD
TVSS (GND)
TX1 (TX1)
TVDD (+3.3V)
TX2 (TX2)
TVSS (GND)
AVDD (+3.3V)
VMID (conectat la GND printr-un condensator de 104F)
RX (RX)
AVSS (GND)
AUX1
AUX2
OSCIN (conectat la OSC de 27.12M și doua condensatoare de 15pF)
OSCOUT (conectat la ieșirea circuitului OSCIN)
IRQ
SDA (MFSDA)
D1
D2
D3
D4
D5 (MFSCK)
D6 (MFMOSI)
D7 (MFMISO)
EA (+3.3V) [7]
Capitolul III
Prezentarea aplicației practice
III.1. Partea Hardware
În această lucrare am realizat un sistem RFID, cu ajutorul plăcii de dezvoltare Arduino și a modulului RFID-RC522.
Figura III.1 – Componente pentru aplicația practică
În Figura III.1 am reprezentat componentele achiziționate pentru realizarea părții practice a acestei lucrări.
Pentru realizarea părții practice am utilizat următoarele componente hardware și software:
partea de hardware: Arduino UNO, modulul RFID-RC522, carduri RFID, cablu USB, cablu conectivitate;
partea de software: Software-ul Arduino.
Figura III.2 – Cositorirea pinilor la modulul RFID-RC522
În Figura III.2 este reprezentată operația de cositorire efectuată pe modulul RFID RC522. Această operație este necesară deoarece acest modul nu vine cu acești pini montați.
Figura III.3 – Schema electronică de montaj
În Figura III.3 este reprezentată schema electronică de montaj pentru conectarea modulului RFID RC522 la placa Arduino.
Deoarece modulul RFID-RC522 are o tensiune de alimentare de 3.3V, alimentarea acestuia este conectată la ieșirea de 3.3V a plăcii Arduino, iar pentru împământare am folosit primul pin de Ground.
Pinul de Reset de la modulul RFID-RC522 l-am conectat la pinul digital 9 de pe placa Arduino. Restul pinilor de la modulul RFID RC522 i-am conectat astfel:
RFID-RC522 – Placa Arduino
– Pin SDA – Pin 10;
– Pin SCK – Pin 13;
– Pin MOSI – Pin 11;
– Pin MISO – Pin 12;
Pinul IRQ nu l-am folosit, deoarece pentru proiectul acesta nu a fost necesar.
Figura III.4 – Schema electronică de montaj realizat de mine
În Figura III.4 este prezentată cablarea realizată de mine, dintre placa Arduino și modulul RFID-RC522.
Figura III.5 – Funcționarea sistemului [16]
În Figura III.5 am reprezentat funcționarea sistemului. Acest sistem are la bază două bobine, acestea funcționând ca doua antene . Sistemul RFID alimentează bobina atașată de el, aceasta creând un câmp electromagnetic. Acest câmp electromagnetic alimentează bobina de pe card, aceasta fiind alimentată, alimentează chipul de pe card. Chipul de pe card este reprezentat în partea dreaptă a figurii III.5. Chipul fiind alimentat, poate fi citit/scris.
III.2. Partea Software
Un chip de card RFID are structură ce conține 16 sectoare fiecare sector având la rândul lui 4 blocuri. Această structură este reprezentată în Figura III.6. Ultimul bloc din fiecare sector este un bloc de tip trailer, acesta este predefinit de fabricant, în care nu se pot scrie date. Primul bloc nu poate fi scris deoarece pe primul bloc sunt date de autenticitate scrise de fabricant.
Fiecare card RFID de tip MIFARE are o memorie de 1 KB, aceasta fiind împărțită în 16 sectoare numerotate de la 0 la 15 cum se poate observa în Figura III.6. Fiecare sector are 4 blocuri iar pe fiecare bloc poate fi înscrisă o informație de 2 bytes excepție făcând Blocurile Trailer și primul bloc numerotat cu 0. Biții de acces sunt numerotați de la 0 la 15 cum se poate observa în Figura III.7. Pentru o citire completă și corectă a informației înscrise pe card, este necesar un timp minim de 6 secunde.
Figura III.6 – Reprezentarea unei citiri a sectoarelor și blocurilor unui card
În figura III.6 am reprezentat cum se citesc sectoarele și blocurile unui card RFID
Figura III.7 – Schemă bloc reprezentând configurarea blocurilor pe sectoare
În Figura III.7 am reprezentat aranjarea blocurilor pe sectoare, cât și blocurile pe care se poate scrie informație, acestea fiind colorate cu verde. Cu albastru am reprezentat sectoarele, iar cu portocaliu am reprezentat blocurile de tip trailer. Primul bloc, blocul 0, colorat cu roșu este blocul pe care este inscripționat informații referitoare despre card, aceste informații sunt inscripționate de producător.
Un card nou, neinscripționat vine cu blocurile inscripționabile setate pe 0 cum se poate vedea în figura III.6, aici fiind citit un card nou.
Pentru partea de software, cu ajutorul software-ului Arduino și prin interfața USB, am dezvoltat următoarele trei programe:
– unul pentru afișarea codului HEXA inscripționat pe fiecare card;
– unul pentru înscrierea informației de tip ASCII în tip HEXA, pe fiecare card;
– unul pentru afișarea informației de tip HEXA în tip ASCII înscrise pe fiecare card.
A fost necesar dezvoltarea a trei programe separate, deoarece primul este utilizat pentru verificarea inițială, iar celelalte două sunt pentru scrierea și citirea datelor pe card, deoarece în utilizarea de zi cu zi a cardurilor nu trebuie ca scrierea și citirea să se realizeze simultan, de către același program.
Primul program conține afișarea informației despre card, și informația de tip Hexa înscrisă pe memoria de pe chip-ul cardului RFID.
Pentru activarea programului este necesară crearea unei instanțe numite MRFC522, aceasta făcându-se prin secvența de cod:
MFRC522 mfrc522(SS_PIN, RST_PIN);
Selectarea cardului pentru afișarea informației despre cardul RFID se face prin următoarea secvență de cod:
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
Utilizând următoarele secvențe de cod se afișează informațiile despre card:
mfrc522.PCD_DumpVersionToSerial();
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
Figura III.8 – Afișarea rulării primului program
În figura III.8 este reprezentată informația citită de pe card pentru rularea primului program.
Al doilea program, cel pentru înscrierea informației de tip ASCII în tip HEXA pe cardul RFID.
Pentru înscrierea unei date pe card este necesară alegerea unei chei, o cheie simplă
MFRC522::MIFARE_Key key/crearea unei chei denumite key
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;// cheia 0XFF este predefinită in librăria Arduino
}
Scrierea propriu-zisă se face astfel:
int block=#; //inițierea blocului # unde dorim să scriem informația
byte blockcontent[16] = {"Array"};//Scrierea informației de tip array pe 16 bite
Aducerea blocului in faza inițială, toți byte-ii la valoare nulă se rulează comanda
int block=#;
byte blockcontent[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Pentru afișarea informației recent înscrise în memorie, cât și transformarea din hexa în ASCII am folosit secvența de cod:
readBlock(block, readbackblock);//citirea blocului
Serial.print("citire bloc: ");
for (int j=0 ; j<16 ; j++)//printează blocul
{
Serial.write (readbackblock[j]);//Serial.write()transmite valorile ASCII la monitor }
Serial.println("");
}
Pentru a determina blocul trailer al fiecărui sector și a asigura integritatea acestuia cât și nescrierea acestuia am folosit următoarele linii de cod
int largestModulo4Number=blockNumber/4*4;
int trailerBlock=largestModulo4Number+3;//determină blocul trailer a sectorului
if (blockNumber > 2 && (blockNumber+1)%4 == 0){Serial.print(blockNumber);Serial.println("este un boc trailer:");return 2;}//blocul este un bloc trailer si programul execută terminarea acestuia cu eroarea 2
Serial.print(blockNumber);
Serial.println(" este un boc trailer:");
Autentificarea unui byte se face prin:
mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
Statusul scrierii blocului se poate afla prin:
status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);
Autentificarea blocului înaintea scrierii acestuia se face prin :
byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
Figura III.9 -Scrierea si ștergerea unui bloc
În Figura III.9 este reprezentat modul de scriere si ștergere a blocului 37. În partea stângă a figurii III.9 este afișarea programului de scriere pe blocul 37, iar în partea dreaptă este ștergerea aceluiași bloc. Secvența de cod pentru scriere respectiv ștergere este următoarea:
Scriere:
int block=37;
byte blockcontent[16] = {informatie};
Ștergere:
int block=37;
byte blockcontent[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Al treilea program, cel pentru afișarea informației de tip HEXA în tip ASCII înscrise pe fiecare card
Am folosit aceeași cheie pentru decodificarea codului
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; [6]
Afișarea informațiilor despre card este afișată in urma executării următoarei secvențe de cod
mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); [6]
Citirea fiecărui bloc se face prin [6]
byte buffer#[18]; //buffer-ul # este activat, acesta fiind necesar pentru citirea datelor
block = #; //blocul # este citit
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 2, &key, &(mfrc522.uid)); //autentificare cheii
if (status != MFRC522::STATUS_OK) {
Serial.print(F("eroare de autentificare: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}[6]
Figura III.10 – Citirea unui card gol (neinscripționat)
Atunci când, un card gol, este apropiat către citior, programul afișează mesajul din Figura III.10.
Figura III.11 – Citirea unui card aparținând unei persoane
Atunci când, un card în care sunt înscripționate date despre o persoană, este apropiat către citior, programul afișează mesajul din Figura III.11.
Figura III.12 – Eroare în citirea unui card
Când apare o eroare în timpul citirii unui card, programul începe din nou rularea acestuia pentru a citi din nou informația inscripționată pe acesta. Această reprezentare se află în Figura III.12.
Concluzii
Aplicarea și utilizarea acestor carduri în cadrul unei națiuni, este benefică atât pentru organele ce sunt desemnate pentru utilizarea și scrierea datelor unei persoane cât și pentru persoana ce trebuie să îl poarte.
Pentru identificarea unei persoane nu este necesar legitimarea acesteia, ci doar activarea cititorului RFID (aceasta fiind utilă în cazurile când o persoană refuză sa fie legitimată).
Comasarea mai multor carduri într-un card RFID reduce necesitatea purtării diferitelor carduri și documente. Informațiile deținute de un card RFID pot fi de diferite tipuri, pe acesta putând fi inscripționat atât informații despre o persoană cât și documente.
Cardurile RFID având mai multe mărimi, și forme diferite ajută la personalizare. Se poate opta la diferite forme de carduri RFID sau introducerea unui chip RFID sub piele de mărimea unui bob de orez.
Cu ajutorul programelor de clonare a cardurilor RFID se pot sustrage informații de pe acestea, acestea fiind falsificate cu o ușurință mai mare decât falsificarea unor documente.
Un impuls EMP distruge informația de pe cardul RFID, aceasta nu mai poate fi salvată sau recuperată sub nici o formă.
Această aplicație demonstrează utilizarea cardurilor de tip RFID pentru identificarea unei persoane, prin aceasta reenunțându-se la celelalte documente pe care sunt trecute informații cu privire la persoana ce trebuie identificată.
Bibliografie
[1] Mohd. Firdaus Bin Mahyidin. “Student Attendance Using RFID System”. in University Malaysia, Pahang, May2008.
[2] RFIDSensNet Lab (2005), A white paper on Automatic Attendance System. Texas A & M University, Texas, USA.
[4] Liu C.M and Chen L.S (2009), "Applications of RFID technology for improving production efficiency in an Integrated-circuit packaging house," International Journal of Production Research, vol 47, no. 8, pp. 22032216.
[5] https://sunrom.com
[6] https://github.com/miguelbalboa/rfid
[7] https://ardushop.ro/ro/electronica/78-kit-rfid.html
[8] https://www.fecegypt.com/uploads/dataSheet/1522237550_arduino%20uno%20r3.pdf
[9] Elisabeth I., Zsolt K., Peter E., Laszlo M., “The RFID Technology and its Current Applications” in MITIP-2006.
[10] User Manual: www.technovision-edu.in.com and technovision.edu@gmail.com
arduino-duemilanove-uno-design.zip and Schematic: arduino-uno-schematic.pdf
[11] https://learn.sparkfun.com/tutorials/how-to-install-and-setup-eagle/all
EAGLE files: arduino-duemilanove-uno-design.zip and Schematic: arduino-uno- schematic.pdf
[12] https://www.gs1.org/standards/epc-rfid
[15] https://github.com/NeloyNSU/RFID-Tag-Reader-using-Arduino-Uno-
[16] http://wireless.intgckts.com/wp-content/uploads/sites/6/2013/11/ind_coupling.png
Anexe
Glosar de termeni
EPC- Electronic Product Code
RFID- Radio Frequency Identification
UHFI – Ultra High Frequency Identification
UHF- Ultra High Frequency
HF- High Frequency
WORM- Write Once Read Many
GUI – Graphical User Interface
HW- Hardware
SW- Software
RF- Radio Frequency
UPC- Universal Product Code
PWM- Pulse Width Modulation
AC- Alternative Current
DC- Direct Current
USB- Universal Serial Bus
ICSP- In-Circuit Serial Programming
FTDI – Future Technology Devices International
EEPROM- Electronically Erasable Programable Read Only Memory
SRAM – Static Random Access Memory
GND – Ground
VIN – Voltage Input
TTL – Transistor Transistor Logic
RX – Receive Serial Data
TX – Transmit Serial Data
MOSI – Master Output Slave Input
MISO – Master Input Slave Output
SCLK – Serial Clock
SPI – Serial Peripheral Interface
LED – Light Emitting Diode
AREF – Analog Reference
SDA – Serial Data
SCL – Serial Clock
I2C – Inter-Integrated Circuit
BYTE – Binary Term
BIT – Binary Digit
PCB – Printed Circuit Board
MIFARE Classic EV1 1K Datasheet MF1S50yyX/V1
Datasheet: MIFARE Classic EV1 1K.pdf Features
Contactless transmission of data and energy supply
Operating distance up to 100 mm depending on antenna geometry and reader configuration
Operating frequency of 13.56 MHz
Data transfer of 106 kbit/s
Data integrity of 16-bit CRC, parity, bit coding, bit counting
Anticollision
Typical ticketing transaction time of< 100 ms (including backup management)
7 Byte UID or 4 Byte NUID
Random ID support (7 Byte UID version)
NXP Originality Check support
EEPROM
1 Kbyte, organized in 16 sectors with 4 blocks of 16 bytes each (one block consists of 16 byte)
User definable access conditions for each memory block
Data retention of 10 years
Write endurance 100.000 cycles
Security
1 kB, organized in 16 sectors of 4 blocks (one block consists of 16 byte)
User definable access conditions for each memory block
Data retention time of 10 years
Write endurance 200000 cycles
Programele utilizate în partea practică a licienței
Primul program ce conține afișarea informației despre card, și informația de tip Hexa înscrisă pe memoria de pe chip-ul cardului RFID.
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD – MFRC522 Card Reader details
Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks…"));
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
}
Al doilea program, cel pentru înscrierea informației de tip ASCII în tip HEXA pe cardul RFID
#include <SPI.h>//include the SPI bus library
#include <MFRC522.h>//include the RFID reader library
#define SS_PIN 10 //slave select pin
#define RST_PIN 5 //reset pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // instatiate a MFRC522 reader object.
MFRC522::MIFARE_Key key;//create a MIFARE_Key struct named 'key', which will hold the card information
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("Scan a MIFARE Classic card");
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;//keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
}
}
int block=#;
byte blockcontent[16] = {"Array"};
byte readbackblock[18];
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {//if PICC_ReadCardSerial returns 1, the "uid" struct (see MFRC522.h lines 238-45)) contains the ID of the read card.
return;
}
Serial.println("card selected")
writeBlock(block, blockcontent);
readBlock(block, readbackblock);//read the block back
Serial.print("read block: ");
for (int j=0 ; j<16 ; j++)//print the block contents
{
Serial.write (readbackblock[j]);//Serial.write() transmits the ASCII numbers as human readable characters to serial monitor
}
Serial.println("");
}
int writeBlock(int blockNumber, byte arrayAddress[])
{
int largestModulo4Number=blockNumber/4*4;
int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector
if (blockNumber > 2 && (blockNumber+1)%4 == 0){Serial.print(blockNumber);Serial.println(" is a trailer block:");return 2;}//block number is a trailer block (modulo 4); quit and send error code 2
Serial.print(blockNumber);
Serial.println(" is a data block:");
byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("PCD_Authenticate() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 3;//return "3" as error message
}
status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);//valueBlockA is the block number, MIFARE_Write(block number (0-15), byte array containing 16 values, number of bytes in block (=16))
if (status != MFRC522::STATUS_OK) {
Serial.print("MIFARE_Write() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 4;//return "4" as error message
}
Serial.println("block was written");
}
int readBlock(int blockNumber, byte arrayAddress[])
{
int largestModulo4Number=blockNumber/4*4;
int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector
byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("PCD_Authenticate() failed (read): ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 3;//return "3" as error message
}
byte buffersize = 18;//we need to define a variable with the read buffer size, since the MIFARE_Read method below needs a pointer to the variable that contains the size…
status = mfrc522.MIFARE_Read(blockNumber, arrayAddress, &buffersize);//&buffersize is a pointer to the buffersize variable; MIFARE_Read requires a pointer instead of just a number
if (status != MFRC522::STATUS_OK) {
Serial.print("MIFARE_read() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 4;//return "4" as error message
}
Serial.println("block was read");
}
Al treilea program, cel pentru afișarea informației de tip HEXA în tip ASCII înscrise pe fiecare card
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println(F("Apropiati cardul…")); //shows in serial that it is ready to read
}
void loop() {
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
byte block;
byte len;
MFRC522::StatusCode status;
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.println(F("**Card Detectat:**"));
mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid));
Serial.print(F("Cardul Persoanei: "));
byte buffer1[18];
block = 1;
len = 18;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
if (status != MFRC522::STATUS_OK) {
Serial.print(F(" Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer1, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F(" Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++)
{
if (buffer1[i] != 32)
{
Serial.write(buffer1[i]);
}
}
Serial.print(" ");
Serial.print(F(" "));
byte buffer2[18];
block = 2;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 2, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("eroare de autentificare: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer2, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("eroare de citire: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++) {
Serial.write( buffer2[i] );
}
Serial.print(F("; "));
byte buffer3[18];
block = 4;
len = 18;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer3, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++)
{
if (buffer1[i] != 32)
{
Serial.write(buffer3[i]);
}
}
Serial.print(F(" "));
byte buffer4[18];
block = 5;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 5, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer4, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++) {
Serial.write( buffer4[i] );
}
Serial.print(F("\n Domiciliul: "));
byte buffer5[18];
block = 6;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 6, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer5, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++) {
Serial.write( buffer5[i] );
}
Serial.print(F(" "));
byte buffer6[18];
block = 8;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 8, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer6, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++) {
Serial.write( buffer6[i] );
}
Serial.print(F(" "));
byte buffer7[18];
block = 9;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 9, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer7, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
for (uint8_t i = 0; i < 16; i++) {
Serial.write( buffer7[i] );
}
Serial.print(" ");
Serial.println(F("\n**End Reading**\n"));
delay(100);
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: RFID (Radio-Frequency Identification) [310463] (ID: 310463)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
