Apriporta con Arduino ed RFID RC522 a 13,56 MHz

Semplice shield per Arduino che consente di comandare un rele' che puo' essere per esempio collegato alla serratura elettrica di un portone.

 

Il comando si attiva solo se si avvicina al dispositivo RC522 un tag RFID con un codice valido.

 

Di tag rfid se ne trovano di diversi tipi e frequenze di lavoro ; qui ho utilizzato un tag a bottone ed uno a scheda forniti con il lettore/scrittore RC522 acquistato anch'esso per pochi euro su internet.

 

Il funzionamento e' semplicissimo : si carica il programma su Arduino e si avvicina un tag RFID preprogrammato ; a questo punto sul monitor seriale viene visualizzato il codice di quel tag con ovviamente l'indicazione che il codice non e' tra quelli riconosciuti. Adesso si deve andare nel programma alla riga :

 

String uidRFID[] = {"b4335e1a","35b5c1e5","codeRFID_C","codeRFID_D"}; // Stringa che contiene le chiavi dei tag che saranno autorizzati e digitare il codice che e' stato appena letto , in una delle posizioni della stringa sostituendo il valore "codeRFID_*" con il codice rilevato.

 

In questa stringa ho indicato nelle posizioni 1 e 2  i codici di due dei miei tag ed ho lasciato altre due posizioni libere disponibili.

 

Basta adesso sostituire i miei codici con quelli dei vostri tag e vedrete che il sistema li riconoscera' appena si avvicineranno al lettore.

 

 

 

 

 

 

 

 

Schermata del monitor seriale dove sono riportate delle indicazioni varie tra le quali il codice del RFID UID rilevato.

Nel momento in cui al lettore si avvicina un TAG con un codice corrispondente ad uno di quelli registrati nella stringa appena sopra indicata , si attivera' il rele' per circa 1/2 secondo con il quale sara' possibile comandare qualsiasi tipo di carico.

Vista d'insieme dell'Arduino , del modulo RC522 , dei due tag (bottone e scheda) e del modulo rele'. Le connessioni dei pin tra i vari moduli sono descritte nel listato.

 

/*
 
 Shield utilizzato per effettuare la lettura di TAG RFID e  , se il codice
 dell'RFID viene riconosciuto ,  consentire l'attivazione di un rele'
 collegato al pin 5.
 
 Il modulo RC522 va connesso all'ARDUINO come segue :

 * Segnal     Pin            Pin              
 *                  Arduino Uno    MFRC522 board
 * ---------------------------------------
 * Reset          7              RST
 * SPI SS        6              SDA
 * SPI MOSI   11             MOSI
 * SPI MISO   12             MISO
 * SPI SCK    13             SCK
 
 Tutto quello che non e' commentato e' stato preso cosi' come si trova
 da esempi presenti in rete e realizzati da altri utenti.
 
 */
 
#include <SPI.h>
#include <MFRC522.h> // Libreria per RFID RC522
 
MFRC522 mfrc522(6, 7);   // Dichiaro i pin SS ed RST (io li ho collegati al pin 6 e 7) mfrc522 (SS_PIN, RST_PIN)
 
long previousMillis = 0;
long interval = 10;
 
int rele = 5;  // Dichiaro su quale pin e' collegato il rele'
 
String uidRFID[] = {"b4335e1a","35b5c1e5","codeRFID_C","codeRFID_D"}; // Stringa che contiene le chiavi dei tag che saranno autorizzati
 
void setup() {
    
    Serial.begin(9600); // Inizializzazione della porta seriale per utilizzo del monitor
    SPI.begin();        // Inizializzazione del bus SPI
    mfrc522.PCD_Init(); // Inizializzazione del lettore MFRC522
    pinMode(rele, OUTPUT); // Definisco che il pin dove e' collegato il rele' sara' di OUTPUT
    Serial.println("Ingresso Aziendale");
    Serial.println("RFID registrati nr --> "+String(sizeof(uidRFID)/sizeof(String)));
    Serial.println("In attesa di lettura...");
    digitalWrite(rele, HIGH); // Inizializzo il rele' ad OFF (sembra strano rispetto il comando impartito ma deve essere settato cosi')

}
 
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("Accesso consentito");
            openDoor();
            controllo = true;
            break;
            
      }
    }
     
   if(!controllo){
   Serial.println("Accesso vietato");
   delay(1000);
   }
   
   Serial.println();
   Serial.println("In attesa di lettura...");
   
  }
}
 
void openDoor(){
 
  digitalWrite(rele, LOW);
  Serial.println("Rele' ON");
  delay(500);
  digitalWrite(rele, HIGH);
  Serial.println("Rele' OFF");
  
}

Aggiornamento del 15 Gennaio 2016......

 

per come fattomi notare da Mauro , effettivamente non si riesce bene a comprendere quali siano le connessioni da effettuare tra il modulo rfid ed arduino.

 

Correggo quindi questo breve articolo con le connessioni tra i due moduli che sono :

 

il pin SDA   va ad arduino pin 6
il pin SCK   va ad arduino pin 13
il pin MOSI va ad aurduino pin 11
il pin INI (che poi sarebbe il MISO) va ad arduino pin 12
il pin RST va ad arduino pin 7
ovviamente poi il 3,3 volt sul relativo pin 3,3 di arduino e la massa su gnd

 

Il rele' va al pin 5 di arduino e funzionera'  tutto alla perfezione.

 

Allego pure una foto della schedina rfid che si ingrandisce cliccandoci sopra  :

 

 

Anche qui il listato e' completamente modificabile ed adattabile alle proprie esigenze.

 

Tutte le parti del listato non commentate , sono state prese da altri listati rintracciati su internet e realizzati da altri utilizzatori di Arduino.

 

Buon divertimento.