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.
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.
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.
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.
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.
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.
Seguire questi passaggi per collegare la scheda del lettore RFID.
La configurazione della breadboard è mostrata di seguito.
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è.
Questa è la mia breadboard con il relay cablato.
Breadboard con RFID e configurazione del relè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.
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.
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:
Ora hai la prova di base del concetto per aprire la porta con un cenno della tua mano.
/ * 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;
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: