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.
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
Il codice:
/*
* 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 <SPI.h>
#include <MFRC522.h>
/*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");
}
tramite il Monitor Seriale (CTRL+SHIFT+M) riconosce 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).
La libreria potete scaricarla da quì
Se avete dei problemi a far funzionare il circuito commentate o scrivete sul forum.