RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul...

9
RFID Kit Task: Citirea UID (Unique Identifier – cod unic de identificare) de pe eticheta RFID (RFID tag) si afisarea pe serial monitor a valorii in format zecimal Echipament necesar: Arduino/ RFID Kit/ fire Cititorul RFID (“radio frequency identification”) este folosit pentru a citi un cod anume, care este trimis de catre un RFID transmitter (numit si “RFID tag” – eticheta RFID) prin unde radio. Fiecare eticheta RFID este caracterizata de un cod unic. Kitul RFID este folositor pentru a realiza proiecte simple, cum ar fi un mecanism de blocare sau ceva similar pentru functionarea caruia, o persoana ar trebui identificata cu ajutorul unei etichete (tag). Etichetele RFID exista sub diferite forme, cum ar fi breloc sau in formatul unui card . In imaginea urmatoare, se poate vedea in partea stanga doua etichete RFID, iar in dreapta un RFID receiver RFID RC522 si cativa pini care trebuie lipiti pe receiver (exista si versiuni in care pinii sunt deja cositoriti pe receiver).

Transcript of RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul...

Page 1: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

RFID Kit

Task: Citirea UID (Unique Identifier – cod unic de identificare) de pe eticheta RFID (RFID tag) si afisarea pe serial monitor a valorii in format zecimal

Echipament necesar: Arduino/ RFID Kit/ fire

Cititorul RFID (“radio frequency identification”) este folosit pentru a citi un cod anume, care este trimis de catre un RFID transmitter (numit si “RFID tag” – eticheta RFID) prin unde radio. Fiecare eticheta RFID este caracterizata de un cod unic. Kitul RFID este folositor pentru a realiza proiecte simple, cum ar fi un mecanism de blocare sau ceva similar pentru functionarea caruia, o persoana ar trebui identificata cu ajutorul unei etichete (tag).

Etichetele RFID exista sub diferite forme, cum ar fi breloc sau in formatul unui card .

In imaginea urmatoare, se poate vedea in partea stanga doua etichete RFID, iar in dreapta un RFID receiver RFID RC522 si cativa pini care trebuie lipiti pe receiver (exista si versiuni in care pinii sunt deja cositoriti pe receiver).

Cum functioneaza? Un receiver RFID contine o mica bobina de cupru care genereaza un camp magnetic. La fel, transitterul RFID (eticheta RFID) contine o bobina de cupru care receptioneaza semnalul electromagnetic si genereaza o tensiune electrica in interiorul transmitterului. Aceasta tensiune este utilizata de un

Page 2: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

mic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller.

De asemenea, este posibil ca eticheta RFID sa fie codificata. Datorita complexitatii, acest caz nu este abordat in acest tutorial. Dar il puteti gasi tratat in tutoriale pe web.

Citirea si procesarea datelor primite de la o eticheta RFID, cu Arduino

Echipament necesar: Arduino UNO sau MEGA, RFID reader, cel putin o eticheta RFID, breadboard, fire, un led, un rezistor de 200 ohm.

Utilizand un microcontroller Arduino, vrem sa citim o eticheta RFID. Daca eticheta este corecta, ledul va lumina pentru 5 secunde.

Facem legaturile dintre RFID reader si Arduino:

In imaginea de mai jos, RFID reader are pinii cositoriti sub 900 (ca in versiunea cu pinii lipiti din “fabrica”). In acest mod este posibil ca reader-ul sa stea in pozitie verticala pe breadboard.

Page 3: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

Programul

Citirea si procesarea datelor de catre un receiver RFID, ar trebui sa necesite, la fel ca si alte task-uri complexe, o multime de linii de cod. De aceea, ne vom folosi de multe librarii existente pe internet. Cea utilizata in acest tutorial poate fi gasita pe https://github.com/miguelbalboa/rfid. Pentru a lucra cu aceasta librarie, trebuie sa o descarcati si sa o salvati in folderul softului Arduino. Doar dati click pe „Download ZIP”, salvati si dezarhivati datele pe hard driver-ul personal. Trebuie sa dezarhivati folderul in software-ul Arduino si sa-l salvati in “libraries”. De obicei, folderul a fost salvat in "C: Programmearduinolibraries…" (daca e salvat in alta parte, trebuie sa-l mutati in folderul „libraries”).Dupa ce datele au fost dezarhivate si salvate corect, ar trebui sa apara o data cu numele „rfid-master” in folderul „libraries”. Acum TREBUIE sa stergeti cratima din denumire. Adica redenumiti datele „rfidmaster”. Daca ati urmat acest pas corect, libraria este gata pentru a fi folosita de software-ul Arduino.Sketch 1Intainte de toate, vom citi UID ((“Unique Identification Number”). Este o semnatura proprie fiecarei etichete RFID. Vom utiliza sketch-ul de mai jos (Atentie, sketch-ul functioneaza doar daca libraria a fost adaugata software-ului in modul explicat anterior). Acest program este destinat doar microcontrolerului UNO R3. Daca vreti sa utilizati MEGA 2560 sau alte microcontrolere, trebuie sa ajustati pinii.

Page 4: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

#include <SPI.h> //Include SPI library#include <MFRC522.h> //Include RFID library#define SS_PIN 10 //SDA pe Pin 10 (diferit pe MEGA)#define RST_PIN 9 //RST pe Pin 9 (diferit pe MEGA)

MFRC522 mfrc522(SS_PIN, RST_PIN); //Numele receiverului RFID void setup() //Incepe setup{Serial.begin(9600); //Incepe serial connectionSPI.begin(); //se seteaza conectia SPI mfrc522.PCD_Init(); //Se initializeaza RFID receiver}void loop() //Loop part incepe aici{if (! mfrc522.PICC_IsNewCardPresent()) //Daca un card este in apropiere… {return; //mergi mai departe..}if (! mfrc522.PICC_ReadCardSerial()) //Daca o eticheta RFID a fost gasita …{return; //mergi mai departe...}Serial.print("The ID of the RFID-TAG is:"); // Afiseaza pe serial monitor “The ID of the RFID-TAG is:"for (byte i = 0; i < mfrc522.uid.size; i++){Serial.print(mfrc522.uid.uidByte[i], HEX); //Acum UID, care consta in patru blocuri separate, este citit si //trimis catre serial monitor, unul cate unul. Terminologia „HEX” semnifica faptul ca cele patru blocuri ale UID sunt //transmise sub forma hexazecimala (incluzand litere)Serial.print(" "); //Comanda " Serial.print ( " " ); " ne asigura ca exista un spatiu intre blocurile afisate}Serial.println(); //Aceasta linie de cod creeaza o linie transversala pe serial monitor}

Daca totul merge bine, pe serial monitor ar trebui sa urmatoarea imagine (exceptand UID):

Page 5: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

Nu este foarte usor de lucrat cu aceste numere hexazecimale unul dupa altul. De aceea, vom schimba linia Serial.print ( mfrc522.uid.uidByte [i] , HEX ) ; " in " Serial.print ( mfrc522.uid.uidByte[i] , DEC) ; ". Astfel vom obtine fiecare parte din UID transformata in numar zecimal.

Sketch 2

Acum codul UID este afisat sub forma de numar zecimal, dar este inca impartit in patru blocuri. Vom schimba codul utilizand un algoritm matematic, care sa aiba ca efect afisarea UID sub forma unui singur numar zecimal.

De ce facem asta? Daca vrem sa utilizam rezultatul obtinut intr-un alt program, de exemplu pentru a aprinde un led sau a pune in miscare un stepper, care sa depinda de eticheta citita, este mai usor sa folosim intr-o comanda IF un numar continuu. Exemplu:

“Daca eticheta RFID este 1031720, un LED sa se aprinda pentru 5 secunde”.Comanda ar fi mai complicata daca ar arata astfel: “Daca primul bloc este 195 si al doilea bloc este 765 si al treilea bloc este 770 si al patrulea bloc este 233, un LED sa se aprinda pentru 5 secunde”.

Un dezavantaj al modului zecimal ar putea fi faptul ca sketch-ul poate fi un pic nesigur deoarece nu toate numerele din cele patru blocuri (maxim 12 numere) pot fi transpuse intr-un singur numar. Daca vreti ca totul sa fie complet sigur, ar trebui sa testati fiecare bloc in parte.

#include <SPI.h>#include <MFRC522.h>#define SS_PIN 10

Page 6: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

#define RST_PIN 9MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup(){Serial.begin(9600);SPI.begin();mfrc522.PCD_Init();}void loop(){if ( ! mfrc522.PICC_IsNewCardPresent()){return;}if ( ! mfrc522.PICC_ReadCardSerial()){return;}long code=0; //Utilizam “code” ca variabila in care sa salvam UID ca un numar continuu mai târziu. //Folosim „long” in loc de „int” pentru a putea salva numere mai marifor (byte i = 0; i < mfrc522.uid.size; i++){code=((code+mfrc522.uid.uidByte[i])*10); //Acum sunt citite cele patru blocuri si sunt multiplicate cu //factorul 10 la fiecare trecere (am putea utiliza si factorul 1000, dar numarul ar deveni prea mare)}Serial.print("The Card number is:"); //In final, numarul codului (nu-i mai poti spune UID) este afisat pe //serial monitorSerial.println(code);}

Excelent, suntem acum in masura sa obtinem pe monitor UID de la o eticheta RFID. In acest caz, numarul este 1031720.

Si acum? Vrem ca un led sa se aprinda pentru 5 secunde daca eticheta RFID tinuta in fata cititorului RFID este identificata (si coincide cu o valoare prestabilita).

Sketch 3

#include <SPI.h>#include <MFRC522.h>#define SS_PIN 10#define RST_PIN 9MFRC522 mfrc522(SS_PIN, RST_PIN);void setup(){Serial.begin(9600);SPI.begin();mfrc522.PCD_Init();pinMode (2, OUTPUT); //Pin 2 este definit ca output (aici vom conecta ledul) }void loop(){if ( ! mfrc522.PICC_IsNewCardPresent())

Page 7: RFID Kit - Web viewmic cip electronic pentru a emite un cod electric prin semnal radio. Receiverul primeste acest cod , care este procesat de microcontroller. De asemenea, este posibil

{return;}if ( ! mfrc522.PICC_ReadCardSerial()){return;}long code=0;for (byte i = 0; i < mfrc522.uid.size; i++){code=((code+mfrc522.uid.uidByte[i])*10);}Serial.print("The Card number is:");Serial.println(code);//Aici incepe extensia sketch-ului if (code==1031720) //Daca numarul codului este 1031720.. { //Se deschide urmatoarea parte a programuluidigitalWrite (2, HIGH); //...ledul de pe pinul 2 va lumina… delay (5000); //..pentru 5 secunde…digitalWrite (2, LOW); // …si se va stinge} //Sfarsitul programului extensie} //Sfarsitul sketch-ului