RFID-luku tegemine Arduino abil. RFID-siltide lugemine ja kirjutamine. RC522 moodul Arduino jaoks

Täna räägin RFID-moodulist RC522, mis põhineb MFRC522 kiibil. Toide 3,3V, tuvastamisulatus kuni 6cm. Mõeldud RFID-siltide lugemiseks ja kirjutamiseks sagedusega 13,56 MHz. Sagedus sisse antud juhul on väga oluline, kuna RFID-märgised eksisteerivad kolmes sagedusvahemikus:


  • LF vahemiku märgid (125–134 kHz)

  • HF-riba sildid (13,56 MHz)

  • UHF-riba sildid (860–960 MHz)

See konkreetne moodul töötab HF-riba siltidega, eriti MIFARE protokolliga.

Mooduliga töötamiseks saate kasutada standardne raamatukogu Kaasas RFID Arduino IDE, aga on veel üks spetsiaalselt selle mooduli jaoks kirjutatud teek - MFRC522 (1 MB). Mõlemad teegid on üsna mugavad, kuid MFRC522-l on rohkem erifunktsioonid, mis võimaldab vähendada lõplikku programmikoodi nii palju kui võimalik.

Ühendus

Mõnel inimesel tekib probleem – enamiku õppetundide ja juhendite tihvtide nimed ei pruugi ühtida teie mooduli pinoutiga. Kui visandid näitavad SS-tihvti, kuid teie moodulil seda pole, on see tõenäoliselt märgitud kui SDA. Allpool toon moodulite ühendamise tabeli levinumate plaatide jaoks.

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 Stabilisaator 3,3V Stabilisaator 3,3V Stabilisaator 3,3V
GND GND GND GND GND GND

SS(SDA) ja RST juhttihvtid on joonisel täpsustatud, nii et kui teie plaat erineb sellest, mida ma oma näidetes kasutan ja ma kasutan UNO R3, märkige visandi alguses olevast tabelist kontaktid. :


#define SS_PIN 10 #define RST_PIN 9

Näide nr 1: Kaardi numbri lugemine

Vaatame näidet RFID teegist – cardRead. See ei kuva kaardilt andmeid, vaid ainult selle numbrit, millest tavaliselt piisab paljude ülesannete jaoks.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // Andmed kaardi numbri kohta on salvestatud 5 muutujasse, jätame need meelde, et kontrollida, kas oleme sellist kaarti juba lugenud 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()) ( // Võrrelge kaardi numbrit eelmise kaardi numbriga, kui (rfid.serNum != serNum0 && rfid.serNum != serNum1 && rfid.serNum != serNum2 && rfid.serNum != serNum3 && rfid.serNum != serNum4) ( / * Kui kaart on uus, siis loe */ Serial.println("Kaardi leitud"; serNum2 = rfid.serNum; "); .print(rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.print(rfid.serNum,DEC); Serial.print(", "); Serial.print(rfid.serNum,DEC); Serial.print("Hex: "); .print(", "); Serial.print(rfid.serNum,HEX);


Serial.print(rfid.serNum,HEX);

Serial.print(", ");

Serial.print(rfid.serNum,HEX);


#include #include #define RST_PIN 9 // #define SS_PIN 10 // MFRC522 mfrc522(SS_PIN, RST_PIN); // Looge MFRC522 eksemplar void setup() ( Serial.begin(9600); // Initsialiseerige jadapordi monitor samas kui (!Serial); // Ärge tehke midagi, kuni see on avatud (Arduino jaoks ATMEGA32U4 kiibil) SPI.begin( ) ; // SPI siini lähtestamine mfrc522.PCD_Init(); RFID moodul ShowReaderDetails(); // Trüki andmed MFRC522 mooduli kohta Serial.println(F("Skanni PICC, et näha UID, tüüp ja andmeplokke...")); ) void loop() ( // Otsin uus kaart if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Valige üks kaartidest if (! mfrc522.PICC_ReadCardSerial()) ( return; ) // Väljund andmed kaardilt mfrc522.PICC_DumpToSerial(&(mfrc)522. ); ) void ShowReaderDetails() ( // Hangi mooduli versiooninumber bait v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("MFRC522 tarkvaraversioon: 0x")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0")); else if (v == 0x92) Serial.print(F(" = v2.0")); ")); Serial.println(""); // Kui saame 0x00 või 0xFF, katkeb andmeedastus, kui ((v == 0x00) || (v == 0xFF)) ( Serial.println( F(") HOIATUS: Sidetõrge, kas MFRC522 on korralikult ühendatud?"));

Kui eelmine näide töötas vigadeta, siis ei tohiks ka see probleem olla. Kuigi eelmises näites ilma probleemideta kaardi numbri välja andnud metroopass osutus selles tuvastamatuks andmetüübiks ja moodul ei osanudki lugeda muud peale kaardi numbri.

Selle tulemusel saame kaardilt andmeid lugedes selle tüübi, identifikaatori ja andmed 16 mälusektorist. Tuleb märkida, et MIFARE 1K standardkaardid koosnevad 16 sektorist, iga sektor koosneb 4 plokist ja iga plokk sisaldab 16 baiti andmeid.


Näide nr 3: Uue identifikaatori kirjutamine kaardile

Selles näites vaatleme kaardi identifikaatori (UID) muutmist. Oluline on teada, et kõik kaardid ei toeta ID muutmist. Kaart võib olla ümberkirjutatav, kuid see tähendab ainult seda, et andmed on ümberkirjutatavad. Kahjuks need kaardid, mis mul käes olid, ei toetanud UID ümberkirjutamist, kuid igaks juhuks annan siia visandi koodi.


#include #include /* Määra siin uus UID */ #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Võtmeklahv; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("Hoiatus: see näide kirjutab üle teie UID muudetava kaardi UID, kasutage ettevaatlikult!")); for (bait 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); }

Näide nr 4: Andmete kirjutamine kaardile

Siin on lõpuks see, milleni oleme nii kaua jõudnud – andmete kaardile salvestamine. Mooduliga töötamise “magusaim” osa on võimalus teha olemasolevast kaardist koopia, midagi lisada või muuta, see on palju huvitavam kui lihtsalt lugemine.

Muudame üht andmeplokki kaardil:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Võtmeklahv; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); // Valmistage võti ette // kasutage klahvi FFFFFFFFFFFFh, mis on standard tühjad kaardid jaoks (bait 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); } }

Ja selle tulemusel saame modifitseeritud andmeplokiga kaardi:


Nüüd, kui olete õppinud kaardiandmete plokke lugema ja kirjutama, saate katsetada siltidega, mis teil tõenäoliselt on - pääsmed, reisikaardid ühistransport. Proovige neilt kaartidelt andmeid lugeda ja kirjutada, paar kordavat pääsu ei tee kunagi haiget, eks?)

See on kõik, tellige ja jälgige väljaandeid. Järgmine kord räägin teile ja näitan teile, kuidas standardit kasutada tähemärkide kuvamine 1602 lisab kohandatud tähemärke, sisuliselt lisades ekraanile graafikat.

RFID (Radio Frequency Identification) kasutab elektromagnetvälju, et automaatselt tuvastada ja jälgida objektidele kinnitatud silte. Sildid sisaldavad elektrooniliselt salvestatud teavet. Passiivsed sildid koguvad energiat lähedal asuva RFID-lugeja raadiosignaalidest. Aktiivsetel siltidel on kohalik toiteallikas (nt aku) ja need võivad töötada lugejast sadade meetrite kaugusel. Erinevalt vöötkoodist ei pea silt olema seadme vaateväljas, nii et selle saab manustada jälgitavasse objekti. RFID on üks automaatse tuvastamise ja andmete kogumise meetodeid.

Rakendus

RFID-märgiseid kasutatakse paljudes tööstusharudes. Näiteks saab tootmise ajal sõiduki külge kinnitatud RFID-lugejat kasutada konveieri edenemise jälgimiseks. Märgistatud ravimeid saab jälgida ladude kaudu. RFID mikrokiipide paigaldamine kariloomadele võimaldab loomi identifitseerida.

Kuna RFID-märgiseid saab kinnitada rahale, riietele ja varale või implanteerida loomadele ja inimestele, on lugemisvõime isikuandmed helistab ilma kasutaja nõusolekuta tõsine probleem privaatsus. Need riskid on viinud isikuandmete turvalisuse küsimustega tegelevate standardsete spetsifikatsioonide väljatöötamiseni. Silte saab kasutada ka kauplustes, et kiirendada kassasse maksmist ja vältida vargusi.

Lugu

1945. aastal leiutas Leon Theremin kuulamisseadme Nõukogude Liit, mis edastas raadiolaineid koos lisatud heliteabega. Heli vibratsioon vibratsiooni ajal mõjutas diafragmat, mis muutis veidi resonaatori kuju, moduleerides peegeldunud raadiosagedust. Kuigi see seade oli pigem varjatud pealtkuulamisseade kui ID-märgend, peetakse seda USB RFID-lugeja eelkäijaks, kuna selle aktiveerisid helilained väline allikas. Transpondreid kasutavad endiselt enamik töökorras õhusõidukeid. Varem kasutasid liitlased ja Saksamaa II maailmasõjas regulaarselt sarnast tehnoloogiat, nagu RFID-märgiste lugejad, lennukite tuvastamiseks.

23. jaanuaril 1973 patenteeritud Mario Cardullo seade oli tänapäevase RFID-i esimene tõeline eelkäija, kuna tegemist oli mäluga passiivse raadiovastuvõtjaga. Algne seade oli passiivne, toiteallikaks oli küsitlussignaal. Seda demonstreeriti 1971. aastal New Yorgi administratsioonile ja teistele potentsiaalsed kasutajad ja koosnes 16-bitise mäluga transponderist kasutamiseks kui tasuline seade. Cardullo põhipatent hõlmab raadiosageduste, heli ja valguse kasutamist edastuskandjatena.

Kasutusala

1969. aastal investoritele esitatud esialgne äriplaan näitas järgmisi rakendusi: RFID-lugeja:

  • kasutamine transpordis (sõiduki identifitseerimine, automaatne süsteem makse, elektrooniline numbrimärk, elektrooniline manifest, marsruutimine sõidukit, sõiduki tõhususe jälgimine);
  • pangandus (elektrooniline tšekiraamat, elektrooniline krediitkaart);
  • personal, automaatväravad, valve); meditsiinitööstus (tuvastus, patsiendi ajalugu).

Stephen Depp, Alfred Koelle ja Robert Fryman viisid 1973. aastal Los Alamose riiklikus laboris läbi nii passiivsete kui ka poolpassiivsete RFID-märgendite peegelduva võimsuse (moduleeritud tagasihajumise) varase demonstratsiooni. Kaasaskantav süsteem töötas sagedusel 915 MHz ja kasutas 12-bitiseid silte. Seda meetodit kasutavad enamik kaasaegseid UHFID- ja mikrolaine-RFID-lugejaid. IN kaasaegne elu Selliste seadmete järele on suur nõudlus.

Spetsifikatsioon

RFID kasutab tuvastatavatele objektidele kinnitatud silte. Omaenda RFID-lugeja tegemisel pidage meeles, et kahesuunalised raadiosaatja-vastuvõtjad, mida nimetatakse päringuteks või lugejateks, saadavad märgisele signaali ja loevad selle vastuse. RFID-sildid võivad olla passiivsed, aktiivsed või passiivsed. Aktiivsel märgisel on sisseehitatud aku ja see edastab perioodiliselt oma ID-signaali. Aku passiivsel (BAP) on pardal väike aku ja see aktiveeritakse RFID-lugeja olemasolul. Passiivsilt on odavam ja väiksem, kuna sellel pole akut. Selle asemel kasutab silt lugeja edastatavat raadiolainet. Kuid selleks, et passiivne silt töötaks, peab see olema valgustatud umbes tuhat korda tugevama võimsusega kui signaali edastamiseks. See mõjutab häireid ja kiirgust.

  • Mikrokontrolleri programmeerimine
  • Nagu teate, kasutavad paljud juurdepääsusüsteemid EM-Marini standardi RFID-kaarte sagedusega 125 KHz. Minu maja sisetelefon polnud erand. Üks probleem - oleks tore õppida selliseid kaarte kopeerima, sest nende kopeerimise hinnasildid ei ole julgustavad. Internetis on muidugi päris palju koopiamasinaid (ja hiinlased müüvad oma koopiamasinaid sentide eest – sageli panevad nad siiski kopeerimisel parooli plaatidele), aga miks mitte ehitada oma koopiamasin? Sellest räägib allolev artikkel.

    Koopiamasina arendamist tasub alustada sellest, et uurida, millesse selliseid märke kopeerida saab? Pärast foorumite lugemist saate teada, et kopeerimiseks on kõige levinumad toorikud T5577, T5557, EM4305.

    Nüüd vajame diagrammi. Võtame sellise koopiamasina analoogosa RECTOst ja ühendame selle atmega8 mikrokontrolleriga. Lisame nivoomuunduri max232 baasil COM-porti ühendamiseks (soovijad saavad USB-ga ühendamiseks kasutada ST232 või midagi muud, aga mul on arvutil COM-port nagu on USB-COM-adapter, seega mul sellist ülesannet ei olnud).

    Saate selle diagrammi:

    Milline ta on? Kahe emitteri järgija, võnkeahel, detektor ja RC filtrid. Tänu sellele, et RC filtritel on erinevad ajakonstandid, on astmete vahelisi pingetasemeid võrreldes võimalik isoleerida RFID-märgise signaali muutus. Selle ülesandega tegeleb atmega8 sisseehitatud komparaator. 125 KHz signaali genereerimise tagab atmega8-sse sisseehitatud PWM-kontroller.

    RFID-märgise ja lugeja kombinatsioon moodustab trafo, kus märgis on sekundaarmähis. Teave edastatakse sildi abil, muutes sekundaarmähise koormust. Selle tulemusena muutub vool lugeja mähises (primaarmähis). Ahela ülaltoodud analoogosa vastutab nende vooluimpulsside eraldamise eest. Võnkuv ahel tuleb konfigureerida maksimaalne pinge V kontrollpunkt, näiteks mähise/pooli keerdude kerimine. Tõsi, nad ütlevad, et parem on, kui pinge on veidi väiksem kui maksimaalne - see töötab stabiilsemalt. Minu katsepunktis on umbes 40 V pinge.

    Kopeeritud märk kasutab Manchesteri kodeeringut. Dekrüpteerimiseks see kood, piisab, kui jätta vahele kolmveerand bitipilu perioodist mis tahes signaali serva muutuse korral ja sellele järgneva signaali languse põhjal fikseerida bitiväärtus, mis hakkab vastama signaali väärtusele pärast langust. Dekodeerimisel tasub määrata aken, milles peaks toimuma signaali langus – mitte rohkem kui pool bitipilu perioodist.

    Dekrüpteerimise meetod Manchesteri kodeering ja võtsin selle koodi Shadsist. Sa võid muidugi ise kirjutada, aga mul oli koopiamasina käivitamisega kiire – tahtsin veenduda, et vooluahel töötab ja silte võetakse vastu. Nii et see fragment jäi koopiamasina koodi sisse. Samuti selgus, et minu komparaator on konfigureeritud vastupidiselt sellele, mida dekodeerimiskood vajab. Muutis seda koodis. Niisiis, saime nullide ja ühtede jadad. Kuidas ma saan neilt kaardi koodi?

    Ja see on väga lihtne. Oletame, et kaardinumbril näkside järgi on kuju AB CD EF GH IJ. Kaart näitab seda:

    1) alguses üheksa ühikut;
    2) Nibble A;
    3) Nibble paarsus A (1 bitt);
    4) Nibble B;
    5) Nibble paarsus B (1 bitt);

    16) Nibble I;
    17) Nibble paarsus I (1 bitt);
    18) Nibble J;
    19) närimispaarsus J (1 bitt);
    20) Veerupaarsuse nibble nibble jaoks A B C D E F G H I J;
    21) Bitt 0.

    Loeme kõik 64 bitti, dekrüpteerime ja saame 40 bitti kaardi koodi. Loogiline, et kui me ise sellise koodi väljastame, sulgedes lugeja küljes oleva kaardi mähise, saame kaardi emulaatori. Aga nüüd me ei ole temast huvitatud.

    Oleme õppinud kaarti lugema, aga kuidas saame andmeid kaardile üle kanda? Selleks tuleb lihtsalt 125 KHz sagedus sisse või välja lülitada vastavalt kaardiga sideprotokollile. Lugeja “vaikuse” ajal töötab kaart salvestatud energiast.

    T5557/T5577 toorikud ühilduvad üksteisega täielikult salvestusprotokollide osas, kuid neil on veidi erinev miinimum- ja maksimaalsed ajad impulsse (õnneks kattuvad T5557 ajad T5577-ga). EM4305-l on erinev salvestusprotokoll.

    T5557 salvestamiseks kasutasin koodi BolshoyK. Allolev tabel näitab võtmehoidja T5557 signaali parameetreid.

    Salvestamine algab StartGape signaaliga – peate 125 KHz signaali umbes 300 µs välja lülitama. See on signaal kaardile, et nüüd hakatakse sellele andmeid edastama. Järgmisena peate teabe toorikule üle kandma. Edastatud andmete kodeering on sama Manchester.

    Toorikud T5557/T5577 ja EM4305 on multifunktsionaalsed ja võivad erinevat tüüpi modulatsioonid, tugiparoolid ja palju muud. Igal pardal oleval plaadil on 32-bitiste plokkide komplekt. Nende plokkide eesmärk on erinev. Mõnes väljastatakse võtmekood (see võtab kaks plokki). Teistes - konfiguratsioon. Kolmandaks, tootja identifikaator. Kasutame piiratud funktsionaalsust, nii et need, kes tahavad aru saada, mida kõik need bitid tähendavad, võivad tutvuda toorikute dokumentatsiooniga (lisansin selle arhiivi).

    Plokid kogutakse kahele lehele (0 ja 1).

    Nulllehel on konfiguratsiooniplokk indeksiga 0. Selle me seadistame. T5557/T5577 jaoks on meil järgmised konfiguratsioonibaidid: 0x00.0x14.0x80.0x40 vastavalt dokumentatsiooni tabelile (märgisin punasega ühe biti võrra valitud režiimid):

    Seega oleme valinud: andmeedastussagedus RF/64 (125 KHz/64), Manchester tüüpi kodeering, väljastavad plokid kuni sekundini (plokkides 1 ja 2 saame kaardi poolt väljastatud koodi). Enne kirjutamist tuleb saata operatsioonikood (2 opkoodi bitti) ja üks lukubitt (lockbit). Opkoodid 10b ja 11b eelnevad andmete kirjutamisele lehekülgedel 0 ja 1 (vähitähtsam bitt määrab lehekülje numbri, kõige olulisem bitt määrab lehekülje kirjutamiskoodi). Opkoodi väljastame 10b (kõik tööd tehakse nulllehega) ja 0b lukubiti jaoks. Pärast kõigi nende andmete ülekandmist on vaja üle kanda kirjutatava lehe kolmebitine aadress. Kõik T5557/T5577 andmeedastused viiakse läbi kõige olulisemast bitist kõige vähem oluliseni.

    Määrates kaardi koodi plokkidesse 1 ja 2 ning konfiguratsiooni plokki 0, saate RFID-märgise duplikaat. Nagu näete, on kõik lihtne.

    Järgmine toorikute tüüp on EM4305. Seega pidin selle tooriku salvestamisega ise tegelema. See koosneb ka 32-bitistest plokkidest, kuid nende eesmärk on erinev.

    Kaardile edastatavate andmete kodeerimine põhineb ajaintervalli erinevustel. Kui ajaintervalli jooksul oli erinevus, siis on see null, ja kui ei olnud, on see üks. Konfiguratsioonisõna on salvestatud 4. baidi ja enda jaoks defineerisin selle järgmiselt: 0x5F,0x80,0x01,0x00 (Manchesteri kodeering, RF/64, väljundsõna 6). Sõnadesse 5 ja 6 kirjutan kaardi koodi (sama 64 bitti, mida kaart toodab). EM4305 nõuab, et edastamine toimuks kõige vähem olulisest bitist kõige olulisemani. Kaart mõistab, et vahetus algab sellega pärast impulsside kombinatsiooni andmist:

    1. Lülitame välja 48 µs juures.
    2. Lülitame välja 96 μs sisse.
    3. Lülitage väli 320 µs juures välja.
    4. Lülitame välja 136 μs juures.
    5. Keela väli kuni järgmise käsuni.
    Käsk ploki kaardile kirjutamiseks edastatakse järgmiselt:
    1. Saadame ülaltoodud impulsside jada.
    2. Saadame 0b.
    3. Edastame CC0-CC1 ja nende paarsuse P. (0101b salvestamiseks, vt allolevaid tabeleid).
    4. Edastame ploki aadressi (vt tabelit), kaks lõpu nulli ja aadressi paarsus.
    5. Edastame plokkide andmeid (32 bitti).

    Käsuvorming


    Käsukoodid

    Blokeeri aadressivorming

    See määrab EM4305 tooriku konfiguratsiooni ja selle koodi.

    Tegelikult ei vaja lihtne koopiamasin midagi enamat.

    Tegin koopiamasinast mitu erineva kuvariga varianti. Näiteks siin on 1602 ekraaniga koopiamasin:

    Ja siin on video LPH9157-02 ekraanil töötavast koopiamasinast.

    See projekt tehti sõbra palvel laoruumi uksele paigaldamiseks. Seejärel tehti sõprade ja tuttavate soovil veel mitu. Disain osutus lihtsaks ja usaldusväärseks. Töötab see seade nii: see lubab ainult neid RFID-kaarte, mis olid varem seadme mällu salvestatud.

    Juurdepääsukontrolleri peamised omadused:

    RFID-kaardid EMmarin 125kHz formaadis

    Mikrokontroller ATtiny13

    Kaartide/võtmehoidjate arv - 10.
    "OPEN" nupp on tavaliselt avatud ja kaitstud kleepumise eest.
    Luku juhtväljund, suur vool väljatransistor, riivi töörežiim (lülitub ajutiselt sisse).

    Võimsus - 12v.
    Tarbimine ooterežiimis on 35 mA.
    Juurdepääsukaartide/fobide arv - 10 tk.
    Side pikkus nupuga "OPEN" on 10 meetrit.
    Lukustusjuhtimise väljundtüüp - avatud äravool (võimas väljatransistor, vool kuni 2A).

    Juurdepääsupiirangu kontrolleri skemaatiline diagramm RFID-kaartidel 125KHz (Em-Marin) 10 kaardi jaoks (ATtiny13 mikrokontrolleril):

    Kui teil on vaja juhtida elektromagnetlukku, peate installima vajaliku kontaktrühmaga väljundrelee.

    Kokkupandud RFID-validaatori välimus:

    Kaitsmete bittide seadistamine PonyProgis:

    Seadme kasutamine, laadige alla autori salvestatud video.
    Üks lugejatest avaldas ka video kokkupandud seadmest tegevuses:

    Programmeerimisjuhised

    Töörežiim - kui kontrollerile on antud 12 V, vilgub LED 1 Hz.
    Programmeerimisrežiim – LED vilgub 2Hz.
    Kui vajutate nuppu "OPEN", kostub luku avanemise ajal mitu lühikest piiksu.

    Helisignaalid

    1 lühike signaal - kaart või võtmehoidja kirjutatakse kontrolleri mällu.
    2 lühikest piiksu – kaart või võtmehoidja on juba kontrolleri mällu salvestatud.
    5 lühikest piiksu – programmeerimisrežiimist väljumine.
    1 pikk piiks- võtmekaardi mälu on kontrollerist kustutatud.
    Pidev lühikesed signaalid- kaardi/võtme mälu on täis, maksimaalselt 10 tk. (nõuab kontrolleri toite väljalülitamist).

    MASTER CARDi ja luku avamise aja salvestamine

    1 - Lülitage kontrolleri toide välja.
    2 - Vajutage nuppu "OPEN".
    3 - Nuppu all hoides ühendage 5 sekundi pärast kontrolleriga toide. kontroller “PIIRB”, vilgub LED sagedusega 2 Hz.
    4 - Vabastage nupp.
    5 - Tooge lugemisalasse kaart või võtmehoidja, kostab üksainus heli piiks, Põhikaart või võtmehoidja SALVESTAB ja luku avanemisaeg 1 sekund salvestatakse.

    6 - Hoidke kaarti või võtmehoidjat lugemisalas ja loendage helisignaale. Kogus määrab luku avamiseks vajaliku aja, sammuga 1 sekund, kuid mitte rohkem kui 32 sekundit.
    7 - Lülitage kontrolleri toide välja või tehke 30-sekundiline paus.

    Võtmehoidja kaartide kogu mälu kustutamine

    1 - töörežiim.
    2 - Vajutage nuppu "OPEN" ja seda hoides tooge MASTER-kaart või võtmepult lugeja juurde ja hoidke seda all, 5 sekundi pärast kostab pikk piiks - kaartide/võtmehoidjate mälu kustutatakse.
    3 - Vabastage nupp ja võtke kaart või võtmehoidja ära.