Come aprire la porta del garage con RFID

Radio Frequency Identification, o RFID, è una tecnologia eccitante che ha guadagnato popolarità negli ultimi anni. Crea la possibilità di taggare qualcosa con un chip passivo molto piccolo che consente quindi la lettura a distanza delle informazioni su quel chip. I tag RFID sono comunemente usati per le tessere di sicurezza delle porte, l'identificazione degli animali smarriti e più recentemente vicino alla comunicazione sul campo negli smartphone.  

In questo tutorial spiegherò alcune nozioni di base su come funziona la tecnologia RFID, descriviamo alcuni tipi diversi di RFID e mostriamo come è possibile costruire un apriporta per garage RFID.


Le basi dell'RFID

L'RFID è una tecnologia davvero interessante che sfrutta l'energia del segnale del lettore RFID per alimentare l'etichetta o il transponder. Questo restituisce quindi un segnale che contiene il contenuto del chip di memoria del tag.


Il segnale di interrogazione alimenta il chip RFID

C'è un certo numero di tipi di RFID. Alcuni tag possono contenere una piccola quantità di dati che possono essere letti in seguito. Altri sono così sofisticati da richiedere al lettore di segnalare una chiave di crittografia prima che il tag possa decodificarlo e restituirne il contenuto. La maggior parte dei tag, tuttavia, contiene semplicemente numeri ID univoci permanenti. Ulteriori informazioni su RFID sono disponibili su Wikipedia.

I formati e le frequenze dei chip RFID variano notevolmente. C'è una zuppa alfabetica di tipi. Molti smartphone leggono i formati NFC e MIFARE.  

Per questo progetto, tuttavia, utilizzerò il tipo di chip EMK00 125K Wiegand. Questo tipo di RFID utilizza lettori e tag economici che sono la ragione principale di questo chip nel mio kit. Finché hai lettori e tag compatibili, tuttavia, il tipo di RFID non sarà rilevante per questo progetto.


Il progetto RFID

In questo progetto userò un tag RFID e un Arduino per aprire una porta del garage quando viene rilevato un tag autorizzato. L'uso di un componente RFID di basso livello è un compito abbastanza complicato, quindi utilizziamo una scheda di breakout che esegue la lettura di basso livello e trasmette il codice del tag tramite pin seriali. Ecco come funziona la maggior parte delle schede di sblocco RFID. Questo tutorial usa una di queste breakout board.

Per questo tutorial creerò il design per l'apriporta del garage e creerò un proof of concept funzionale.


Componenti del progetto

  • Arduino (praticamente qualsiasi modello 5V dovrebbe funzionare, ho usato uno Uno)
  • Scheda lettore RFID con antenna
  • Tag RFID (ho trovato che i portachiavi EM4100 125K Wiegand sono economici e facili da trovare su ebay)
  • breadboard
  • Un LED standard
  • Resistenza 220 Ohm (Rosso Rosso Marrone)
  • Relè (Aleph SD1A05AWJ)
  • Diodo (1N4148)
  • Jumper Wires

Come funziona

Il processo è abbastanza semplice.

Innanzitutto, la scheda del lettore RFID legge il tag e trasmette il codice all'Arduino. L'Arduino legge quindi il codice dalla connessione seriale e lo confronta con un elenco di codici RFID autorizzati. Se il tag è nell'elenco autorizzato, Arduino tirerà un pin alto per fornire 5 V per chiudere un relè. Quando il relè si chiude, collega i terminali dei contatti del segnale della porta del garage. La porta del garage si apre quindi.


La costruzione

Passaggio 1. Impostazione del lettore RFID

Utilizzando la scheda tecnica o le istruzioni sul lettore RFID, collegare i pin di alimentazione, massa, seriale e antenna. Di seguito è riportato il diagramma dei pin del lettore che ho. Utilizziamo i pin 2 e 3 di Arduino per la comunicazione seriale con la scheda RFID, in modo che possiamo lasciare i pin 0 e 1 per l'uscita della console.


Il foglio dati mostrerà i pin out

Seguire questi passaggi per collegare la scheda del lettore RFID.

  1. Collegare il cavo al pin di messa a terra del lettore
  2. Collegare il cavo di alimentazione al pin di alimentazione del lettore
  3. Collegare il pin Arduino 2 al pin TX della scheda RFID
  4. Collegare il pin 3 di Arduino al pin RX
  5. Collegare l'antenna al lettore
  6. Collegare l'anodo LED al pin pwr out dell'indicatore delle schede.
  7. Collegare il perno catodico del LED a terra tramite il resistore

La configurazione della breadboard è mostrata di seguito.


L'Arduino collegato alla scheda del lettore RFID

Passaggio 2. Impostazione del relè

Aggiungi il relè alla breadboard. I due pin interni eseguono l'elettromagnete che chiuderà il relè. È possibile vedere nello schema seguente come la corrente che attraversa i pin da 3 a 7 influirà sul relè.


Relay schematico
  1. Esegui il pin 4 da Arduino al pin 3 sul relè. Se tirato in alto, questo pin fornirà abbastanza corrente per chiudere il relè.
  2. Inserire il pin 7 sul relè a terra.
  3. Aggiungere il diodo tra i pin 3 e 7 con la striscia di vernice verso il pin 3 del relè.
Mancia: Quando si utilizza un relè o qualsiasi cosa che utilizza un campo elettromagnetico, utilizzare sempre un diodo "flyback" per proteggere il sistema dal picco di potenza quando il campo magnetico collassa.

Questa è la mia breadboard con il relay cablato.

Breadboard con RFID e configurazione del relè

Passaggio 3. Programmare Arduino

  1. Copia il codice dalla fine di questo tutorial. Il codice è completamente commentato per aiutarti a capire cosa sta succedendo in ogni fase. Vicino alla parte superiore del codice è possibile vedere dove si trova un luogo per modificare l'elenco dei valori dei tag RFID. Eseguiremo il codice una sola volta e sventeremo il tag RFID in modo da poter copiare e incollare l'ID dei tag autorizzati nel codice finale.
  2. Clic caricare nell'IDE di Arduino
  3. Aprire il monitor seriale dell'IDE di Arduino premendo CTRL SHIFT M o Selezione del menu Strumenti> Monitor seriale.
Mancia: Assicurati che il baud rate del monitor seriale corrisponda a quello che abbiamo impostato nel impostare() funzione. In questo esempio: 38400.

Dovresti vedere qualcosa di simile a questo:

RFID GDO V0.1
Tag leggi: 3D00CFBB80
Checksum: C9 - superato.
3D00CFBB80

Tag non valido Va via.

Copia e incolla il tuo ID (3D00CFBB80 in questo esempio) nel codice nell'elenco GoodTags. Nota, un codice diverso può essere su una nuova riga, purché sia ​​circondato da virgolette e abbia una virgola dopo di esso. Un singolo elenco di codici può essere simile a questo:

char * goodTags [] =
"3D00CFBB80",
;

Fai clic su carica nell'IDE di Arduino, quindi apri il monitor seriale dell'IDE di Arduino premendo CTRL SHIFT M o Selezione del menu Strumenti> Monitor seriale.

Ora quando esegui il codice vedrai qualcosa di simile a questo:

RFID GDO V0.1
Tag leggi: 3D00CFBB80
Checksum: C9 - superato.
3D00CFBB80

Porta di apertura!

Di seguito una mia foto che sta testando il tag RFID con il relè. Il multimetro è agganciato ai pin 1 e 9 del relè in modo da rilevare la continuità quando il relè si chiude.


Test del loop RFID

Con un multimetro collegato, puoi sentire il segnale acustico del multimetro per indicare continuità e quindi un debole tint e il relè si blocca di nuovo all'apertura.

Passaggio 4. Apertura della porta del garage

La maggior parte degli apriporta per garage funziona in modo molto semplice aprendosi quando hanno un contatto chiuso. Quando si preme il pulsante sul muro si sta chiudendo il contatto. Sul mio apriporta del garage, ho dei terminali in cui sono collegati i fili del pulsante. Puoi vedere i terminali evidenziati qui:


Terminali apriporta per garage
  1. Agganciare i pin 1 e 9 del relè sulla breadboard ai terminali sull'apriporta della porta del garage
  2. Fai ondeggiare il tuo tag RFID vicino all'antenna
  3. Guarda la porta aperta

Ora hai la prova di base del concetto per aprire la porta con un cenno della tua mano.

Passaggio 5. Rendere permanente

  1. Montare l'antenna da qualche parte in grado di leggere il tag attraverso la porta o il muro. L'RFID può passare attraverso oggetti solidi in modo che un'antenna possa essere nascosta dietro la parete del garage a seconda del materiale. Potrebbero essere necessari alcuni tentativi per trovare un posto dove leggere il tag.
  2. Trasferire il circuito su una perfboard e saldare una soluzione permanente
  3. Metti il ​​progetto in una scatola e monta nel tuo garage.

Codice sorgente per questo progetto

/ * Codice di esempio per l'apertura del garage RFID di Ben Miller @VMfoo Funzione ReadKey ispirata e presa in prestito in parte dall'esempio del campo da gioco arduino: http://playground.arduino.cc/Code/ID12 * / // include la libreria SoftwareSerial in modo che tu possa usa le sue funzioni: #include // lasciando le porte seriali hardware per il debug #define rxPin 2 // pin per ricevere dati dal lettore RFID #define txPin 3 // pin di trasmissione per l'inizializzazione softserial #define doorPin 4 // pin per trigger relay / / configurare una nuova porta seriale NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // per i dati seriali in entrata int incomingByte = 0; // array di caratteri per il valore del tag RFID tag tagValue [10]; // Quali valori dei tag sono char autorizzati * goodTags [] = "3D00CFBB80", // "######", // aggiungi un altro tag sostituendo i # con il tuo codice e decommentando questa riga; // Calcola il numero di tag nell'array sopra int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // definisce le modalità pin per il relè di apertura pinMode (doorPin, OUTPUT); // imposta la velocità dati per la porta SoftwareSerial RFIDPort.begin (9600); Serial.begin (38400); // velocità di monitoraggio seriale Serial.println ("RFID GDO V0.1"); // hello world void loop () // loop e read if (RFIDPort.available ()) if (readKey ()) // verifica il valore del tag if (goodTag ()) // se questo è permesso openDoor ();  else Serial.println ("Tag non valido. Vai via.");  int goodTag () for (int i = 0; i < tagCount; i++)  //walk through the tag list if(strcmp(tagValue, goodTags[i]) == 0)  return 1;   return 0;  void openDoor() Serial.println("Opening Door!"); digitalWrite(doorPin, HIGH); delay(500); // half a second is plenty of time to let trigger the contact digitalWrite(doorPin, LOW); //to prevent "bounce" or secondary reads if the tag is still close to the reader //we delay 3 seconds delay(3000);  int readKey() byte i = 0; byte val = 0; byte checksum = 0; byte bytesRead = 0; byte tempByte = 0; byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum // char tagValue[10]; this is defined globaly to simplify code if((val = RFIDPort.read()) == 2)  // Check for header bytesRead = 0; while (bytesRead < 12)  // Read 10 digit code + 2 digit checksum if (RFIDPort.available())  val = RFIDPort.read(); // Append the first 10 bytes (0 to 9) to the raw tag value // Check if this is a header or stop byte before the 10 digit reading is complete if (bytesRead < 10)  tagValue[bytesRead] = val;  if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02))  break; // Stop reading  // Ascii/Hex conversion: if ((val >= '0') && (val <= '9'))  val = val - '0';  else if ((val >= 'A') && (val <= 'F'))  val = 10 + val - 'A';  // Every two hex-digits, add a byte to the code: if (bytesRead & 1 == 1)  // Make space for this hex-digit by shifting the previous digit 4 bits to the left tagBytes[bytesRead >> 1] = (val | (tempByte << 4)); if (bytesRead >> 1! = 5) // Se siamo al byte di checksum, checksum ^ = tagBytes [bytesRead >> 1]; // Calcola il checksum ... (XOR);  else tempByte = val; // Memorizza prima la prima cifra esadecimale; bytesRead ++; // Pronto a leggere la prossima cifra // Invia il risultato all'host collegato via USB if (bytesRead == 12) // 12 cifre letto è completo tagValue [10] = '\ 0'; // Null-termina la stringa Serial.print ("Tag read:"); per (i = 0; i<5; i++)  // Add a leading 0 to pad out values below 16 if (tagBytes[i] < 16)  Serial.print("0");  Serial.print(tagBytes[i], HEX);  Serial.println(); Serial.print("Checksum: "); Serial.print(tagBytes[5], HEX); Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error."); Serial.println(tagValue); Serial.println(); return 1; //return value to indicate that we read something   bytesRead=0; return 0; 

Sommario

In questo tutorial ho delineato le basi della tecnologia RFID e come sfruttarla per i propri progetti. Mentre i componenti di basso livello che leggono l'RFID possono essere difficili da usare per gli hobbisti, le schede di breakout RFID consentono di utilizzare l'RFID molto facilmente nei progetti con Arduino o persino un Raspberry Pi tramite una porta seriale. Una volta che un ID viene letto da un tag, è semplice agire sulle informazioni. In questo esempio abbiamo attivato un relè per aprire una porta del garage.

Inoltre:

  • Ho esaminato le differenze nei tipi di tecnologia RFID
  • Ho esplorato il concetto di come funziona la tecnologia RFID
  • Hai seguito un esempio di collegamento di una scheda di lettore RFID a un Arduino
  • Leggi e stampa l'identificativo RFID da un tag ID
  • Aggiunto un relè al circuito per chiudere un contatto quando è stato letto il tag giusto
  • Collegato il relè a un apriporta per garage per aggiungere il controllo dell'accesso basato su RFID