Čítačka kariet RFID RC522 v domácnosti. Vnútorný pohľad: RFID a iné štítky

  • 20.05.2019

Výhody elektronických zámkov nemožno podceňovať, napríklad použitie elektronických zámkov nám umožňuje zbaviť sa veľkého množstva ťažkých kľúčov.

Najdôležitejšou vecou pre bežného používateľa je jednoduchosť použitia a spoľahlivosť. elektronický zámok. Tieto požiadavky spĺňajú zariadenia na báze RFID (z angl. Radio Frequency IDentification - rádiofrekvenčná identifikácia) - bezkontaktná rádiofrekvenčná identifikácia.

Takýto identifikačný systém pozostáva zo stacionárneho prijímača a nositeľného vysielača (transpondéra).

Prezentované v tomto článku RFID zámok funguje podobným spôsobom. Identifikácia je založená na čítaní 40-bit sériové číslo Jedinečné karty. Pracovné podmienky signalizované zvukovým signálom. Zámok môže fungovať v dvoch hlavných režimoch: čítanie a registrácia Unique kariet v pamäti mikrokontroléra. Celkovo je možné do pamäte uložiť 4 karty.

Stručná charakteristika RFID zámok;

Popis činnosti RFID zámku

Celý obvod je možné rozdeliť na dve časti: digitálnu a analógovú. digitálny obvod pozostáva z mikrokontroléra, ktorý riadi celé zariadenie. Obvod používa mikrokontrolér typu PIC12F683 v puzdre DIP8.

Interný RC generátor mikrokontroléra umožňuje získať hodinovú frekvenciu s programovateľným frekvenčným rozsahom 37 kHz ... 8 MHz.

Na generovanie slúži hardvérový generátor PWM signálu obsiahnutý v regulátore pravouhlé impulzy s čistotou 125 kHz, ktoré sa po zosilnení privádzajú na anténu čítačky.

Na generovanie bol použitý časovač TMR2, ktorý sa po spočítaní príslušného počtu impulzov automaticky vynuluje pomocou digitálneho komparátora. Okrem toho sa stav výstupu GP2 automaticky obráti.

Takto môžeme generovať impulzy akéhokoľvek pracovného cyklu. Nezúčastňuje sa tohto procesu CPU aby mohol vykonávať ďalšie operácie.

Takto získaný priebeh sa posiela na vstup zosilňovača pozostávajúceho z tranzistorov VT1 a VT2 a následne do cievky antény čítačky, ktorá slúži na bezkontaktné napájanie obvodu umiestneného v Unique karte.

Pre použité karty Unique je rýchlosť prenosu dát približne 2 kbps (125000/64=1953bps). Jedinečný kód každá autorizovaná karta je uložená v energeticky nezávislom eeprom pamäť mikrokontrolér.

Stav činnosti zámku je signalizovaný bzučiakom pripojeným na výstup GP4. Relé je ovládané z výstupu GP5 cez tranzistor VT3.

Na nastavenie pracovného režimu mikrokontroléra slúžia dva prepojky. Jumper JP2 uvedie ovládač do nového režimu programovania karty a JP1 zmení spôsob ovládania relé medzi režimom spínania a dočasným zapnutím.

Analógová časť obvodu slúži na zosilnenie signálu indukovaného v cievke a jeho konverziu na digitálna forma. Hlavným prvkom je tu dvojitý operačný zosilňovač LM358. Cievka je pripojená na konektor CON1.

Signál v ňom indukovaný sa privádza na anódu diódy VD1. Okrem užitočného signálu existuje aj nosná vlna (125 kHz) a náhodné signályšum, preto sa do obvodu pridáva pásmový filter, ktorý obmedzuje šírku pásma na frekvencii asi 2 kHz.

Po všetkom spracovaní už zodpovedajúce digitálny signál sa privádza na vstup GP3 mikrokontroléra.

Anténu tvorí 40 závitov smaltovaného drôtu vinutia s priemerom 0,1 ... 0,3 m
m, navinutý na provizórnom tŕni s priemerom 40 ... 60 mm. Potom by mala byť cievka obalená izolačnou páskou na ochranu.

Na napájanie celého obvodu sa používa typový stabilizátor. Dióda VD4 chráni stabilizátor pred poškodením, ak je napájanie pripojené s nesprávnou polaritou.

Napájacie napätie je privedené na svorku CON2. Jeho hodnota musí byť v rozsahu 9…12 V. Viac vysoké napätie nepoškodí stabilizátor, ale z tohto dôvodu sa môže výrazne zahriať.

správne zostavený obvod je okamžite pripravený na použitie a môžete spustiť proces nahrávania autorizovaných kariet.

Pre záznam máp je potrebné zatvoriť jumper JP2 pri vypnutom napájaní a zapnúť napájanie. Mikrokontrolér potvrdí programovací režim dvojsekundovým pípnutím a čaká. postupná aproximáciaštyri RFID karty.

Správne dekódované sériové číslo karty je signalizované dvojitým pípnutím, po ktorom sa uloží do pamäte ovládača. Po naprogramovaní poslednej karty sa programovací postup ukončí dlhým pípnutím a mikrokontrolér prejde do normálnej prevádzky.

Prepojka musí byť rozpojená, aby sa v prípade výpadku napájania procesor nevrátil späť do programovacieho režimu. Ak je počet autorizovaných kariet menší ako štyri, potom je potrebné jednu kartu aplikovať niekoľkokrát (celkovo musia byť 4 registrácie).

Počas prevádzky je priblíženie karty k anténe signalizované dvojitým pípnutím bzučiaka a aktiváciou relé. Ak prepojka JP1 nie je nainštalovaná, potom každé priblíženie karty spôsobí zmenu stavu relé na opačný. Ak je nastavený, relé sa zapne na 10 sekúnd, po ktorých sa vráti do pôvodného stavu.

(62,6 Kb, stiahnuté: 1051)

V istom momente som sa opäť začal nudiť a zdalo sa mi, že som na to prišiel dobrý dôvod kúpiť čítačku kariet. Koncept bol nasledovný: kartu prilepíme na spodok notebooku a čítačku umiestnime na miesto, kde sa počítač zvyčajne nabíja.

Výsledok: keď dáme notebook na „nabíjanie“, zásuvka sa automaticky zapne nabíjačka. A po zvyšok času je zásuvka, samozrejme, vypnutá. Nehovoriac, že ​​je to obzvlášť užitočné, ale - zábava.

Ale ako to už býva, niečo sa pokazilo. To znamená, že namiesto šokovej práce v oblasti predajní som sa z nejakého dôvodu v prvom rade naučil zistiť, koľko ciest zostáva na mojom miestnom lístku na metro.

Pre pochopenie: táto čítačka nie je hotové zariadenie, ale periféria pre ovládač alebo počítač. Z tohto dôvodu bude jeho použitie vyžadovať určité úsilie. Neexistujú žiadne hotové recepty „z krabice“, ale všetko ostatné závisí od fantázie a schopností.

Čo zvyčajne robia? Najčastejšie - zámky s otváraním karty, sledovanie času, systém kontroly prístupu pre domáce zvieratá (napríklad vstup na krmivo).

Na pokusy som zvolil lacnú a viac-menej univerzálnu čítačku. RFID v názve tejto veci znamená technológiu rádiovej identifikácie, teda nič konkrétne neznamená. Ale zo špecifikácií vyplýva, že kus železa je kompatibilný s bežnými RFID kartami s protokolom MIFARE.

S najväčšou pravdepodobnosťou ste sa s takýmito kartami stretli opakovane. Najčastejšie - vo forme kancelárskeho preukazu. Ďalším nápadným príkladom sú bezkontaktné lístky na metro.

Základný princíp fungovania je celkom jednoduchý na pochopenie. Karta a čítačka majú antény, pričom signál čítačky (podstata elektromagnetického poľa) slúži súčasne ako zdroj energie pre kartu. Tie. z hľadiska energie aj z hľadiska prenosu dát je to veľmi podobné bezdrôtovému nabíjaniu, ktoré sa stalo veľmi populárnym.

Samotné karty môžu v závislosti od úpravy preniesť od niekoľkých desiatok bajtov až po niekoľko kilobajtov dát (vrátane jedinečného sériového čísla). Tiež v závislosti od úpravy môže byť karta vybavená kryptografická ochrana informácie.

V súprave boli dva hrebene, ale jeden (hranatý) som už spájkoval, pardon. Preto neexistuje typ dosky bez hrebeňov

Táto sada obsahuje čítačku, hrebeň pre jednoduché prototypovanie a dokonca aj montáž na „základnú dosku“ a dva identifikátory: kartu MIFARE 1K a prívesok na kľúče s rovnakými schopnosťami. To znamená, že na experimenty to úplne stačí.

.

.

.

Doska čítačky, ako vidíte, vyzerá veľmi úhľadne. A pohodlne, po inštalácii rohového hrebeňa sa rozmery zariadenia nezväčšujú, pretože hrebeň sa skutočne zhoduje na výšku s najvyšším prvkom na doske.

S batériou AAA

Tie. nemôžete sa mučiť kompromisom medzi pohodlím a všestrannosťou (hrebeň) a úsporou miesta na zapustenie (priame spájkovanie drôtov).

Doska má okrem iného aj červenú LED diódu, ktorá je, žiaľ, úplne neinformatívna. Základom je, že horí aj pri výpadku prúdu – samozrejme, na rozhraní SPI je dostatok úrovní. A na karty nijako nereaguje.

Jedným slovom sa rozsvieti, keď je čítačka nejakým spôsobom pripojená k Arduinu, čo nezaručuje jej výkon.

Čo sa týka rozsahu odozvy, subjektívne je prah vo vzdialenosti 2 cm od povrchu dosky. Do 2 - 2,5 cm - oblasť nezabezpečenej prevádzky.

Vlastnosti (od predajcu):

Napätie: 3,3V

Prúdový odber v aktívnom stave: 13-26 mA

Spotreba prúdu v pohotovostnom režime: 10-13mA

Spánkový prúd: menej ako 80uA

Špičkový odber: menej ako 30 mA

Pracovná frekvencia: 13,56 MHz

Podporované typy kariet: MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire

Rozhranie: SPI

Rozmery: 40x60 mm

Z uvedeného vidno, že som sa vyznamenal dvakrát. Po prvé, nepozeral som na napájacie napätie. A 3,3 V mimochodom znamená, že najjednoduchší spôsob použitia tejto dosky je s Arduino Uno, Mega a iné (alebo podobné dosky) vybavené regulátormi napätia a výstupom 3,3V. Našťastie maximálny prúdový odber nepresahuje možnosti platformy.

V opačnom prípade musíte použiť jeden napájací zdroj 3,3 V alebo dodatočný regulátor / stabilizátor / menič napätia.

Po druhé, rozhranie SPI vyžaduje na pripojenie 5 (!) vodičov. Tie. celkovo sa do čítačky zmestí slučka 7 vodičov a to je dosť plytvanie. Aby sme ušetrili peniaze, malo zmysel zamerať sa na I2C, ale kde som a kde je tento zmysel?!

Pripojenie
Chcel by som oddeliť spojenie na mäkké a tvrdé, ale všetko je tak úzko prepojené - a výsledkom je nie veľmi zaujímavý problém.

Jedným slovom, každý pozná RC522. Z nejakého dôvodu sa však nikto nečuduje, prečo sú v súbore readme pripojenom ku knižnici a na štítku v jednom z jeho príkladov úplne odlišné „kolíky“ na pripojenie čítačky.

Myslím, že to je jeden z dôvodov večné problémy s touto knižnicou. Druhým dôvodom je, že pripojenie pre Arduino Uno a Mega je robené na rôzne piny. Je to spôsobené zvláštnosťou platforiem.

Napokon tretím dôvodom je, že dva piny (SS a RST) umožňujú ľubovoľné pripojenie a sú nakonfigurované v kóde. Zároveň je štandardne v ukážkovom kóde vtesnaná konfigurácia pre Arduino Uno a ak máte Mega a pripojili ste agitáciu z readme alebo platne na začiatku príkladu, tak samozrejme bude chýbať.

Trik je ale v tom, že tretí dôvod je celkom zrejmý a viac-menej som ho obišiel okamžitým nastavením pinov, pretože som mal po ruke dosku Arduino Mega. Preto som bol, mimochodom, ušetrený druhého trápenia.

Ale ten prvý - zapojenie SPI pinov ma dosť potrápil. Tiež som si nevedel predstaviť, že ten, kto vytvoril úspešnú knižnicu, by mohol toľko pokaziť v banálnom spojení troch drôtov.

Inými slovami, pripojenie ani prvej, ani druhej možnosti uvedenej v popise knižnice nepomohlo. Najprv som si myslel, že mám „mŕtvu dosku“. Preto som sa aj napriek neskorému času dal dokopy a hrebeň som priletoval k druhému (bol som šetrný a kúpil som tri naraz). Výsledok dopadol rovnako aj napriek tomu, že som zapojenie opakovane kontroloval podľa „pinoutov“ na ruke.

Ani sa ma nepýtajte, prečo som nešiel na Arduino.cc, aby som zistil, ako je SPI zapojený na Mega. Myslím, že to bol nejaký druh rozmazania.

Ale vygooglil som a, čo v skratke (a nie ako ja) opísal nákup a jeho spojenie s knižnicou, ako som to pochopil, od čínskych súdruhov. Už mi padali ruky a v tomto stave som nemohol zaspať, tak som si dovolil ďalší experiment s čerstvo nájdeným pinoutom a knižnicou.

A obe dosky fungovali.

Aby som si vyčistil svedomie - stiahol som si príklad s "problémovou" knižnicou a ukázalo sa, že tiež funguje.

Toto sú karty, ktorými som potrápil čitateľa. Zľava doprava: karta zo súpravy, karta s písmenom N, lístok na metro MIFARE UltraLight, karta ruských železníc

A takto vyzerá výpis obsahu a vo všeobecnosti rozpoznávanie kariet pomocou knižnice RFID a jej príkladu DumpInfo

Zhrnutie trápenia: pinout zo spomínaného súdruha sa zhoduje a prekvapivo sa zhoduje s pinoutom v readme knižnice RFID. Vzhľadom na to posledné môžem predpokladať, že buď som v noci pomiešal špendlíky a všetky moje nešťastia sa začali týmto, alebo pôvodná čínska knižnica nejako prefíkane inicializuje čítačku, po ktorej začne fungovať.

Na záver správne pinout pre čínsku knižnicu a Mega, ku ktorej som sa pripojil:

Mega RC522
3,3 V VCC
GND GND
RESET RST

50 MISO
51 MOSI
52 SCK
53 NSS

A pre Uno (netestoval):

Uno RC522
3,3 V VCC
GND GND
5 RST

12 MISO
11 MOSI
13 SCK
10 NSS

Spolu s veľkou sestrou

.

.

Ako výsledok jednoduché testy, ktorý som napriek tomu absolvoval, tiež sa ukázalo, že čítačka bežne vypisuje (tu je taká slovná hračka) karty MIFARE 1K z tých, ktoré boli k nej pribalené.

Druhou vlastnosťou je, že táto vec adekvátne reaguje, ak je k nej prinesených niekoľko kariet súčasne. Ponúkol som dve karty, opäť z tých, ktoré boli zahrnuté. V tomto prípade príklad DumpInfo z knižnice RFID vypíše obsah oboch kariet v poradí. Tie. prvý - obsah jednej karty a po nej - druhá.

A dáma a choďte
Tak sme sa pripojili, obdivovali výpis obsahu pamäte kariet MIFARE 1K. Čo bude ďalej? A potom som bol trochu lenivý hrať sa so zásuvkou a spomenul som si, že karty metra, zdá sa, fungujú podľa rovnakého protokolu.

Išiel som, vzal si svoje, obliekol som si ho, obdivoval som jeho obsah. Ako som sľúbil: MIFARE UltraLight, 64 bajtov pamäte a nie je veľmi jasné, kde sú cesty, kde je doba platnosti, no, vôbec to nie je jasné.

Google na danú tému pomocou Arduina s týmito kartami nedal nič obzvlášť užitočné. Najčastejšie sa metro karty, ako sa ukázalo, používajú ako ultra lacné (t. j. bezplatné) NFC tagy vo všemožných domácich systémoch ako sú zámky, spúšťanie skriptov a iné, kde stačí poznať sériové číslo. preukazu na identifikáciu. ale hotové knižnice a z nejakého dôvodu som nenašiel riešenia na zobrazovanie informácií o výletoch: buď som chcel tak spať, alebo naozaj žiadne nie sú (pozri syndróm „Nepolapiteľný Joe“).

Ale našiel som nádherný a veľmi romantický text Alexandra „Dark Simpson“ Simonova pod nadpisom „“, ktorý bol očividne uverejnený v jednom z Hackerových vydaní. Napriek kurióznej povahe textu obsahuje veľa užitočná informácia o štruktúre ukladania údajov vrátane lístkov, ktoré ma zaujímajú.

Podstatná časť tiketu - číslo - sa kontroluje vizuálne

Na druhý deň som sa teda snažil prekonať svoju averziu voči HEX a išiel som to preskúmať. Tu je výpis lístkov, ktorý som získal pomocou knižnice RFID:

UID karty: 04 6F 25 62 04 33 82
Typ PICC: MIFARE Ultralight alebo Ultralight C

Strana 0 1 2 3
0 04 6F 25 C6
1 62 04 33 82
2 D7 48 F0 00
3 00 07 FF FC
4 45 DA 21 06
5 D0 E5 3D 00
6 1F E8 00 00
7 1F E8 00 00
8 1F 8F 5A 00
9 40 19 2E D2
10 19 91 59 7C
11 1F AB 91 C8
12 1F 8F 5A 00
13 40 19 2E D2
14 19 91 59 7C
15 1F AB 91 C8

Tu UID karty - jedinečný identifikátor karty (podstata sériového čísla) a zvyšok - 16 strán pamäte, z ktorých každá obsahuje 4 bajty. Spolu - 64 bajtov.

Pri čítaní textu o lístkoch na metro si všimol najužitočnejšie body:

1) Číslo lístka (ktoré je na ňom vytlačené) je pevne zakódované v 32 bitoch, počnúc bitom 21 na strane 4: 10 6D 0E 53;

2) Dátum vydania lístka v dňoch od 1. 1. 1992 - prvé dva bajty strany 8: 1F 8F;

3) Platnosť v dňoch - tretí bajt na strane 8: 5A.

4) Nakoniec, počet zostávajúcich ciest je druhý bajt na strane 9:19.

S týmto sa už dalo pracovať.

Trochu som sa pohrabal v príklade DumpInfo z knižnice RFID, v jej vlastnom kóde, aby som pochopil, aké funkcie sú zodpovedné za čo a ako môžu byť užitočné, na fórach Arduino, aby som videl implementáciu výpočtu dátumu (vo všeobecnosti , môžete si to pozrieť v akomkoľvek jazyku, ale pre mňa bolo jednoduchšie hľadať bližšie k cieľovej platforme).

V dôsledku toho sa zrodilo monštrum. To znamená, že skica je vystrihnutá z odrezkov, miestami je výsledok prispôsobený odpovedi, ale vo všeobecnosti všetko viac-menej zodpovedá realite. Na klaviristu, ktorý hrá tak dobre, ako vie, preto nie je čo strieľať. Tam, mimochodom, dokonca základné spracovanie existujú chyby: náčrt bude varovať nepodporovaná karta alebo nemožnosť čítania.

#include #include #define SS_PIN 53 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // objekt MFRC522 nepodpísaný long uidDec, uidDecTemp; // na zobrazenie čísla karty v desiatkovom formáte byte bCounter, readBit; nepodpísaný dlhý tiketNumber; void setup() ( Serial.begin(9600); SPI.begin(); // Inicializácia SPI mfrc522.PCD_Init(); // Inicializácia MFRC522 Serial.println("Čaká sa na kartu..."); ) void loop( ) ( // Hľadá sa nová karta if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Výber karty if (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // Vydanie sériového čísla karty Serial.print ("UID karty: "); pre (bajt i = 0; i< mfrc522.uid.size; i++) { // Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); // Serial.print(mfrc522.uid.uidByte[i], HEX); uidDecTemp=mfrc522.uid.uidByte[i]; uidDec=uidDec*256+uidDecTemp; } Serial.println(uidDec); Serial.println(); // Выдача типа карты byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); // запрос типа Serial.print("Card type: "); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // трансляция типа в читаемый вид if (piccType != MFRC522::PICC_TYPE_MIFARE_UL) { // если не билетная карта Serial.print("Not a valid card: "); // так и говорим Serial.println(piccType); // Halt PICC mfrc522.PICC_HaltA(); // остановка чипа return; } // сюда мы приедем, если чип правильный byte status; byte byteCount; byte buffer; // длина массива (16 байт + 2 байта контрольная сумма) byte pages={4, 8}; // страницы с данными byte pageByte; // счетчик байтов страницы byteCount = sizeof(buffer); byte bCount=0; for (byte i=0; i<2; i++) { // начинаем читать страницы status = mfrc522.MIFARE_Read(pages[i], buffer, &byteCount); if (status != MFRC522::STATUS_OK) { Serial.print("Read error: "); Serial.println(mfrc522.GetStatusCodeName(status));} else { if (pages[i] == 4) { bCounter = 0; // 32-битный счетчик для номера // биты 0-3 for (bCount=0; bCount<4; bCount++) { readBit = bitRead(buffer, (bCount+4)); setBitsForGood(readBit); } // биты 4 - 27 for (pageByte=5; pageByte >2; pageByte--) ( pre (bCount=0; bCount<8; bCount++) { readBit = bitRead(buffer, bCount); setBitsForGood(readBit); } } // биты 28-31 for (bCount=0; bCount<4; bCount++) { readBit = bitRead(buffer, bCount); setBitsForGood(readBit); } Serial.print("Ticket number: "); Serial.println(ticketNumber, DEC); } if (pages[i] == 8) { // читаем дату выдачи Serial.print("Issued: "); unsigned int issueDate = buffer * 256 + buffer; // количество дней с 01.01.1992 в десятичном формате, 256 - сдвиг на 8 бит printIssueDate(issueDate); Serial.print("Good for (days): "); // срок действия Serial.print(buffer, DEC); Serial.println(); Serial.print("Trip reminder: "); // количество оставшихся поездок Serial.print(buffer, DEC); Serial.println(); } } } // Halt PICC mfrc522.PICC_HaltA(); } void printIssueDate(unsigned int incoming) { boolean isLeap = true; // признак високосного года int days={0,31,59,90,120,151,181,212,243,273,304,334}; // последний по порядку день месяца для обычного года byte dayOfMonth, monthCounter; unsigned int yearCount; incoming = incoming+1; // подогнал под ответ, но возможно это как раз необходимая коррекция, потому что начало отсчета - 01.01.1992, а не 00.01.1992 for (yearCount = 1992; incoming >366; yearCount++) ( // spočítajte rok a počet dní od vystavenia lístka if ((yearCount % 4 == 0 && yearCount % 100 != 0) || yearCount % 400 == 0) ( prichádzajúce = prichádzajúce - 366; isLeap = true; ) else ( incoming = incoming - 365; isLeap = false; ) ) for (monthCounter = 0; incoming > days; monthCounter++) ( // získajte číslo mesiaca ) // spočítajte deň v mesiaci, ak (isLeap == true) ( ​​​​/ / ak ide o priestupný rok, ak (dni>31) ( // ak to nie je prvý mesiac, pridajte do posledný deň jednotky mesiaca dayOfMonth = prichádzajúce - (dni+ 1); ) else ( dayOfMonth = prichádzajúce - (dni); // ak je to prvý, nič nepridávajte, pretože zmena začína od februára ) ) else ( dayOfMonth = prichádzajúce - (dni); // ak nejde o priestupný rok ) Serial.print(dayOfMonth ); Serial.print("."); Serial.print(mesiacPocitadlo); Serial.print("."); Serial.print(rokPocet); Serial.println(); ) void setBitsForGood(byte daBeat) ( if (daBeat == 1) ( bitSet(ticketNumber, bCounter); bCounter=bCounter+1; ) else ( bitClear(ticketNumber, bCounter); bCounter=bCounter+1; ) )

Čo mi dáva tento náčrt? No najprv trochu tréningu mozgu - viete, musel som premýšľať, keď som sa zaoberal čítačkou a kódom. Po druhé, vždy môžem zistiť, koľko jázd zostáva a kedy sa minie karta. Vzhľadom na to, že mám NFC smartfónu nie, je to celkom pohodlné.

Výsledok monštra

Samozrejme, v tento prípad o vytvorení „kópie“ lístka ani nehovoríme. Je to exkluzívne informačná funkcia duplikovanie terminálu vo vestibule metra.

Vo všeobecnosti bolo po takomto úspechu možné prevziať druhú navrhovanú úlohu, ktorá by teoreticky mala byť prvou z dôvodu jednoduchej implementácie.

Takže zásuvka, ktorá sa zapne, keď je to potrebné. Karta (akákoľvek karta podporovaná čítačkou a vhodná na umiestnenie do cieľového zariadenia) sa tu používa výlučne ako priepustka, to znamená, že je zaujímavé iba jej sériové číslo.

Logika je jednoduchá: ak čitateľ vidí kartu s určitý počet, potom zapne zásuvku. Ak to nevidí, tak to vypne.

OUTLET MONSTER

#include #include #define SS_PIN 53 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Vytvorenie inštancie MFRC522. unsigned long uidDec, uidDecTemp; #include RCSwitch mySwitch = RCSwitch(); boolean switchOn = false; boolean cardRead = false; void setup() ( Serial.begin(9600); // Inicializácia sériovej komunikácie s počítačom SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card mySwitch.enableTransmit(8); Serial .println("Čaká sa na kartu..."); ) void loop() ( stav byte; byte byteCount; byte buffer; // dĺžka poľa (16 bajtov + 2 bajty kontrolný súčet) byteCount = sizeof(buffer); uidDec = 0 ; stav = mfrc522.PICC_RequestA(buffer, &byteCount); if (mfrc522.PICC_ReadCardSerial()) (pre (bajt i = 0; i< mfrc522.uid.size; i++) { uidDecTemp=mfrc522.uid.uidByte[i]; uidDec=uidDec*256+uidDecTemp; } if ((uidDec==2218415941) && (switchOn == false)) { mySwitch.sendTriState("00110000F000"); switchOn = true; // Serial.println("Switched On"); } mfrc522.PICC_ReadCardSerial(); } else { if (switchOn == true) { mySwitch.sendTriState("001100000000"); // Serial.println("Switched Off"); switchOn = false; } } }

Podobne pomocou mapy ako spúšťača môžete spustiť rôzne scenáre. domáca automatizácia. Napríklad vložte kartu elektronická kniha a položte čítačku na nočný stolík.

Keď položíme knihu na skrinku, dom si myslí, že sme sa rozhodli ísť do ríše Morpheus, a zhasne svetlá. A ak vezmeme knihu z obrubníka, potom sa predpokladá, že chceme čítať, a potom sa naopak rozsvieti podsvietenie tak, že elektronický atrament bolo vidieť, a nie rozbiť oči.

Takto funguje zásuvkové monštrum

Stručne povedané: lacné, jednoduché, celkom pohodlné a stimuluje predstavivosť.

Ps. Som si istý, že to dokážeš lepšie a že nerozumiem ničomu o Arduine a programovaní.

Všetky druhy odkazov
Páčila sa recenzia +67 +173

Akýkoľvek systém rádiofrekvenčnej identifikácie (RFID) pozostáva z čítačky (čítačky, čítačky alebo dotazovača) a transpondéra (známy ako RFID tag, niekedy sa používa aj termín RFID tag). V článku sa budeme zaoberať jednoduchým zariadením na čítanie RFID kľúčov, ktoré podporujú protokol EM4100 a pracujú na frekvencii 125 kHz. Tento typ RFID kľúče môžu mať formu prívesku na kľúče alebo kreditnej karty (obrázok 1).

Hlavnou zložkou čítačky je Mikrokontrolér AVR, ktorý načíta 10-miestne jedinečné identifikačné číslo kľúča a odovzdá ho ASCII kódovanie cez sériové rozhranie (UART) rýchlosťou 2400 bps do hostiteľského zariadenia. Inými slovami, čítačka je samostatný modul pripojený k hlavnému procesoru alebo mikrokontroléru systému (obrázok 2).

Schematický diagram čítačky RFID je znázornený na obrázku 3.

Obrázok 3

Zvážte hlavné črty schémy. Mikrokontrolér využíva vstavaný PWM modulátor na generovanie 125 kHz štvorcovej vlny na výstupe PB0. Ak je výstup PB0 log. 0 (zostupná hrana impulzu), tranzistor T1 je v uzavretom stave a na cievku L1 je cez rezistor R1 privedené napájacie napätie +5 V. Nábežná hrana na výstupe PB0 (log. 1) otvára tranzistor T1 a horný výstup cievky podľa zapojenia je spojený so zemou. V tomto momente je cievka zapojená paralelne s kondenzátorom C2 a tvorí LC generátor (oscilačný obvod). Tranzistor spína 125 000-krát za sekundu (125 kHz). Výsledkom je, že cievka generuje sínusový signál s frekvenciou 125 kHz (obrázok 4).

Čítací modul generuje elektromagnetické pole, ktorého energia sa využíva na napájanie RFID kľúča. Prenos energie medzi RFID kľúčom a čítačkou je založený na princípe fungovania bežného transformátora: primárne vinutie transformátora vytvára indukčné EMF vo všetkých ostatných vinutiach. V našom prípade je primárne vinutie cievka čítačky a sekundárne vinutie je cievka kľúča RFID. Prvky D1, C3 a R5 tvoria amplitúdovo modulovaný signálový demodulátor.

Výmena dát medzi kľúčom a čítačkou

Proces výmeny dát medzi RFID kľúčom a čítačkou je veľmi jednoduchý, no premyslený do najmenších detailov. Ak má RFID kľúč odoslať protokol. 0, potom pripojí k svojmu zdroju energie určitú „záťaž“, ktorá vyžaduje viac energie prenášanej čítačkou. To spôsobí mierny pokles napätia na strane čítačky; práve túto úroveň vníma čitateľ ako log. 0 (obrázok 5).

RFID kľúč v všeobecný prípad prenáša 64 bitov údajov v nasledujúcom poradí (obrázok 6):

  1. Prvých 9 bitov (vždy logická 1) sú štartovacie bity označujúce začiatok výmeny dát.
  2. 4 bity - nízka významné bity identifikačné číslo užívateľa (D00 - D03).
  3. 1 bit (P0) - paritný bit predchádzajúcich 4 bitov.
  4. 4 bity sú najdôležitejšie bity identifikačného čísla užívateľa (D04 - D07).
  5. 1 bit (P1) - paritný bit predchádzajúcich 4 bitov.
  6. 4 bity - prvá časť 32-bitového sériového čísla RFID kľúča (D08 - D11).
  7. 1 bit (P2) - paritný bit predchádzajúcich 4 bitov.
  8. Ďalej prenášané nasledujúce skupiny 4 bity sériového čísla kľúča, každý s paritným bitom.
  9. Potom sa po stĺpcoch prenesú 4 bity paritných bitov. Napríklad paritný bit PC0 pre bity D00, D04, D08, D12, D16, D20, D24, D28, D32 a D36.
  10. 1 stop bit.

Kontrolu integrity údajov vykonáva mikrokontrolér výpočtom paritných bitov pre každý riadok a stĺpec a porovnaním s údajmi prijatými z kľúča RFID.

Dizajn cievky.

Bezrámová tlmivka v čítačke s priemerom 120mm je navinutá drôtom s priemerom 0,5mm a má 58 závitov, no autor odporúča pri navíjaní pridať ďalšie 2 - 3 závity. Aby sa zlepšila účinnosť cievky a zvýšila sa vzdialenosť čítania kľúčových údajov RFID, je potrebné kalibrovať oscilačný obvod. Ak po pripojení osciloskopu k pripojovaciemu bodu R1 a L1 uvidíte na obrazovke zariadenia skreslené vrcholy (obrázok 7), znamená to potrebu kalibrovať cievku L1.

Kalibráciu je možné vykonať dvoma spôsobmi po privedení napájania do modulu.

  1. Pripojte sondy osciloskopu k spojovaciemu bodu R1 a L1 a zvýšením alebo znížením počtu závitov cievky L1 docielite elimináciu skreslenia signálu.
  2. Ak nemáte osciloskop, pomaly privádzajte RFID kľúč k cievke, kým sa kľúč nerozpozná, čo dokazuje pípnutie. Ak je kľúč určený zo vzdialenosti 2 cm, potom je potrebné pridať / ubrať niekoľko otáčok a potom znova skontrolovať vzdialenosť, z ktorej je možné s istotou prečítať kľúč. Pomocou kalibrácie autor schémy dosiahol isté čítanie RFID kľúča od 3 cm.

Pri programovaní mikrokontroléra je potrebné nastaviť nasledujúcu konfiguráciu Fuse-bit: low byte 0x7A a high byte 0x1F (mikrokontrolér je napájaný vstavaným generátorom hodín 9,6 MHz, frekvencia hodín 8 vypnuté). Programový kód zaberá 1024 bajtov v pamäti mikrokontroléra - využíva sa celá dostupná pamäť mikrokontroléra ATtiny13. Preto je v budúcnosti pri rozširovaní funkcionality čítačky lepšie použiť napríklad ďalší 8-pinový AVR mikrokontrolér.

K stiahnutiu:

Zdrojový kód programu mikrokontroléra (AVRStudio 6), firmvéru (.hex) a schému zapojenia -

Tento projekt bol vyrobený na žiadosť priateľa na inštaláciu na dvere do skladu. V budúcnosti bolo vyrobených niekoľko ďalších na žiadosť priateľov a známych. Dizajn sa ukázal ako jednoduchý a spoľahlivý. Tvorba toto zariadenie takto: prechádza iba cez RFID karty, ktoré boli predtým zapísané do pamäte zariadenia.

Hlavné vlastnosti kontroléra prístupu:

RFID karty formátu EMmarin 125kHz

Mikrokontrolér ATtiny13

Počet kariet / príveskov na kľúče - 10.
Tlačidlo "OPEN" je normálne otvorené, chránené proti prilepeniu.
Výstup ovládania zámku, vysoký prúd tranzistor s efektom poľa, režim blokovania prevádzky (na chvíľu sa zapne).

Jedlo - 12v.
Spotreba v pohotovostnom režime - 35 mA.
Počet prístupových kariet/kľúčov - 10 ks.
Dĺžka komunikácie s tlačidlom "OPEN" je 10 metrov.
Typ výstupu ovládania zámku - otvorený odber (výkonný tranzistor s efektom poľa, prúd až 2A).

Schematický diagram kontroléra kontroly prístupu na RFID kartách 125KHz (Em-Marin) pre 10 kariet (na mikrokontroléri ATtiny13):

Ak potrebujete ovládať elektromagnetický zámok, musíte nainštalovať výstupné relé s požadovanou skupinou kontaktov.

Vzhľad zostaveného validátora RFID:

Inštalácia Fuse-bitov v PonyProg:

Obsluha zariadenia, stiahnite si video nahrané autorom.
Jeden z čitateľov tiež zverejnil video zostaveného zariadenia:

Pokyny na programovanie

Prevádzkový režim - pri privedení 12V do regulátora LED bliká frekvenciou 1Hz.
Režim programovania - LED bliká 2Hz.
Keď stlačíte tlačidlo „OPEN“, ozve sa séria krátkych pípnutí počas otvárania zámku.

Zvukové signály

1 krátke pípnutie - karta alebo kľúčenka je uložená v pamäti ovládača.
2 krátke pípnutia - karta alebo kľúčenka je už uložená v pamäti ovládača.
5 krátkych pípnutí - výstup z programovacieho režimu.
1 dlhý signál- pamäť kľúčovej karty bola vymazaná z ovládača.
Nepretržitý krátke signály- pamäť kariet/kľúčov je plná, maximálne 10 ks. (vyžaduje vypnutie ovládača).

Nahrávanie MASTER CARD a času otvorenia zámku

1 - Vypnite ovládač.
2 - Stlačte tlačidlo "OPEN".
3 - Podržte tlačidlo a po 5 sekundách pripojte napájanie k ovládaču. ovládač "PÍPNE", LED bude blikať s frekvenciou 2 Hz.
4 - Uvoľnite tlačidlo.
5 - Prineste kartu alebo kľúčenku do zóny čítania, zaznie jedno pípnutie, Master karta alebo kľúčenka sa ZAZNAMENÁ, pričom sa zaznamená čas otvorenia zámku 1 s.

6 - Pridržanie karty alebo kľúčenky v oblasti čítania - čítame zvukové signály. Množstvo určuje požadovaný čas otvorenia zámku, prírastok 1 s, ale nie viac ako 32 s.
7 - Vypnite napájanie ovládača alebo ho prerušte na 30 sekúnd.

Vymazanie celej pamäte karty

1 - Prevádzkový režim.
2 - Stlačte tlačidlo "OPEN" a pri jeho držaní priložte MASTER kartu alebo kľúčenku k čítačke a podržte, po 5 sekundách sa ozve dlhé pípnutie - pamäť kariet / kľúčenky je vymazaná.
3 - Uvoľnite tlačidlo, odoberte kartu alebo prívesok na kľúče.

Po niekoľkých rokoch práce na RFID témach a vývoji rôznych čítačiek pre modely transpondérov populárnych štandardov ako Mifare, EMMARINE, TIRIS... som si často začal lámať hlavu nad takouto otázkou – doslova v r. Minulý rok rôzne druhy emulátorov pre značky populárnych protokolov a rôzne kopírky kľúčov/trinketov si získali veľkú popularitu.

Vzhľadom na veľký počet špeciálnych mikroobvodov populárnych RFID protokolov a lacných čítačiek dostupných na predaj, rozšírené používanie zariadení, ako sú digitálne osciloskopy, snímače a spektrálne analyzátory, sa tento problém stal pre mnohých vývojárov relevantnejším. Potom som sa rozhodol urobiť výmenný protokol pre jeden z projektov, ktorý sa líši od vyššie popísaných štandardov.

Tento nápad samozrejme nerieši globálnych problémov bezpečnosť nový systém a môžu byť analyzované inými vývojármi v prítomnosti vybavenia, ale ide o to, že to všetko sa nezhoduje s existujúce normy a všetky kúsky železa z kopírok vám nedovolia rýchlo skopírovať a znovu vytvoriť takýto algoritmus. Samozrejme, takýto systém tu nie je prezentovaný, nie ako úplné riešenie bezpečnostné otázky, ale ako skúsenosti s prispôsobením RFID pod uzavretý systém. dobré plus v otázke bezpečnosti, okrem iných podobných bezdrôtové systémy je samotná nízkofrekvenčná technológia RFID - neumožňuje čítať štítky veľká vzdialenosť. Pasívne štítky majú pomerne nízku spotrebu a potrebujú dostatok energie na ich napájanie. výkonný generátorčitateľa, vlastnosti šírenia rádiových vĺn na týchto frekvenciách obmedzujú aj limity fungovania tohto systému. Skutočný rozsah čítania transpondérov zriedka presahuje 20 cm pre štandardy 125 kHz, ako je EmMarine, povedzme štandard EM4001, pre iné protokoly ako Mifare (13,56 MHz) môže byť dlhší (1,5 metra pre iso15693). Môže byť dosiahnuté väčšia vzdialenosťčítanie pre nízkofrekvenčné čítačky, ak zväčšíte veľkosť cievky, respektíve napájacie napätie a výkon čítačky. Takéto systémy sú však objemné a vo všeobecnosti je ťažké ich urobiť prenosnými. Spravidla sú takéto systémy implementované iba stacionárne - povedzme pre autá.

Takže teraz vlastne k architektúre nášho RFID systému. Pre experimenty bol zvolený regulátor atmel atmega8. Na účely výroby transpondérov sa to zdá byť nepopierateľné prehnané. V tomto prípade však bola vyriešená primárna úloha vývoja nového rozhrania na hotovej ladiacej doske c atmega a následne portovanie tohto kódu na lacnejšie radiče typu tiny13.

Pre transpondér bol operačný algoritmus zostavený na báze režimu generovania PWM s použitím časovača T1 v režime CTC s prerušením a resetom zhodne s OCR1. Údaje o prenose transpondéra sa čítajú z EEPROM, keď je ovládač zapnutý. Celkovo transpondér prenesie 10 bajtov. Obsah EEPROM transpondéra je možné vidieť na postava 1. Prvý bajt 0xE7 je povinný nadpis balík, pretože jeho prítomnosť sa kontroluje predovšetkým pri analýze balíka čítačkou. Prvých 8 bajtov je obsah paketu transpondéra, posledné 2 bajty obsahujú CRC16 kontrolný súčet prvých ôsmich bajtov paketu. Napríklad v našom transpondéri boli zaznamenané nasledujúce údaje - paket 0xE7,0x05,0xE8,0x93,0x43,0x7F,0x20,0xFF a podľa toho kontrolný súčet 0xF5 0xA8. Ak chcete vytvoriť svoj vlastný jedinečný transpondér, musíte okrem prvého bajtu 0xE7 zapísať ďalších sedem bajtov do EEPROM a potom vypočítať kontrolný súčet pre prvých osem bajtov. Potom zapíšte dva bajty CRC16 do EEPROM na konci paketu. Prvý bajt zostane nezmenený - 0xE7. Keď je transpondér zapnutý, údaje týchto bajtov sa rozdelia na bity a zakódujú sa príslušnou dĺžkou impulzu v súlade s hodnotou registra OCR. Na prenos sa používajú 2 frekvencie 2 kHz a 5 kHz na prenos logickej „0“ a „1“. Dáta sú navyše oddelené synchronizačnými impulzmi – značkami začiatku paketov.

Obr.1

Obr.2

Diagram transpondéra je možné vidieť na obrázok 3. Frekvencia hlavného oscilátora je 8 MHz. Napájanie ovládača +5V. Môžete použiť ovládač mega8 označený „L“, z ktorého je možné napájať lítiová batéria 3v (parametre pre takýto čip + 2,7 .... + 3,5). Namiesto tohto tranzistora môžete použiť akýkoľvek iný tranzistor NPN s nízkym výkonom. Cievka transpondéra bola navinutá na tŕni s priemerom 50 mm s drôtom 0,22 mm a má 50 závitov. Na tento moment transpondér je aktivovaný - s externé napájanie. V ďalšej fáze sa plánuje výroba pasívnej verzie transpondéra, čo je celkom jednoduché - urobiť odpojenie napájania z tejto cievky, pridať diódy usmerňovacieho mostíka a stabilizátor.

Obr.3

Teraz si povedzme o čítacom obvode pre tento transpondér. Schéma bola upravená na základe predtým používanej čítačky kariet EMMARINE. Časť obvodu s generátorom na 74hc4060 nájdete na tejto fáze pokojne vymažte, pretože zatiaľ používame aktívny štítok.

Túto časť obvodu však budeme potrebovať v budúcnosti, keď budeme robiť pasívny štítok a budeme potrebovať napájanie z čítačky. Inak sa obvod výrazne nelíši od obvodu čítačky pre EMMARINE: pasívny špičkový detektor - filter - zosilňovač - komparátor. Obvod je maximálne jednoduchý a umožňuje čítať dáta transpondéra na vzdialenosť 10-12 cm s dobre vyladenými obrysmi.

Obvod môžete ešte viac zjednodušiť, ponechať len detektor a filter, dať na výstup jeden tranzistor, ktorý bude hrať úlohu komparátora, ale ja som to neurobil. Na výstupe dostaneme binárny obdĺžnikový signál v súlade so zakódovanými dĺžkami impulzov vysielaných transpondérom. Prípustné odchýlky menovitých hodnôt prvkov, pri ktorých je obvod prevádzkyschopný, sú 5-10%. Napájanie ovládača a operačného zosilňovača + 5V. Frekvencia hlavného oscilátora regulátora je 12 MHz. Výstup komparátora na LM358 je pripojený k externému prerušovaciemu kolíku ovládača INT0. Program kontroléra je nakonfigurovaný tak, aby volal prerušenie na vzostupnej hrane na externom prerušovacom kolíku INT0.

V obsluhe prerušenia skontroluje hodinové impulzy a potom skontroluje hlavičku paketu a zapíše obsah do vyrovnávacej pamäte radiča. Dáta načítaných paketov sa prenášajú cez rozhranie RS232 do PC. Pre konfiguráciu terminálu zadajte nasledujúce parametre: rýchlosť 57,6 Kb/s, 8 dátových bitov, 1 stop bit, žiadna parita. Pri príjme paketu radič vypočíta kontrolný súčet prijatých bajtov a odošle dáta do terminálu (paket a CRC). V prípade zhody kontrolné súčty vypočítaný ovládačom a prijatý v pakete, signál je vyvedený na kolík PORTB.0 (14) ovládača (LED1 v diagrame). Dá sa pripojiť k daný bod výškový reproduktor so vstavaným generátorom alebo LED cez odpor. Pri čítaní správneho kľúča regulátor deaktivuje externé prerušenia a urobí oneskorenie 1 s pred ďalším čítaním.

Existuje aj režim činnosti tejto čítačky ako základ RFID zámku. K tomu je potrebné zapísať celé bajty výpisu transpondéra do EEPROM radiča čítačky - 10 bajtov. Údaje sa zapisujú do EEPROM čítačky rovnakým spôsobom ako do EEPROM transpondéra. V tomto prípade sa pri čítaní ďalšieho transpondéra a jeho porovnávaní s transpondérom zaznamenaným v EEPROM čítačky vyšle signál na kolík PORTB.1 (15) ovládača (LED2 v schéme). V tomto bode môžete pripojiť LED cez odpor alebo výstupný kľúč (tranzistor) na relé výkonné zariadenie. Teraz máme RFID zámok na konkrétny kľúč a bežnú čítačku v jednom balení.

Poďme si teda zhrnúť priebežné výsledky. Pre túto čítačku sme vytvorili vlastnú čítačku a transpondér. Naše zariadenie sme chránili pred cudzie zariadenia pracuje s populárnymi RFID protokolmi. ďalši krok dôjde k výrobe pasívneho tagu pre nášho čitateľa ako oni známych výrobcov priemyselné transpondéry a prenos kódu zariadenia na lacnejšie modely ovládačov. V archíve prikladám k článku firmware pre transpondér a čítačku.