Arduino: Sistema RFID / NFC

In telecomunicazioni ed elettronica con l’acronimo RFID (dall’inglese Radio-Frequency IDentification, in italiano identificazione a radio frequenza) si intende una tecnologia per l’identificazione e/o memorizzazione automatica di informazioni inerenti oggetti, animali o persone (automatic identifying and data capture, AIDC) basata sulla capacità di memorizzazione di dati da parte di particolari etichette elettroniche, chiamate tag (o anchetransponder), e sulla capacità di queste di rispondere all’interrogazione a distanza da parte di appositi apparati fissi o portatili, chiamati reader (o anche interrogator). Questa identificazione avviene mediante radiofrequenza, grazie alla quale un reader è in grado di comunicare e/o aggiornare le informazioni contenute nei tag che sta interrogando; infatti, nonostante il suo nome, un reader (ovvero: “lettore“) non è solo in grado di leggere ma anche di scrivere informazioni.

In un certo senso, i dispositivi RFID possono essere quindi assimilabili a sistemi di lettura e/o scrittura senza fili con svariate applicazioni. In questi ultimi anni si sta affermando man mano anche lo standard NFC (Near Field Communication, 13,56 MHz e fino a 10 cm, ma con velocità di trasmissione dati fino a 424 kBit/s) che estende gli standard per consentire lo scambio di informazioni anche tra lettori. (Wikipedia)

Nel progetto di oggi vedremo come realizzare un semplice progetto che ci permette di accendere un LED oppure far scattare un Relay quando la nostra tessera magnetica striscerà sul sensore.

Il materiale di cui abbiamo bisogno è:

  • Arduino Uno
  • Sensore RFID RC522
  • Due LED
  • Tag RFID/NFC
  • Fili per i collegamenti
  • Breadboard

Lo schema da seguire per i collegamenti è il seguente:

Sensore RFID:

MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
NSS/SS/SDA: Pin 10
RST: Pin 9

 

LED Verde: Pin 7

LED Rosso: Pin 6

 

Una volta fatti i collegamenti caricate il seguente sketch sulla vostra scheda:

[c]

#include <RFID.h>
// MOSI: Pin 11 / ICSP-4
// MISO: Pin 12 / ICSP-1
// SCK: Pin 13 / ISCP-3
// NSS/SS/SDA: Pin 10
// RST: Pin 9
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int led = 7;
int led1 = 6;
int serNum[5];
int cards[][5] =
{
{35,201,72,140,46} //CODICE ATTIVAZIONE RFID
};
bool access = false;
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
digitalWrite(led, LOW);
}
void loop(){
if(rfid.isCard()){
if(rfid.readCardSerial()){
Serial.print(rfid.serNum[0]);
Serial.print(" ");
Serial.print(rfid.serNum[1]);
Serial.print(" ");
Serial.print(rfid.serNum[2]);
Serial.print(" ");
Serial.print(rfid.serNum[3]);
Serial.print(" ");
Serial.print(rfid.serNum[4]);
Serial.println("");
for(int x = 0; x < sizeof(cards); x++){
for(int i = 0; i < sizeof(rfid.serNum); i++ ){
if(rfid.serNum[i] != cards[x][i]) {
access = false;
break;
} else {
access = true;
}
}
if(access) break;
}
}
if(access){
Serial.println("Benvenuto!");
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
} else {
Serial.println("Accesso non permesso!");
digitalWrite(led1, HIGH);
delay(50);
digitalWrite(led1, LOW);
delay(50);
digitalWrite(led1, HIGH);
delay(50);
digitalWrite(led1, LOW);
delay(50);
}
}
rfid.halt();
}

[/c]

[embedplusvideo height=”400″ width=”600″ editlink=”http://bit.ly/1N5MfF4″ standard=”http://www.youtube.com/v/5rwwhzvA7TA?fs=1″ vars=”ytid=5rwwhzvA7TA&width=600&height=400&start=&stop=&rs=w&hd=0&autoplay=0&react=1&chapters=&notes=” id=”ep1549″ /]

 

Ecco alcune foto del progetto:

3ea75bfc-57c3-45ab-94e1-48403ab91a95 94a0da44-bb64-4dbc-8f6e-42f1913eedff 127d87ce-86d7-4bc9-a9ad-8d34a072b9d3 986f0e95-715f-4e3f-948f-688e159eeaac ccb044ac-7dab-4f61-93c4-24d5e0d8c065