Cos'è un RFID?
Citando
Wikipedia diciamo che si tratta di un Radio Frequency Identification; per capirlo facilmente diciamo che sto parlando del vostro badge dell'ufficio, del tesserino dell'abbonamento ai mezzi pubblici, e di qualunque tessera funzioni solo "appoggiandola" su di un lettore... ma sto anche parlando dei chip dei cani, degli adesivi antitaccheggio etc.
Ci concentriamo però solo sulla prima tipologia in questo post.
Ho comprato un lettore e scrittore di Tag RFID su ebay, questo qui sotto
Da questo
venditore (sperando funzioni il link) econimoco e preciso.
Da qui in poi è cominciata la parte difficile, ovvero trovare il software adatto, le librerie giuste e far funzionare poi tutto.
Una cosa alla volta però, prima di tutto il software, pubblico qui sotto quello che ho trovato io per fare delle prove, ho già apportato alcune modifiche per esempio nell'uso dei collegamenti SS ed RST.
Ho inserito poi il codice del Tag tipo "portachiavi", quello blu nella foto, come codice
corretto definendo tutti gli altri come
Tag errati .
I collegamenti li trovate anche nello scketch, ve li riassumo qui sotto.
Premesso che i piedi siano come in foto qui sopra dall'alto in basso
RFID RC522 | ARDUINO
SDA 10
SCK 13
MOSI 11
MISO 12
IRQ non collegato
GND GND
RST 9
3.3V 3.3V
/*
* MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* The library file MFRC522.h has a wealth of useful info. Please read it.
* The functions are documented in MFRC522.cpp.
*
* Based on code Dr.Leong ( WWW.B2CQSHOP.COM )
* Created by Nicola Pison (webingenerale.com), Jen 2014.
* Released into the public domain.
*
* Sample program showing how to read data from a PICC using a MFRC522 reader on the Arduino SPI interface.
*----------------------------------------------------------------------------- empty_skull
* add pin configuration for arduino mega
* http://www.webingenerale.com
----------------------------------------------------------------------------- Nicola Pison
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 7 5 RST
* SPI SS 6 53 SDA
* SPI MOSI 11 52 MOSI
* SPI MISO 12 51 MISO
* SPI SCK 13 50 SCK
*
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include
#include
/*modifico i pin dei ss e rst*/
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
long previousMillis = 0;
long interval = 10;
int rele = 5; //pin relè
String uidRFID[] = {"944e26eb"/*,"codeRFID_B","codeRFID_C","codeRFID_D"*/};
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
pinMode(rele, OUTPUT);
Serial.println("Avvicina il tag RFID");
Serial.println("(numero rfid registrati) "+String(sizeof(uidRFID)/sizeof(String)));
Serial.println("In attesa di lettura...");
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
String uid_s = "";
if (!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) {
for (byte i = 0; i < mfrc522.uid.size; i++) {
String uid_a = String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
String uid_b = String(mfrc522.uid.uidByte[i], HEX);
uid_s = uid_s+uid_a+uid_b;
}
}
Serial.print("RFID UID rivelato --> ");
Serial.println(uid_s);
Serial.println("");
boolean controllo = false;
for (int i = 0; i < sizeof(uidRFID)/sizeof(String); i++){
if(uidRFID[i] == uid_s){
Serial.println("tag portachiavi blu");
openDoor();
controllo = true;
break;
}
}
if(!controllo){
Serial.println("rilevato tag errato");
digitalWrite(rele, HIGH);
delay(100);
digitalWrite(rele, LOW);
delay(100);
digitalWrite(rele, HIGH);
delay(100);
digitalWrite(rele, LOW);
delay(100);
digitalWrite(rele, HIGH);
delay(100);
digitalWrite(rele, LOW);
delay(1000);
}
Serial.println();
Serial.println("In attesa di lettura...");
}
}
void openDoor(){
digitalWrite(rele, HIGH);
Serial.println("Rele' ON");
delay(500);
digitalWrite(rele, LOW);
Serial.println("Rele' OFF");
}
Qui trovate le librerie, attenzione ai nomi, cambiateli sia nella cartella .zip che nel file contenuto da rfid-master (ché ad arduino non piace) in Mfrc522, attenzione alle maiuscole e minuscole.
Il risultato è questo
Arduino, attualmente collegato al computer, mi comunica tramite il comando
Monitor Seriale (CTRL+SHIFT+M) quali siano i Tag posti in prossimità del lettore mostrando il loro numero di ID appunto. Questo numero posso poi confrontarlo con una serie di altri che ho inserito nel software, se corrisponde allora compie un'azione, in questo caso attiva un relè o più semplicemente fa emettere un beep lungo (tre brevi se il tag è errato).
Questo post è una porcheria, ma intanto ho sdoganato l'argomento "Arduino" sul mio blog, troppe cose avrei da scriverci su... stiamo a vedere