Identificarea prin radiofrecvență sau RFID este o tehnologie interesantă care a câștigat popularitate în ultimii ani. Creează capacitatea de a eticheta ceva cu un cip pasiv foarte mic, care permite apoi citirea la distanță a informațiilor despre acel cip. Etichetele RFID sunt utilizate în mod obișnuit pentru cardurile de siguranță ale ușii de securitate, identificarea pentru animalele de companie pierdute și, mai recent, aproape de comunicarea pe teren în smartphone-uri.
În acest tutorial vă voi explica câteva aspecte de bază despre modul în care funcționează RFID-ul, descriu câteva tipuri diferite de RFID și arată cum ați putea construi un sistem de deschidere a ușii de garaj RFID.
RFID este o tehnologie foarte cool care utilizează energia semnalului cititorului RFID pentru a alimenta eticheta sau transponderul. Aceasta returnează apoi un semnal care conține conținutul cipului de memorie al etichetei.
Există un număr de tipuri RFID. Unele etichete pot avea o cantitate mică de date scrise pentru ei, care pot fi citite mai târziu. Altele sunt atât de sofisticate încât să ceară cititorului să semnaleze o cheie de criptare înainte ca eticheta să poată decoda și să returneze conținutul. Cele mai multe etichete conțin pur și simplu numere permanente de identificare permanente. Informații suplimentare despre RFID sunt disponibile pe Wikipedia.
Formatele și frecvențele cipurilor RFID variază considerabil. Există o supă de tipuri întregi de alfabet. Multe telefoane inteligente citesc formatele NFC și MIFARE.
Pentru acest proiect, totuși, voi folosi modelul EM4100 125K Wiegand. Acest tip de RFID utilizează cititori și etichete ieftine, care este motivul principal al acestui cip în kit-ul meu. Atâta timp cât aveți cititoare și etichete compatibile, cu toate acestea, tipul de RFID nu va contează pentru acest proiect.
În acest proiect voi folosi o etichetă RFID și un Arduino pentru a deschide o ușă de garaj atunci când este detectată o etichetă autorizată. Folosirea unei componente RFID de nivel scăzut este o sarcină destul de complicată, așa că folosim o placă breakout care face citirea la nivel scăzut și transmite codul de etichetă prin pini de serie. Acesta este modul în care funcționează majoritatea plăcilor de detecție RFID. Acest tutorial folosește o astfel de tablă de breakout.
Pentru acest tutorial, voi crea un design pentru deschizătorul de uși de garaj și voi crea o dovadă funcțională a conceptului.
Procesul este destul de simplu.
În primul rând, placa de cititoare RFID citește eticheta și transmite codul la Arduino. Arduino citește apoi codul de la conexiunea serială și o compară cu o listă de coduri RFID autorizate. Dacă eticheta se află pe lista autorizată, Arduino va trage un pin înalt pentru a furniza 5V pentru a închide un releu. Când releul se închide, acesta conectează bornele contactelor de semnalizare ale ușii de garaj. Ușa de garaj se deschide apoi.
Folosind foaia de date sau instrucțiunile de pe cititorul RFID, conectați pinii de alimentare, de la sol, de serie și antene. Mai jos este diagrama pin-out a cititorului pe care îl am. Folosim știfturile Arduino 2 și 3 pentru comunicarea serială cu bordul RFID, astfel încât putem lăsa pinii 0 și 1 pentru ieșirea consolei.
Urmați acești pași pentru a conecta panoul cititorului RFID.
Setarea mea de croazieră este prezentată mai jos.
Adăugați releul la panoul de paine. Cele două pinuri interne rulează electromagnetul care va închide releul. Puteți vedea în diagrama de mai jos cum funcționarea curentului prin pinii 3 până la 7 va afecta releul.
Acesta este panoul meu cu releul conectat.
Breadboard cu configurare RFID și releeînființat()
funcţie. În acest exemplu: 38400
. Ar trebui să vedeți ceva de genul:
RFID GDO V0.1
Eticheta a fost citită: 3D00CFBB80
Numărul de verificare: C9 - a trecut.
3D00CFBB80
Etichetă nevalidă. Pleacă de aici.
Copiați și lipiți ID-ul (3D00CFBB80
în acest exemplu) în codul în lista goodTags. Notă, un cod diferit poate fi pe o linie nouă atâta timp cât este înconjurat de citate și are o virgulă după ea. O singură listă de coduri poate arăta cam așa:
char * goodTags [] =
"3D00CFBB80",
;
Faceți clic pe încărcarea în IDE-ul Arduino apoi deschideți monitorul serial al IDE-ului Arduino apăsând CTRL SHIFT M sau Selectarea meniului Instrumente> Monitor serial.
Acum, când executați codul, veți vedea ceva de genul:
RFID GDO V0.1
Eticheta a fost citită: 3D00CFBB80
Numărul de verificare: C9 - a trecut.
3D00CFBB80
Deschiderea ușilor!
Mai jos este o fotografie a mea care testează eticheta RFID cu releul. Multimetrul este conectat la știfturile 1 și 9 ale releului, astfel încât să detecteze continuitatea atunci când releul se închide.
Cu ajutorul unui multimetru conectat, puteți auzi semnalul sonor al multimetrului pentru a indica continuitatea și apoi un chit foarte slab și releul se fixează înapoi.
Cele mai multe dispozitive de deschidere a ușilor de garaj funcționează foarte simplu prin deschidere atunci când au un contact închis. Când apăsați butonul de pe perete închideți contactul. Pe deschizătorul de uși de garaj, am terminale în care firele de la buton sunt conectate. Puteți vedea terminalele evidențiate aici:
Acum aveți dovada de bază a conceptului de deschidere a ușii cu un val de mână.
/ * RFID Model de deschidere a ușii de garaj de către Ben Miller Funcția @VMfoo ReadKey inspirată și împrumutată în parte din exemplul terenului de joacă arduino: http://playground.arduino.cc/Code/ID12 * / // include biblioteca SoftwareSerial astfel încât să puteți utilizați funcțiile sale: #include // părăsirea porturilor seriale hardware pentru depanare #define rxPin 2 // pin pentru a primi date din cititorul RFID #define txPin 3 // transmite PIN pentru softserial initialization #define doorPin 4 // pin pentru a declanșa releul / / configurarea unui nou port serial NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // pentru datele de intrare seriale int incomingByte = 0; // array de caractere pentru valoarea etichetei RFID char tagValue [10]; // Ce valori de etichete sunt autorizate char * goodTags [] = "3D00CFBB80", // "######", // adăugați o altă etichetă prin înlocuirea literelor # cu codul dvs. și necomentând această linie; // Calculați numărul de etichete din matrice deasupra int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // definiți modurile pin pentru releul de deschidere pinMode (doorPin, OUTPUT); // setați rata de transfer pentru portul SoftwareSerial RFIDPort.begin (9600); Serial.begin (38400); // serial serial rate Serial.println ("RFID GDO V0.1"); // hello world void loop () // buclă și citiți dacă (RFIDPort.available ()) if (readKey ()) // verificați valoarea tagului dacă (goodTag ()) // dacă este permisă openDoor (); altceva Serial.println ("Etichetă greșită. Du-te departe"); int goodTag () pentru (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) // Dacă suntem la octetul de control, sumă de control ^ = tagBytes [bytesRead >> 1]; // Calculați suma de control ... (XOR); altceva tempByte = val; // Păstrați mai întâi prima cifră hexazecimală; bytesRead ++; // Gata să citească următoarea cifră // Trimite rezultatul către gazda conectată prin USB dacă (bytesRead == 12) // Citește 12 cifre este completă tagValue [10] = '\ 0'; // Null-termină șirul Serial.print ("Tag read:"); pentru (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;
În acest tutorial am subliniat elementele de bază ale tehnologiei RFID și cum să o valorific pentru propriile proiecte. În timp ce componentele de nivel scăzut care citesc RFID pot fi dificil pentru pasionați de a utiliza, panourile RFID breakout permit utilizarea RFID foarte ușor în proiectele cu Arduino sau chiar cu un Raspberry Pi printr-un port serial. Odată ce un ID este citit dintr-o etichetă, este simplu să acționați asupra informațiilor. În acest exemplu am acționat un releu pentru a deschide o ușă de garaj.
În plus: