Citirea și scrierea etichetelor RFID. Modul RC522 pentru Arduino

Conexiune la Arduino:

Mai întâi trebuie să instalați Biblioteca RFID pentru MFRC522.

Contactele de pe modulul RC522 RFID trebuie conectate la Arduino. Pentru conectare este convenabil să folosiți fire de sex masculin-femă.


Descrierea contactelor pentru modulul RFID RC522:

  • VCC - Putere. Necesită 3,3 V;
  • RST - Resetare. Resetează linia. Nu vă conectați la pinul RESET de pe CraftDuino sub nicio circumstanță! Acest pin se conectează la un port digital cu PWM;
  • GND - Pământ. Pământ
  • MISO - Master Input Slave Output - date de la slave la master, SPI;
  • MOSI - Master Output Slave Input - date de la master la slave, SPI;
  • SCK - Serial Clock - semnal de ceas, SPI;
  • NSS - Slave Select - selectare slave, SPI;
  • IRQ - linie de întrerupere;
MFRC522 Arduino Uno Arduino Mega Arduino Nano v3 Arduino Leonardo/Micro Arduino Pro Micro
RST 9 5 D9 RESET/ICSP-5 RST
SDA(SS) 10 53 D10 10 10
MOSI 11 (ICSP-4) 51 D11 ICSP-4 16
MISO 12 (ICSP-1) 50 D12 ICSP-1 14
SCK 13 (ICSP-3) 52 D13 ICSP-3 15
3,3 V 3,3 V 3,3 V Stabilizator 3.3V Stabilizator 3.3V Stabilizator 3.3V
GND GND GND GND GND GND

Modulul RFID-RC522 vine cu două etichete, una sub formă de card de plastic, iar a doua sub formă de breloc. Dacă este necesar, acestea pot fi achiziționate separat.

După ce totul este conectat, indicatorul de pe modul se va aprinde, ceea ce indică faptul că RFID este alimentată cu energie . Este timpul rulați o schiță de testare care se află în biblioteca pe care am instalat-o.



Este necesar să se verifice corectitudinea constantelor specificate:

#define SS_PIN 10 #define RST_PIN 9 // Aceste constante corespund cu

Acum încărcați schița pe Arduino și porniți-o Monitorizarea portului serial.

Aducem eticheta la cititor și modulul citește toate datele din această etichetă, de exemplu, identificatorul unic al etichetei UID.

Video cu operarea RFID-RC522:

Astăzi voi vorbi despre modulul RFID RC522, bazat pe cipul MFRC522. Alimentare 3,3 V, raza de detectare pana la 6 cm. Proiectat pentru citirea și scrierea etichetelor RFID cu o frecvență de 13,56 MHz. Frecvența în acest caz este foarte importantă, deoarece etichetele RFID există în trei intervale de frecvență:


  • Marcaje ale intervalului LF (125-134 kHz)

  • Etichete de bandă HF (13,56 MHz)

  • Etichete de bandă UHF (860-960 MHz)

Acest modul particular funcționează cu etichete de bandă HF, în special cu protocolul MIFARE.

Pentru a lucra cu modulul, puteți utiliza biblioteca standard RFID inclusă în Arduino IDE, cu toate acestea, există o altă bibliotecă scrisă special pentru acest modul - MFRC522 (1 MB). Ambele biblioteci sunt destul de convenabile, dar MFRC522 are mai multe funcții speciale care vă permit să reduceți cât mai mult codul final al programului.

Conexiune

Unii oameni vor întâmpina o problemă - este posibil ca numele pinilor din majoritatea lecțiilor și ghidurilor să nu se potrivească cu pinout-ul de pe modulul dvs. Dacă schițele indică pinul SS, dar modulul dvs. nu îl are, atunci cel mai probabil este marcat ca SDA. Mai jos voi furniza un tabel de conectare a modulelor pentru cele mai comune plăci.

MFRC522 Arduino Uno Arduino Mega Arduino Nano v3

Arduino Leonardo/Micro

Arduino Pro Micro
RST 9 5 D9 RESET/ICSP-5 RST
SDA(SS) 10 53 D10 10 10
MOSI 11 (ICSP-4) 51 D11 ICSP-4 16
MISO 12 (ICSP-1) 50 D12 ICSP-1 14
SCK 13 (ICSP-3) 52 D13 ICSP-3 15
3,3 V 3,3 V 3,3 V Stabilizator 3.3V Stabilizator 3.3V Stabilizator 3.3V
GND GND GND GND GND GND

Pinii de control SS(SDA) și RST sunt specificați în schiță, așa că dacă placa dvs. este diferită de cea pe care o voi folosi în exemplele mele și folosesc UNO R3, indicați pinii din tabel de la începutul schiței :


#define SS_PIN 10 #define RST_PIN 9

Exemplul nr. 1: Citirea numărului cardului

Să ne uităm la un exemplu din biblioteca RFID - cardRead. Nu afișează date de pe card, ci doar numărul acestuia, care este de obicei suficient pentru multe sarcini.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // Datele despre numărul cardului sunt stocate în 5 variabile, le vom aminti pentru a verifica dacă am citit deja un astfel de card int serNum0; int serNum1; int serNum2; int serNum3; int serNum4; void setup() ( Serial.begin(9600); SPI.begin(); rfid.init(); ) void loop() ( if (rfid.isCard()) ( if (rfid.readCardSerial()) ( // Comparați numărul cardului cu numărul cardului precedent dacă (rfid.serNum != serNum0 && rfid.serNum != serNum1 && rfid.serNum != serNum2 && rfid.serNum != serNum3 && rfid.serNum != serNum4) ( / * Dacă cardul este nou, atunci citiți */ Serial.println(" "); Serial.println("Card găsit"); serNum0 = rfid.serNum; serNum1 = rfid.serNum; serNum2 = rfid.serNum; serNum3 = rfid .serNum; serNum4 = rfid.serNum; //Afișează numărul cardului Serial.println("Număr card:"); Serial.print("Dec: "); Serial.print(rfid.serNum,DEC); Serial.print( )", "); Serial.print(rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.print(", "); Serial.print( rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.println(" "); Serial.print("Hex: "); Serial.print(rfid .serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.print(", "); Serial.print(rfid.serNum,HEX); Serial.println(" "); ) else ( /* Dacă acesta este deja un card citit, imprimați doar punctul */ Serial.print("."); ) ) ) rfid.halt(); )

Schița este încărcată, LED-ul de alimentare de pe modul se aprinde, dar modulul nu răspunde la card? Nu este nevoie să intrați în panică sau să alergați pentru a căuta exemplele „corecte” de lucru. Cel mai probabil, pur și simplu nu există niciun contact pe unul dintre pini - găurile de pe placă sunt puțin mai mari decât grosimea jumperului, așa că merită să încercați să le rearanjați. LED-ul de pe placă nu este aprins? Încercați să schimbați jumperul care duce la 3,3 V și asigurați-vă că este conectat la 3,3 V de pe placă; furnizarea de energie de 5 V vă poate ucide cu ușurință placa.

Să spunem că totul funcționează pentru tine. Apoi, citind etichetele RFID cu modulul, vom vedea următoarele în monitorul portului serial:


Aici am citit 3 etichete diferite și, după cum puteți vedea, le-a citit cu succes pe toate.

Exemplul #2: Citirea datelor de pe un card

Să luăm în considerare o opțiune mai sofisticată - va citi nu numai numărul cardului, ci și toate datele disponibile pentru citire. De data aceasta, să luăm un exemplu din biblioteca MFRC522 - DumpInfo.


#include #include #define RST_PIN 9 // #define SS_PIN 10 // MFRC522 mfrc522(SS_PIN, RST_PIN); // Creați instanța MFRC522 void setup() ( Serial.begin(9600); // Inițializați monitorul portului serial în timp ce (!Serial); // Nu faceți nimic până când este deschis (pentru Arduino pe cipul ATMEGA32U4) SPI.begin( ); // Inițializează magistrala SPI mfrc522.PCD_Init(); // Inițializează modulul RFID ShowReaderDetails(); // Afișează date despre modulul MFRC522 Serial.println(F("Scanează PICC pentru a vedea UID, tip și blocuri de date) ..." )); ) void loop() ( // Se caută un card nou dacă (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Se selectează una dintre cărți dacă (! mfrc522.PICC_ReadCardSerial()) ( return; ) // Ieșirea datelor de pe card mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); ) void ShowReaderDetails() ( // Obțineți numărul versiunii modulului byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); (F("MFRC522 Versiune software: 0x ")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0")); altfel if (v == 0x92) Serial.print(F(" = v2.0")); else Serial.print(F ("(necunoscut)")); Serial.println(""); // Când primim 0x00 sau 0xFF, transmisia datelor este întreruptă dacă ((v == 0x00) || (v == 0xFF)) ( Serial.println(F("ATENȚIE: Eroare de comunicare, MFRC522 este conectat corect?") )) ; ))

Dacă exemplul anterior a funcționat fără erori, atunci nici aceasta nu ar trebui să fie o problemă. Deși, abonamentul de metrou, care a dat fără probleme numărul cardului în exemplul anterior, s-a dovedit a avea un tip de date nedetectabil în acesta, iar modulul nu putea citi altceva decât numărul cardului.

Ca urmare, după ce citim datele de pe card, obținem tipul, identificatorul și datele din 16 sectoare de memorie. Trebuie remarcat faptul că cardurile standard MIFARE 1K constau din 16 sectoare, fiecare sector este format din 4 blocuri și fiecare bloc conține 16 octeți de date.


Exemplul nr. 3: Scrierea unui nou identificator pe card

În acest exemplu, ne vom uita la schimbarea identificatorului cardului (UID). Este important de știut că nu toate cardurile acceptă schimbarea ID-ului. Cardul poate fi reinscriptibil, dar asta înseamnă doar că datele sunt reinscriptibile. Din păcate, cardurile pe care le aveam în mână nu acceptau rescrierea UID, dar voi furniza aici codul de schiță pentru orice eventualitate.


#include #include /* Setați un nou UID aici */ #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key cheie; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("Atenție: acest exemplu suprascrie UID-ul cardului dvs. UID-ul modificabil, utilizați cu grijă!")); pentru (octetul i = 0; i< 6; i++) { key.keyByte[i] = 0xFF; } } void loop() { if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { delay(50); return; } // Считываем текущий UID Serial.print(F("Card UID:")); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); // Записываем новый UID byte newUid = NEW_UID; if (mfrc522.MIFARE_SetUid(newUid, (byte)4, true)) { Serial.println(F("Wrote new UID to card.")); } // Halt PICC and re-select it so DumpToSerial doesn"t get confused mfrc522.PICC_HaltA(); if (! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) { return; } // Считываем данные с карты Serial.println(F("New UID and contents:")); mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); delay(2000); }

Exemplul nr. 4: Scrierea datelor pe un card

Iată în sfârșit la ce am ajuns atât de mult timp - înregistrarea datelor pe card. Cea mai „dulce” parte a lucrului cu modulul este abilitatea de a face o copie a unui card existent, de a adăuga sau de a schimba ceva, acest lucru este mult mai interesant decât simpla citire a acestuia.

Să schimbăm unul dintre blocurile de date de pe hartă:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key cheie; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); // Pregătiți cheia // folosiți cheia FFFFFFFFFFFFh care este standardul pentru cardurile goale pentru ( octet i = 0;i< 6; i++) { key.keyByte[i] = 0xFF; } Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } void loop() { // Ждем новую карту if (! mfrc522.PICC_IsNewCardPresent()) return; // Выбираем одну из карт if (! mfrc522.PICC_ReadCardSerial()) return; // Показываем подробности карты Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Проверяем совместимость if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } // В этом примере мы используем первый сектор данных карты, блок 4 byte sector = 1; byte blockAddr = 4; byte dataBlock = { // Данные, которые мы запишем на карту 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, 0x08, 0x09, 0xff, 0x0b, // 9, 10, 255, 12, 0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16 }; byte trailerBlock = 7; byte status; byte buffer; byte size = sizeof(buffer); // Аутентификация Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Показываем текущие данные сектора Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // Читаем данные из блока Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); // Аутентификация Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Записываем данные в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // Читаем данные снова, чтобы проверить, что запись прошла успешно Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(F("Checking result...")); byte count = 0; for (byte i = 0; i < 16; i++) { if (buffer[i] == dataBlock[i]) count++; } Serial.print(F("Number of bytes that match = ")); Serial.println(count); if (count == 16) { Serial.println(F("Success:-)")); } else { Serial.println(F("Failure, no match:-(")); Serial.println(F(" perhaps the write didn"t work properly...")); } Serial.println(); // Выводим данные Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }

Și, ca rezultat, obținem un card cu un bloc de date modificat:


Acum, după ce ați învățat să citiți și să scrieți blocuri de date de card, puteți experimenta cu etichetele pe care cel mai probabil le aveți - permise, permise de transport public. Încercați să citiți și să scrieți date de pe aceste carduri, câteva treceri duplicat nu strica niciodată, nu?)

Atât, abonați-vă și urmăriți publicațiile. Data viitoare vă voi explica și vă voi arăta cum să adăugați caractere personalizate la un afișaj standard de 1602 de caractere, adăugând în esență elemente grafice pe afișaj.

În prezent, utilizarea tehnologiei de identificare prin radiofrecvență (RFID) devine foarte populară. Multe aplicații sunt implementate în diverse domenii ale vieții noastre și sunt utilizate în diverse scopuri. RFID permite colectarea de date fără fir folosind cititoare electronice de etichete atașate sau încorporate în obiecte pentru identificare și alte scopuri. Acest articol discută cum să creați un dispozitiv simplu de control al accesului RFID, folosind un Arduino UNO și un cititor RFID (EM-18) pentru a controla un LED și un releu. Circuitul electric și schița Arduino (codul sursă) sunt prezentate mai jos.

Când este pornit, cititorul transmite un semnal de frecvență radio. Când o etichetă RFID este plasată lângă un cititor, aceasta primește un semnal de frecvență radio printr-o antenă din interiorul etichetei. Semnalul RF primit va fi convertit în energie electrică, care este suficientă pentru a transmite date de la etichetă înapoi la cititorul RFID. În plus, cititorul va transmite ID-ul etichetei către un dispozitiv extern prin portul de date serial. O gamă largă de modele de cititoare sunt disponibile în prezent. Cel mai comun și convenabil de utilizat este modulul EM-18. Acest modul citește etichetele pasive RFID și trimite ID-ul etichetei microcontrolerului Arduino.

CitindEtichete de identificare RFID

Pentru a începe, descărcați codul simplu rfid1.inoîn Arduino Uno folosind IDE.

Acum asamblați circuitul așa cum se arată mai jos.

Deschideți monitorul serial în Arduino IDE, țineți eticheta RFID foarte aproape de centrul cititorului RFID și notați ID-ul etichetei afișate. Acest identificator unic va fi necesar în următoarea schiță! (Eticheta noastră are ID 51005F46642C)

Controlul accesului

În acest moment, sistemul este configurat să compare identificatorul unic (eticheta utilizată) cu identificatorul oricărei etichete care urmează să fie citită.

Dezasamblați conexiunea existentă și încărcați o nouă schiță rfid2.ino la microcontrolerul Arduino

Reconectați componentele hardware (cu unele modificări) așa cum se arată în imaginea de mai sus. Aici, pinul D12 al microcontrolerului Arduino este folosit pentru a conduce un LED standard de 5 mm. Pinul D13 este folosit pentru a controla releul electromagnetic printr-un tranzistor de control. De fiecare dată când marcajul se potrivește, la pinul D13 apare un semnal de control ridicat timp de 5 secunde. Releul poate fi utilizat pentru a controla o sarcină externă, cum ar fi o oprire a ușii. Dacă valorile etichetei nu se potrivesc, atunci un nivel scăzut al semnalului rămâne la pinul D13, dar un nivel ridicat apare la pinul D12 pentru a declanșa LED-ul de alarmă.

Buna ziua. Rândul de astăzi este modulul RFID.

Acest modul este folosit pentru a citi și scrie date stocate în etichete RFID. Puteți citi mai multe despre această tehnologie, de exemplu, pe Wikipedia. Ne exersăm aici, așa că hai să începem.

Am modulul RFID-RC522. Vine complet cu două chei cu modele diferite - un card și un port chei. Nu există nicio diferență directă în muncă. Există o bibliotecă pentru ca modulul să funcționeze; aceasta poate fi descărcată din linkul de la sfârșitul articolului.

Când pregăteam acest proiect, am studiat mai multe articole despre modulul RFID, pe baza datelor prezentate acolo (în principal http://robocraft.ru/blog/3004.html) am scris o schiță.

În timp ce cheia nu este aproape de senzor, contactele releului vor fi deschise. Când aducem cheia necesară la receptor, grupul de contacte releu pornește și rămâne aprins până când cheia este scoasă. Receptorul meu aude etichete prin placaj - asta îmi permite să fac un comutator secret.

Dacă montați cititorul pe ascuns (de exemplu, sub o masă), puteți bloca cu ușurință computerul sau iluminatul să nu se aprindă.

Procesul de asamblare constă din următorii pași:

  1. Asamblați dispozitivul conform diagramei propuse.
  2. Scrieți o schiță pe placa procesorului (link la sfârșitul articolului).
  3. Conectați ansamblul la computer și porniți monitorul portului serial.
  4. Adu cheia cititorului.
  5. Editați linia 20 a schiței ținând cont de codul cheie care a venit la monitorul portului serial.
  6. Scrieți schița editată pe tablă.
  7. Asta este - avem un sistem de control al accesului peer-to-peer gata făcut.

În această lecție vom învăța cum să facem un sistem simplu care va debloca o încuietoare folosind o cheie electronică (Tag).

În viitor, puteți rafina și extinde funcționalitatea. De exemplu, adăugați funcția „adăugați chei noi și ștergeți-le din memorie”. În cazul de bază, să luăm în considerare un exemplu simplu în care un identificator unic de cheie este prestabilit în codul programului.

În acest tutorial vom avea nevoie de:

Pentru a implementa proiectul trebuie să instalăm bibliotecile:

2) Acum trebuie să conectați un Buzzer, care va emite un semnal dacă cheia funcționează și încuietoarea se deschide și un al doilea semnal când încuietoarea se închide.

Conectam soneria în următoarea secvență:

Arduino Buzzer
5V VCC
GND GND
pinul 5 IO

3) Ca mecanism de deblocare va fi folosit un servomotor. Orice servomotor poate fi selectat, în funcție de dimensiunea de care aveți nevoie și de forța pe care o creează servomotor. Servoiul are 3 contacte:

Puteți vedea mai clar cum am conectat toate modulele în imaginea de mai jos:

Acum, dacă totul este conectat, puteți trece la programare.

Schiță:

#include #include #include // Biblioteca „RFID”. #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); nesemnat lung uidDec, uidDecTemp; // pentru a stoca numărul etichetei în format zecimal Servo servo; void setup() ( Serial.begin(9600); Serial.println("Se așteaptă cardul..."); SPI.begin(); // Inițializare SPI / Inițializare magistrală SPI. mfrc522.PCD_Init(); // Inițializare MFRC522 / Inițiază cardul MFRC522. servo.attach(6); servo.write(0); // setează servo-ul la o stare închisă ) void loop() ( // Căutați o nouă etichetă dacă (! mfrc522.PICC_IsNewCardPresent()) ) ( return; ) // Selectați o etichetă dacă (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // Emiterea numărului de serie al etichetei. for (byte i = 0; i< mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

Să ne uităm la schiță mai detaliat:

Pentru a afla UID-ul cardului (eticheta), trebuie să scrieți această schiță în arduino, să asamblați circuitul descris mai sus și să deschideți Consola (Monitorizare portului serial). Când atingeți eticheta RFID, consola va afișa un număr

UID-ul rezultat trebuie introdus în următorul rând:

Dacă (uidDec == 3763966293) // Comparați Uid-ul etichetei, dacă este egal cu cel dat, atunci servomotor deschide supapa.

Fiecare card are un identificator unic și nu se repetă. Astfel, atunci când prezentați cardul al cărui identificator l-ați setat în program, sistemul va deschide accesul folosind un servomotor.

Video: