Pagbasa at pagsulat ng mga RFID tag. RC522 module para sa Arduino. RFID Card Reader RC522 sa Sambahayan

Ang aralin ngayon ay kung paano gumamit ng RFID reader na may Arduino upang lumikha ng isang simpleng locking system, sa simpleng salita- RFID lock.

Ang RFID (English Radio Frequency IDentification, radio frequency identification) ay isang paraan ng awtomatikong pagkilala sa mga bagay kung saan ang data na nakaimbak sa tinatawag na mga transponder, o RFID tag, ay binabasa o isinusulat gamit ang mga signal ng radyo. Ang anumang RFID system ay binubuo ng isang reading device (reader, reader o interrogator) at isang transponder (kilala rin bilang RFID tag, minsan ginagamit din ang terminong RFID tag).

Ang tutorial na ito ay gagamit ng RFID tag na may Arduino. Binabasa ng device ang natatanging identifier (UID) ng bawat RFID tag na inilalagay namin sa tabi ng reader at ipinapakita ito sa OLED display. Kung ang UID ng tag ay katumbas ng paunang natukoy na halaga na nakaimbak sa Arduino memory, makikita natin ang mensaheng "Naka-unlock" sa display. Kung ang natatanging ID ay hindi katumbas ng isang paunang natukoy na halaga, ang "Naka-unlock" na mensahe ay hindi lalabas - tingnan ang larawan sa ibaba.

Ang kastilyo ay sarado

Bukas ang lock

Mga bahagi na kailangan para malikha ang proyektong ito:

  • RFID reader RC522
  • OLED na display
  • Development board
  • Mga wire

Mga karagdagang detalye:

  • Baterya (powerbank)

Ang kabuuang halaga ng mga bahagi ng proyekto ay humigit-kumulang $15.

Hakbang 2: RFID Reader RC522

Ang bawat RFID tag ay naglalaman ng maliit na chip (puting card na ipinapakita sa larawan). Kung magpapasikat ka ng flashlight sa RFID card na ito, makikita mo ang maliit na chip at ang coil na nakapalibot dito. Ang chip na ito ay walang baterya upang makabuo ng kapangyarihan. Tumatanggap ito ng kapangyarihan mula sa reader nang wireless gamit ang malaking coil na ito. Posibleng basahin ang isang RFID card na tulad nito mula hanggang 20mm ang layo.

Ang parehong chip ay umiiral din sa RFID key fob tag.

Ang bawat RFID tag ay may natatanging numero, na nagpapakilala nito. Ito ang UID na ipinapakita sa OLED display. Maliban sa UID na ito, maaaring mag-imbak ng data ang bawat tag. Ang ganitong uri ng card ay maaaring mag-imbak ng hanggang 1 libong data. Kahanga-hanga, hindi ba? Ang tampok na ito ay hindi gagamitin ngayon. Ngayon, ang lahat ng interes ay ang pagtukoy ng isang partikular na card sa pamamagitan ng UID nito. Ang halaga ng RFID reader at ang dalawang RFID card na ito ay humigit-kumulang $4.

Hakbang 3: OLED Display

Gumagamit ang aralin ng 0.96" 128x64 I2C OLED monitor.

Ito ay napaka magandang display para gamitin sa Arduino. Ito OLED na display at ibig sabihin meron siya mababang pagkonsumo ng kuryente. Ang konsumo ng kuryente ng display na ito ay nasa paligid ng 10-20mA at depende ito sa bilang ng mga pixel.

Ang display ay may resolution na 128 by 64 pixels at maliit ang laki. Mayroong dalawang mga pagpipilian sa pagpapakita. Ang isa sa mga ito ay monochrome, at ang isa, tulad ng ginamit sa aralin, ay maaaring magpakita ng dalawang kulay: dilaw at asul. Itaas na bahagi Ang screen ay maaari lamang maging dilaw, at ang ibabang bahagi ay maaari lamang maging asul.

Ang OLED display na ito ay napakaliwanag at may mahusay at napakagandang library na binuo ng Adafruit para sa display na ito. Bilang karagdagan dito, ang display ay gumagamit ng isang I2C interface, kaya ang pagkonekta sa Arduino ay hindi kapani-paniwalang madali.

Kailangan mo lamang ikonekta ang dalawang wire maliban sa Vcc at GND. Kung bago ka sa Arduino at gustong gumamit ng mura at simpleng display sa iyong proyekto, magsimula dito.

Hakbang 4: Pagkonekta sa lahat ng mga bahagi

Gumagamit ang RFID (Radio Frequency Identification) ng mga electromagnetic field para awtomatikong kilalanin at subaybayan ang mga tag na nakakabit sa mga bagay. Ang mga tag ay naglalaman ng elektronikong nakaimbak na impormasyon. Ang mga passive tag ay nangongolekta ng enerhiya mula sa mga signal ng radyo mula sa isang malapit na RFID reader. Ang mga aktibong tag ay may lokal na pinagmumulan ng kuryente (tulad ng baterya) at maaaring gumana nang daan-daang metro mula sa mambabasa. Hindi tulad ng isang barcode, ang tag ay hindi kailangang nasa view ng device, kaya maaari itong i-embed sa object na sinusubaybayan. Ang RFID ay isa sa mga pamamaraan para sa awtomatikong pagkilala at pagkolekta ng data.

Aplikasyon

Ang mga RFID tag ay ginagamit sa maraming industriya. Halimbawa, ang isang RFID reader na nakakabit sa isang sasakyan sa panahon ng produksyon ay maaaring gamitin upang subaybayan ang pag-unlad sa isang linya ng pagpupulong. Maaaring masubaybayan ang mga may label na parmasyutiko sa pamamagitan ng mga bodega. Ang pagtatanim ng mga RFID microchip sa mga hayop ay nagpapahintulot sa mga hayop na makilala.

Dahil ang mga RFID tag ay maaaring ikabit sa pera, damit at ari-arian, o itanim sa mga hayop at tao, ang kakayahang magbasa personal na impormasyon mga tawag nang walang pahintulot ng user seryosong problema privacy. Ang mga panganib na ito ay humantong sa pagbuo ng mga karaniwang pagtutukoy na tumutugon sa mga isyu sa seguridad ng personal na data. Magagamit din ang mga tag sa mga tindahan upang mapabilis ang pag-checkout at maiwasan ang pagnanakaw.

Kwento

Noong 1945, naimbento ni Leon Theremin ang isang kagamitan sa pakikinig para sa Unyong Sobyet, na muling nag-transmit ng mga radio wave na may idinagdag na impormasyon sa audio. Naimpluwensyahan ng mga sound vibrations sa panahon ng vibration ang diaphragm, na bahagyang nagbago sa hugis ng resonator, na nagmo-modulate sa reflected radio frequency. Bagama't ang device na ito ay isang tago na eavesdropping device sa halip na isang ID tag, ito ay itinuturing na isang pasimula sa USB RFID reader dahil ito ay na-activate ng mga audio wave mula sa panlabas na pinagmulan. Ang mga transponder ay ginagamit pa rin ng karamihan sa mga sasakyang panghimpapawid. Dati, ang katulad na teknolohiya, tulad ng mga RFID tag reader, ay regular na ginagamit ng Allies at Germany noong World War II upang makilala ang sasakyang panghimpapawid.

Ang aparato ni Mario Cardullo, na na-patent noong Enero 23, 1973, ay ang unang tunay na hinalinhan ng modernong RFID, dahil ito ay isang passive radio receiver na may memorya. Ang orihinal na device ay passive, na pinapagana ng isang signal ng botohan. Ipinakita ito noong 1971 sa Lungsod ng New York at iba pang potensyal na gumagamit at binubuo ng isang transponder na may 16-bit na memorya para magamit bilang bayad na aparato. Sinasaklaw ng pangunahing patent ni Cardullo ang paggamit ng mga frequency ng radyo, tunog at liwanag bilang media ng paghahatid.

Lugar ng paggamit

Ang orihinal na plano sa negosyo na ipinakita sa mga mamumuhunan noong 1969 ay nagpakita ng mga sumusunod na aplikasyon: RFID reader:

  • paggamit sa transportasyon (pagkilala sa sasakyan, awtomatikong sistema pagbabayad, elektronikong plaka ng lisensya, elektronikong manifest, pagruruta sasakyan, pagmamanman ng kahusayan ng sasakyan);
  • pagbabangko (electronic checkbook, electronic credit card);
  • tauhan, awtomatikong gate, pagsubaybay); industriyang medikal (pagkakakilanlan, kasaysayan ng pasyente).

Isang maagang pagpapakita ng nasasalamin na kapangyarihan (modulated backscatter) ng mga RFID tag, parehong passive at semi-passive, ay isinagawa nina Stephen Depp, Alfred Koelle at Robert Fryman sa Los Alamos National Laboratory noong 1973. Portable na sistema tumakbo sa 915 MHz at gumamit ng 12-bit na mga tag. Ang pamamaraang ito ay ginagamit ng karamihan sa mga modernong UHFID at microwave RFID readers. SA modernong buhay Ang mga naturang device ay may malaking pangangailangan.

Pagtutukoy

Gumagamit ang RFID ng mga tag na nakakabit sa mga makikilalang bagay. Kapag gumagawa ng sarili mong RFID reader, tandaan na ang mga two-way radio transmitter-receiver, na tinatawag na interrogator o reader, ay nagpapadala ng signal sa tag at basahin ang tugon nito. Ang mga RFID tag ay maaaring passive, active o passive. Ang aktibong tag ay may built-in na baterya at pana-panahong nagpapadala ng ID signal nito. Ang battery passive (BAP) ay may maliit na baterya na nakasakay at naisaaktibo sa pamamagitan ng pagkakaroon ng isang RFID reader. Ang passive tag ay mas mura at mas maliit dahil wala itong baterya. Sa halip, ang tag ay gumagamit ng radio wave na ipinadala ng mambabasa. Gayunpaman, para gumana ang isang passive tag, dapat itong iluminado sa antas ng kapangyarihan na humigit-kumulang isang libong beses na mas malakas kaysa sa pagpapadala ng signal. Nakakaapekto ito sa interference at irradiation.

RFID transponder emulator circuit ng EM-Marine standard (EM4100).
Ang mga contactless card ng pamantayang Em-Marine ay ang pinakasikat na paraan ng pagkakakilanlan sa ating bansa at ginagamit upang makilala ang mga user sa access control at management system (ACS).
Ang pangalawa, hindi gaanong sikat, lugar ng aplikasyon para sa mga Em-Marine card ay ang kanilang paggamit sa mga system lohikal na pag-access kapag pinahihintulutan ang mga user sa pamamagitan ng card ID number sa operating system mga aplikasyon sa kompyuter at trabaho, atbp.

Em-Marine card at keychain.
Kanya-kanya mga katulad na sistema ang mga pagkakakilanlan ay napakakaraniwan at maaaring maging interesado para sa pagpapatupad sariling sistema pagkakakilanlan at automation. Dahil ang exchange protocol at hardware ng naturang mga low-frequency system ay mas madali para sa karamihan na independyenteng ipatupad ang kanilang sariling mga device amateur na disenyo ng radyo Ang mga paksa ng RFID ay nakatuon sa mga low-frequency system.

Ang dalas ng pagpapatakbo ng mga Em-Marine card ay 125 KHz. Upang basahin ang mga ito, ginagamit ang mga espesyal na contactless card reader (RFID readers). Ang pakikipag-ugnayan ng identifier sa naturang mambabasa ay isinasagawa nang malayuan.
Mga pagpipilian panlabas na pagpapatupad Mayroong isang malaking bilang ng mga identifier na ito: Ang mga Em-Marine pass ay ginawa sa anyo ng mga manipis at makapal na card, mga pulseras para sa mga parke ng tubig, iba't ibang mga key fob, mga tag ng radyo para sa pagsasama sa mga produkto ng RFID.
Para sa EM4100 transponder standard, ang card ay naglalaman ng 64 bits ng data, at ang mga card ay karaniwang hindi maaaring isulat muli. Para sa kadalian ng pagpaparehistro ng card, ang code na nakasulat sa card ay nadoble na may selyo sa isang gilid ng card. Ang pag-encode ng data na ipinadala ng transponder ay Manchester encoding. Sa kasong ito, ang mga panahon ng signal na ipinadala ng transponder ay multiple ng 125 kHz - ang dalas ng signal ng transponder reader. Ang mga transponder mismo ay ipinatupad nang walang panlabas na kapangyarihan (passive tag), ang kapangyarihan ay ibinibigay ng LC circuit (coil at capacitor) kapag ang tag ay pumasok sa saklaw ng field ng card reader. Ang transponder ay na-clock din ng signal ng mambabasa - 125 kHz. Samakatuwid, ang mga parameter ng nagresultang signal sa Manchester encoding ay multiple ng 125 KHz signal.

Scheme ng pakikipag-ugnayan sa pagitan ng transponder at RFID reader.
Para sa mas kumpletong pag-unawa, isaalang-alang ang istruktura ng RFID transponder package ng EMMarine EM4100 na format. Ang isang paglalarawan ay ibinigay (sa Ingles, kinuha mula sa mga anotasyon) ng transponder packet format.
“…….EM4100 compatible RFID transponders ay may 64 bits ng Read Only memory. Nangangahulugan ito na ang impormasyon ay maaaring basahin mula sa Tag ngunit walang data na maaaring baguhin, o bagong data na nakasulat sa card kapag ang card ay na-program na gamit ang paunang data. Ang format ng data ay tulad ng ipinapakita dito.
1 1 1 1 1 1 1 1 1 9 bit header bits, lahat ng 1"
8 bit na numero ng bersyon D00 D01 D02 D03 P0
o customer ID.
D04 D05 D06 D07 P1
D08 D09 D10 D11 P2 Bawat pangkat ng 4 bits
Ang D12 D13 D14 D15 P3 ay sinusundan ng Even 32 Data Bits
D16 D17 D18 D19 P4 parity bit
D20 D21 D22 D23 P5
D24 D25 D26 D27 P6
D28 D29 D30 D31 P7
D32 D33 D34 D35 P8
D36 D37 D38 D39 P9
4 na column Parity bits PC0 PC1 PC2 PC3 S0 1 stop bit (0)
Ang unang 9 bits ay logic 1“.
Alinsunod dito, mayroon kaming 9 na panimulang bit ng packet (laging lohikal na 1), 11 grupo ng 4 na bits ng data na may 1 parity bit bawat hilera, 4 parity bit bawat hanay sa dulo ng packet, na nagtatapos sa bit (palaging 0).
Halimbawa, kumuha tayo ng transponder na may data number 06001259E3.
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 00
0 6 0 0 1 2 5 9 E 3

Ang data byte 0x06 ay itinuturing na numero ng bersyon. Sa mga EM-Marine card na nakita ko, ang mga decimal na halaga na tumutugma sa huling 3 byte ng packet ay nakatatak. Sa anumang kaso, para sa pagpapatupad kakailanganin naming kopyahin ang lahat ng 64 bits ng packet ayon sa paglalarawang ito.
Ngayon tingnan natin ang paglalarawan ng transponder data modulation. Kinuha ang data mula sa AN680 annotation. Sa figure gumawa ako ng mga pulang marka tungkol sa mga diagram na interesado sa amin.

Ngayon ay ilalarawan namin nang mas detalyado ang mga diagram na kailangan namin. Ang signal ng CLK clock ay ang signal ng RFID reader, tulad ng nabanggit kanina. Ang data na naka-encode ng NRZ ay dapat ihanda ng transponder ayon sa naitalang data ng packet (64 bits). Ito ay makikita na ang pagpapatupad ng NRZ encoding gamit ang isang transponder packet ay elementarya at nangangailangan ng kaunting mapagkukunan. Sa totoo lang, na-parse namin ang packet sa isang bit stream at binabago ang mga lohikal na halaga ng signal sa pamamagitan ng 0 at 1 sa data at iyon na. Upang makuha ang resultang signal, ginagawa namin ang XOR sa pamamagitan ng program kasalukuyang estado signal sa NRZ at CLK na format ng signal ng orasan ng mambabasa. Bilang resulta, nakukuha namin ang Manchester coding ng nagresultang signal. Hindi ko ilalarawan ang Manchester coding nang mas detalyado - ang data ay makikita sa magkakahiwalay na anotasyon. Para sa higit pa detalyadong paglalarawan Ang mga pamamaraan ng modulasyon ay matatagpuan sa “Modulation Methods H.R. Walker Data Systems 05/01/04(na-review 4/18/10)", eksakto kong pinag-aralan ang mga halimbawang ito. Ang pangunahing bagay ay na may kaunting gastos mga mapagkukunan, maaari nating ipatupad ang isang transponder sa format na EM-Marine. Halimbawa, maaari mong kunin ang AVR controller ng tiny45 series (maaari mo ring gawin ito sa tiny13). Sinubukan namin ito sa tiny45 controller dahil ito ang available para sa mga eksperimento.
Ngayon isipin natin functional diagram transponder batay sa modelong Proteus para sa tiny45 controller.

Functional na diagram ng transponder sa Proteus.

Ito ang hitsura ng signal na nabuo ng transponder. Ang simula ng packet ay minarkahan ng pula.
Ipinapakita ng diagram na ang controller pin T0 (PORTB.2) ay ginagamit upang magbigay ng signal ng orasan para sa 8-bit na timer na TIMER0. Ang programa ay nagpapatupad ng coincidence interrupt sa timer0 timer (TIM0_COMPA). Ang orasan ay nakatakda mula sa panlabas na signal para sa timer na ito. Para sa amin, ang signal ng orasan ay 125KHz mula sa card reader. Tinatanggal ng diagram ang lahat ng bagay na may kinalaman sa power supply sa controller at mga circuit ng orasan mula sa reader. SA totoong scheme Ang controller mismo ay na-clock mula sa isang 4 MHz quartz na naka-install sa pagitan ng 2nd at 3rd legs ng controller. Maaari ka ring magdagdag ng 22 pF blocking capacitors para sa quartz sa mga controller legs na ito.
Ang mga setting ng Proteus simulation para sa controller ay tinukoy bilang mga sumusunod:

Kapag nagprograma ng tiny45 controller, nagtatakda kami ng mga piyus (mga configuration bit) sa parehong paraan tulad ng ipinapakita sa Figure.2. Ang controller ay na-clock gamit ang 4 MHz quartz.
Tungkol sa pagpapatupad panlabas na circuit Tingnan natin ang controller bindings tanong nito higit pang mga detalye. Para sa mga halimbawa, kinuha namin ang mga materyales ng RFID Handbook (E2E_chapter03-rfid-handbook), na naglalarawan sa mga pangunahing prinsipyo ng pagbuo ng mga RFID system. Ang dokumento mismo ay naka-attach sa artikulo. Tingnan natin ang isang halimbawa ng passive transponder circuit (bahagi ng circuit sa pahina 46). Para sa pag-unawa, gumawa ako ng mga tala sa diagram na kulay pula.
Makikita na mayroon tayong receiving circuit sa L1C1, na nagsisilbing kapangyarihan sa transponder circuit at orasan ito. Lahat tungkol sa counter-divider IC1(4024), mga elemento ng lohika Maaari naming ligtas na itapon ang IC3 (7400) - hindi namin ito kakailanganin. Ang divider para sa timer ay ipinatupad gamit ang mga setting ng timer nang walang mga panlabas na divider - ang lohikal na bahagi ay ipinatupad din sa software. Gayunpaman halimbawang ito nagbibigay-daan sa iyo upang mas lubos na maunawaan ang pagpapatakbo ng passive transponder circuit. Pinakamataas na distansya ng pagbabasa para sa transponder ng format na ito ay 200cm. Sa katotohanan, karamihan sa mga scheme ay gumagana sa mga distansyang 2-10cm. Ang mga parameter ng LC capacitance at inductance circuit ay napili nang tumpak hangga't maaari para sa resonant frequency na 125 KHz. Halimbawa, gumamit kami ng circuit na may 1nF capacitance at 60-turn coil sa isang mandrel na may diameter na 50 mm gamit ang PEV 0.2 wire. Maaari mong kalkulahin ang nais na contour sa espesyal na programa(maaari mong kalkulahin ang tabas para sa isang rectangular coil, naka-print na coil, atbp.). Ang pangunahing bagay ay ang piliin ang eksaktong mga halaga para sa dalas ng 125 KHz, kung hindi man ang distansya sa pagbabasa at sensitivity ng circuit ay lalala nang malaki. Sa hindi magandang na-configure na mga circuit, gagana lamang ito kapag ang transponder coil ay inilapit sa mambabasa. Gumagana ang device sa prinsipyo ng Full Duplex (FDX) - patuloy na bumubuo ng transponder data kapag pinapagana ang circuit. Ang circuit ay na-clock mula sa mambabasa at ang data ay patuloy na ipinapadala. Ang ilang mga transponder circuit ay gumagamit ng HDX (Half Duplex) na operating scheme - ang reader ay naglalabas sa pulse mode, ang transponder ay nagpapadala ng data sa mga pagitan ng mga charging pulse na ito mula sa reader. Nalalapat ito, halimbawa, sa mga transponder ng TIRIS mula sa Texas Instruments.

Passive transponder circuit batay sa circuit mula sa RFID Handbook.


Isinasaalang-alang ang bahaging iyon ng circuit na hindi namin kailangan batay sa orihinal na circuit, nakuha namin ang controller wiring diagram sa form na ito.



Ano ang palagay mo sa artikulong ito?

Ang mga benepisyo ng mga electronic lock ay hindi maaaring maliitin, bilang isang halimbawa nito, ang paggamit ng mga electronic lock ay nagbibigay-daan sa amin upang palayain ang ating sarili mula sa isang buong grupo ng mga mabibigat na susi.

Ang pinakamahalagang bagay para sa karaniwang gumagamit ay kadalian ng paggamit at pagiging maaasahan. elektronikong lock. Ang mga kinakailangang ito ay natutugunan ng mga device batay sa RFID (mula sa English Radio Frequency IDentification - radio frequency identification) - contactless radio frequency identification.

Ang ganitong sistema ng pagkakakilanlan ay binubuo ng nakatigil na receiver at isang naisusuot na transmitter (transponder).

Iniharap sa artikulong ito RFID lock gumagana sa katulad na paraan. Ang pagkakakilanlan ay batay sa pagbabasa ng 40-bit na serial number ng Natatanging card. Kondisyon sa pagtatrabaho nagsenyas tunog signal. Ang lock ay maaaring gumana sa dalawang pangunahing mga mode: pagbabasa at pagrehistro ng Mga Natatanging card sa memorya ng microcontroller. May kabuuang 4 na card ang maaaring maimbak sa memorya.

Maikling katangian RFID lock;

Paglalarawan ng RFID lock operation

Ang buong circuit ay maaaring nahahati sa dalawang bahagi: digital at analog. Digital na circuit ay binubuo ng isang microcontroller na kumokontrol sa buong device. Gumagamit ang circuit ng PIC12F683 microcontroller sa isang DIP8 package.

Ang panloob na RC generator ng microcontroller ay nagbibigay-daan sa iyo upang makakuha ng dalas ng orasan na may programmable frequency range na 37 kHz ... 8 MHz.

Ang isang hardware na PWM signal generator na nasa controller ay ginagamit upang makabuo hugis-parihaba na pulso na may kadalisayan ng 125 kHz, na, pagkatapos ng amplification, ay ipinadala sa reader antenna.

Ang timer TMR2 ay ginagamit para sa pagbuo, na awtomatikong na-reset gamit ang isang digital comparator pagkatapos bilangin ang naaangkop na bilang ng mga pulso. Bilang karagdagan, ang estado ng output ng GP2 ay awtomatikong nababaligtad.

Kaya, maaari tayong bumuo ng mga pulso ng anumang dalas ng pagpuno. Ang prosesong ito ay hindi kinasasangkutan ng gitnang processor, na nagpapahintulot dito na magsagawa ng iba pang mga operasyon.

Ang waveform na nakuha sa ganitong paraan ay ipinadala sa input ng isang amplifier na binubuo ng mga transistors VT1 at VT2, at pagkatapos ay sa reader antenna coil, na ginagamit upang walang kontak na kapangyarihan ang circuit na matatagpuan sa Natatanging card.

Para sa mga natatanging card na ginamit, ang rate ng paglilipat ng data ay humigit-kumulang 2 kbit/s (125000/64=1953bps). Ang natatanging code ng bawat awtorisadong card ay naka-imbak sa hindi pabagu-bagong memorya ng EEPROM ng microcontroller.

Ang operating status ng lock ay sinenyasan gamit ang buzzer na konektado sa pin GP4. Ang relay ay kinokontrol mula sa output GP5 sa pamamagitan ng transistor VT3.

Dalawang jumper ang ginagamit upang itakda ang operating mode ng microcontroller. Inilalagay ng Jumper JP2 ang controller sa programming mode para sa mga bagong card, at binago ng JP1 ang paraan ng pagkontrol sa relay sa pagitan ng switching mode at pansamantalang pag-activate.

Ang analog na bahagi ng circuit ay nagsisilbi upang palakasin ang signal na sapilitan sa coil at i-convert ito sa digital form. Ang pangunahing elemento dito ay ang doble amplifier ng pagpapatakbo LM358. Ang coil ay konektado sa CON1 connector.

Ang signal na sapilitan dito ay napupunta sa anode ng diode VD1. Maliban sa kapaki-pakinabang na signal, mayroon ding carrier wave (125 kHz) at random interference signal, kaya isang bandpass filter ang idinagdag sa circuit, na naglilimita sa bandwidth sa frequency na humigit-kumulang 2 kHz.

Pagkatapos ng lahat ng pagproseso, ang kaukulang digital signal ay ipinapadala sa GP3 input ng microcontroller.

Ang antenna ay binubuo ng 40 pagliko ng enamel winding wire na may diameter na 0.1...0.3 m
m, sugat sa isang pansamantalang mandrel na may diameter na 40...60 mm. Pagkatapos nito, ang likid ay dapat na balot ng insulating tape para sa proteksyon.

Upang paganahin ang buong circuit, ginagamit ang isang uri ng stabilizer. Pinoprotektahan ng VD4 diode ang stabilizer mula sa pinsala kung ang kapangyarihan ay konektado sa maling polarity.

Ang supply boltahe ay ibinibigay sa CON2 pin. Ang halaga nito ay dapat na nasa hanay na 9...12 V. Ang isang mas mataas na boltahe ay hindi makapinsala sa stabilizer, ngunit dahil dito maaari itong uminit nang malaki.

Ang isang wastong naka-assemble na circuit ay handa na para sa agarang paggamit, at maaari mong simulan ang pamamaraan para sa pag-record ng mga awtorisadong card.

Para mag-record ng mga card, dapat mong isara ang jumper JP2 nang patayin ang power at i-on ang power. Kukumpirmahin ng microcontroller ang programming mode na may dalawang segundong beep at maghihintay para sa apat na RFID card na magkakasunod na lapitan.

Ang wastong na-decode na serial number ng card ay sinenyasan ng double beep, pagkatapos nito ay iimbak ito sa memorya ng controller. Pagkatapos ng programming ang huling card, ang programming procedure ay nagtatapos, isang mahabang beep ang maririnig, at ang microcontroller ay napupunta sa normal na mode ng operasyon.

Ang jumper ay dapat buksan upang kung ang kapangyarihan ay patayin, ang processor ay hindi ibabalik sa programming mode. Kung ang bilang ng mga awtorisadong card ay mas mababa sa apat, pagkatapos ay ang isang card ay dapat ilapat nang maraming beses (sa kabuuan, dapat mayroong 4 na pagrerehistro).

Sa panahon ng operasyon, ang paglapit ng card sa antenna ay sinenyasan ng double buzzer at pagbukas sa relay. Kung hindi naka-install ang jumper JP1, ang bawat diskarte ng card ay magiging sanhi ng pagbabago sa estado ng relay sa kabaligtaran. Kung ito ay naka-install, ang relay ay i-on sa loob ng 10 segundo, pagkatapos nito ay babalik ito sa orihinal nitong estado.

(62.6 Kb, mga download: 1,051)

Ngayon ay magsasalita ako tungkol sa RFID module RC522, batay sa MFRC522 chip. Power supply 3.3V, hanay ng detection hanggang 6cm. Idinisenyo para sa pagbabasa at pagsulat ng mga RFID tag na may dalas na 13.56 MHz. Dalas sa sa kasong ito ay napakahalaga, dahil ang mga RFID tag ay umiiral sa tatlong hanay ng dalas:


  • Mga marka ng hanay ng LF (125-134 kHz)

  • Mga tag ng HF band (13.56 MHz)

  • Mga UHF band tag (860-960 MHz)

Gumagana ang partikular na module na ito sa mga HF band tag, partikular sa MIFARE protocol.

Upang magtrabaho kasama ang module na maaari mong gamitin karaniwang aklatan Kasama ang RFID Arduino IDE, gayunpaman, may isa pang aklatan na partikular na isinulat para sa modyul na ito - MFRC522 (1 MB). Ang parehong mga aklatan ay medyo maginhawa, ngunit ang MFRC522 ay may higit pang mga espesyal na pag-andar na nagpapahintulot sa iyo na bawasan ang panghuling code ng programa hangga't maaari.

Koneksyon

Ang ilang mga tao ay makakaranas ng problema - ang pangalan ng mga pin sa karamihan ng mga aralin at gabay ay maaaring hindi tumugma sa pinout sa iyong module. Kung ang mga sketch ay nagpapahiwatig ng SS pin, ngunit ang iyong module ay wala nito, malamang na ito ay minarkahan bilang SDA. Sa ibaba ay magbibigay ako ng talahanayan ng koneksyon ng module para sa pinakakaraniwang mga board.

MFRC522 Arduino Uno Arduino Mega Arduino Nano v3

Arduino Leonardo/Micro

Arduino Pro Micro
RST 9 5 D9 I-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.3V 3.3V 3.3V Stabilizer 3.3V Stabilizer 3.3V Stabilizer 3.3V
GND GND GND GND GND GND

Ang SS(SDA) at RST control pin ay tinukoy sa sketch, kaya kung ang iyong board ay iba sa gagamitin ko sa aking mga halimbawa, at gumagamit ako ng UNO R3, ipahiwatig ang mga pin mula sa talahanayan sa simula ng sketch :


#define SS_PIN 10 #define RST_PIN 9

Halimbawa Blg. 1: Pagbasa ng card number

Tingnan natin ang isang halimbawa mula sa RFID library - cardRead. Hindi ito nagpapakita ng data mula sa card, ngunit ang numero lamang nito, na kadalasang sapat para sa maraming gawain.


#include #include #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); // Ang data tungkol sa numero ng card ay naka-imbak sa 5 variable, tatandaan namin ang mga ito upang suriin kung nabasa na namin ang naturang 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()) ( // Ihambing ang numero ng card sa numero ng nakaraang card kung (rfid.serNum != serNum0 && rfid.serNum != serNum1 && rfid.serNum != serNum2 && rfid.serNum != serNum3 && rfid.serNum != serNum4) ( / * Kung bago ang card, basahin ang */ Serial.println("Nahanap ang card"); serNum0 = 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); // Lumikha ng MFRC522 instance void setup() ( Serial.begin(9600); // Initialize ang serial port monitor habang (!Serial); // Walang gawin hanggang sa ito ay bukas (para sa Arduino sa ATMEGA32U4 chip) SPI.begin( ); // I-initialize ang SPI bus mfrc522.PCD_Init(); RFID module ShowReaderDetails(); // Print data tungkol sa MFRC522 module Serial.println(F("Scan PICC to see UID, type, and data blocks...")); ) void loop() ( // Hinahanap bagong mapa if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // Pumili ng isa sa mga card kung (! mfrc522.PICC_ReadCardSerial()) ( return; ) // Output data mula sa card mfrc522.PICC_DumpToSerial(&(mfrc522.uid) ); ) void ShowReaderDetails() ( // Kunin ang module version number byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("MFRC522 Software Version: 0x")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F("= v1.0")); else if (v == 0x92) Serial.print(F("= v2.0")); ")); Serial.println(""); // Kapag nakatanggap kami ng 0x00 o 0xFF, masira ang paghahatid ng data kung ((v == 0x00) || (v == 0xFF)) ( Serial.println( F(" BABALA: Kabiguan ng komunikasyon, maayos bang konektado ang MFRC522?"));

Kung ang nakaraang halimbawa ay gumana nang walang mga error, hindi rin ito dapat maging problema. Bagaman, ang metro pass, na nagbigay ng numero ng card nang walang anumang mga problema sa nakaraang halimbawa, ay naging isang hindi matukoy na uri ng data sa isang ito, at ang module ay walang mabasa maliban sa numero ng card.

Bilang resulta, pagkatapos basahin ang data mula sa card, nakukuha namin ang uri nito, identifier, at data mula sa 16 na sektor ng memorya. Dapat tandaan na ang MIFARE 1K standard card ay binubuo ng 16 na sektor, ang bawat sektor ay binubuo ng 4 na bloke, at ang bawat bloke ay naglalaman ng 16 na byte ng data.


Halimbawa Blg. 3: Pagsusulat ng bagong identifier sa card

Sa halimbawang ito, titingnan natin ang pagpapalit ng card identifier (UID). Mahalagang malaman na hindi lahat ng card ay sumusuporta sa pagpapalit ng ID. Ang card ay maaaring muling isulat, ngunit nangangahulugan lamang na ang data ay maaaring isulat muli. Sa kasamaang palad, ang mga card na nasa aking mga kamay ay hindi sumusuporta sa muling pagsulat ng UID, ngunit ibibigay ko ang sketch code dito kung sakali.


#include #include /* Magtakda ng bagong UID dito */ #define NEW_UID (0xDE, 0xAD, 0xBE, 0xEF) #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); Serial.println(F("Babala: inu-overwrite ng halimbawang ito ang UID ng iyong UID changeable card, gamitin nang may pag-iingat!")); para sa (byte 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); }

Halimbawa Blg. 4: Pagsusulat ng data sa isang card

Narito na rin ang matagal na nating napupuntahan - ang pagre-record ng data sa card. Ang pinakamatamis na bahagi ng pagtatrabaho sa module ay ang kakayahang gumawa ng isang kopya ng isang umiiral na card, magdagdag o magbago ng isang bagay, ito ay mas kawili-wili kaysa sa simpleng pagbabasa nito.

Baguhin natin ang isa sa mga bloke ng data sa mapa:


#include #include #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; void setup() ( Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); // Ihanda ang susi // gamitin ang key na FFFFFFFFFFFFh na siyang pamantayan para sa mga blangkong card para sa (byte 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); } }

At bilang resulta, nakakakuha kami ng card na may binagong data block:


Ngayon, natutong magbasa at magsulat ng mga bloke ng data ng card, maaari kang mag-eksperimento sa mga tag na malamang na mayroon ka - mga pass, mga travel card pampublikong sasakyan. Subukang magbasa at magsulat ng data mula sa mga card na ito, hindi masakit ang ilang duplicate na pass, tama ba?)

Iyon lang, mag-subscribe at sundin ang mga publikasyon. Sa susunod sasabihin ko sa iyo at ipapakita ko sa iyo kung paano gumamit ng pamantayan pagpapakita ng karakter 1602 magdagdag ng mga custom na character, mahalagang magdagdag ng mga graphics sa display.