Cum să deschideți ușa garajului cu ajutorul RFID

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.


Bazele 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.


Semnalul de interogare alimentează chipul RFID

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.


Proiectul RFID

Î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.


Componentele proiectului

  • Arduino (Doar despre orice model de 5V ar trebui să funcționeze, am folosit un Uno)
  • Panoul RFID Reader cu antena
  • Etichete RFID (Am constatat că EM4100 125K Wiegand key fobs sunt ieftine și ușor de găsit pe ebay)
  • breadboard
  • Un LED standard
  • Rezistor 220 Ohm (roșu roșu maro)
  • Rele (Aleph SD1A05AWJ)
  • Diodă (1N4148)
  • Jumper Wires

Cum functioneaza

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.


Construcția

Pasul 1. Configurarea cititorului RFID

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.


Foaia de date va afișa pin-outs

Urmați acești pași pentru a conecta panoul cititorului RFID.

  1. Sârmă împământată până la pinul de bază al cititorului
  2. Conectați alimentatorul la pinul de alimentare al cititorului
  3. Sârmă Arduino pin 2 la pinul TX al plăcii RFID
  4. Sârmă Arduino pin 3 la pinul RX
  5. Conectați antena la cititor
  6. Conectați anodul LED la pinul de ieșire pwr al indicatorului panourilor.
  7. Conectați pinul catodic al LED-ului la masă prin intermediul rezistenței

Setarea mea de croazieră este prezentată mai jos.


Arduino se conectează la placa de cititoare RFID

Pasul 2. Configurarea releului

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.


Releu schematic
  1. Porniți pinul 4 de la Arduino la pinul 3 al releului. Când este tras în sus, acest pin va furniza suficient curent pentru a închide releul.
  2. Acționați pinul 7 pe releu la masă.
  3. Adăugați dioda între pinii 3 și 7 cu banda de vopsea spre pinul 3 al releului.
Bacsis: Atunci când utilizați un releu sau altceva care utilizează un câmp electromagnetic, utilizați întotdeauna o diodă "flyback" pentru a proteja sistemul de vârful de alimentare atunci când câmpul magnetic se prăbușește.

Acesta este panoul meu cu releul conectat.

Breadboard cu configurare RFID și relee

Pasul 3. Programul Arduino

  1. Copiați codul de la sfârșitul acestui tutorial. Codul este complet comentat pentru a vă ajuta să înțelegeți ce se întâmplă la fiecare pas. În partea de sus a codului puteți vedea unde este locul pentru a modifica lista valorilor etichetelor RFID. Vom rula codul o singură dată și vom emite eticheta RFID, astfel încât să puteți copia și insera codul de identificare din etichetele dvs. autorizate în codul final.
  2. Clic încărcați în IDE-ul Arduino
  3. Deschideți monitorul serial al IDE-ului Arduino apăsând CTRL SHIFT M sau Selectarea meniului Instrumente> Monitor serial.
Bacsis: Asigurați-vă că rata baud a monitorului serial se potrivește cu ceea ce am setat în î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.


Testarea bucla RFID

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.

Pasul 4. Deschiderea ușii de garaj

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:


Garniturile de deschidere a ușii de garaj
  1. Conectați pinii 1 și 9 de la releul de pe panou la bornele de la deschizătorul de garaj
  2. Introduceți eticheta RFID în apropierea antenei
  3. Uită-te la ușa deschisă

Acum aveți dovada de bază a conceptului de deschidere a ușii cu un val de mână.

Pasul 5. Faceți-l permanent

  1. Montați antena undeva unde poate citi eticheta prin ușă sau perete. RFID poate trece prin obiecte solide, astfel încât o antenă poate fi ascunsă în spatele peretelui garajului, în funcție de material. Este posibil să fie nevoie de încercări și de erori pentru a găsi un loc în care să poată citi eticheta.
  2. Transferați circuitul la un perfbor și lipiți o soluție permanentă
  3. Puneți proiectul într-o cutie și montați în garaj.

Codul sursă pentru acest proiect

/ * 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; 

rezumat

Î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:

  • Am examinat diferențele dintre tipurile de tehnologii RFID
  • Am explorat conceptul de funcționare a RFID-ului
  • Ați urmat un exemplu de conectare a unui placă de cititoare RFID la un Arduino
  • Citiți și tipăriți identificatorul RFID de la o etichetă de identificare
  • Adăugat un releu la circuit pentru a închide un contact atunci când eticheta dreapta a fost citit
  • Conectați releul la un sistem de deschidere a ușii de garaj pentru a adăuga controlul accesului pe bază de RFID