Përmbajtje:

AVR/Arduino RFID Reader Me Kodin UART në C: 4 Hapa
AVR/Arduino RFID Reader Me Kodin UART në C: 4 Hapa

Video: AVR/Arduino RFID Reader Me Kodin UART në C: 4 Hapa

Video: AVR/Arduino RFID Reader Me Kodin UART në C: 4 Hapa
Video: Arduino Camera Shield Unboxing & Test с примером проекта 2024, Nëntor
Anonim
AVR/Arduino RFID Reader Me Kodin UART në C
AVR/Arduino RFID Reader Me Kodin UART në C

RFID është mani, e gjetur kudo - nga sistemet e inventarit në sistemet e ID -ve të simboleve. Nëse keni qenë ndonjëherë në një dyqan dhe keni ecur nëpër ato gjëra që duken me detektor metali në pikat hyrëse/dalëse, atëherë keni parë RFID. Ka disa vende për të gjetur informacion të mirë mbi vendosjen e RFID, dhe ky udhëzues fokusohet në instalimin e lexuesit Parallax RFID (Serial TTL) në një AVR, me theks në kodin C të nevojshëm për të lexuar hyrjen serike. Kodi është në C dhe nuk përdor asnjë bibliotekë të jashtme. Në fakt, ai flet 2400 baud direkt pa përdorimin e një UART duke sinkronizuar me shkallën e baudit të lexuesit RFID dhe duke lexuar pinin dixhital me të cilin është i lidhur. I emocionuar? Edhe une gjithashtu.

Hapi 1: Merrni Mallrat

Merrni Mallrat
Merrni Mallrat

Ju do të keni nevojë për listën e mëposhtme të pjesëve:

  • RFID Reader (Parallax #28140 39.99 $)
  • Etiketa RFID (Parallax #32397 $ 0.99)
  • Kloni AVR ose Arduino (nëse përdorni një AVR të stokut, do t'ju duhet gjithashtu një kondensator max232, 5 x 1uF dhe një lidhës DE9)
  • Dërrasë buke pa saldim

Opsionale

  • Kokë me 4 pozicione
  • Tela

(dhe max232 etj për komunikimin e informacionit të etiketës) Ju gjithashtu mund të lidhni ekranin tuaj të preferuar LCD në vend të dërgimit të të dhënave të etiketës përmes RS232.

Hapi 2: Lidhni Pjesët

Lidhni Pjesët
Lidhni Pjesët
Lidhni Pjesët
Lidhni Pjesët
Lidhni Pjesët
Lidhni Pjesët

Ana harduerike e gjërave është mjaft e lehtë. Në vend që ta fus lexuesin tim RFID direkt në tabelën time të bukës, unë zgjodha të bëj një kabllo të shpejtë në mënyrë që ta lëvizja lexuesin RFID pak më mirë. Për këtë, sapo ndërpreva 4 pozicione nga një shirit me kokë me një prizë femre për të cilën isha shtrirë dhe ngjitur në tre tela. Kaseta elektrike përfundoi lidhësin geto. Lexuesi RFID ka 4 lidhje:

  • Vcc
  • ÇAFTOJ
  • JASHT
  • Gnd

Siç e keni menduar ndoshta, lidhni Vcc me +5V dhe Gnd me tokën. Për shkak se lexuesi RFID konsumon kaq shumë energji, mund ta godisni pinin ENABLE për ta fikur dhe ndezur në intervale të ndryshme. Unë thjesht zgjodha ta vazhdoj atë. Për shkak se është i përmbysur, e tërheq atë LOW për ta aktivizuar. Përndryshe, mund ta lidhni me tokën. Unë e lidha atë me PIND3 për të më dhënë opsionet e aktivizimit/çaktivizimit nëse vendosa. PIN OUT është vendi ku lexuesi dërgon të dhënat e tij serike pasi lexon një etiketë. E lidha me PIND2. Shënim, në Universin Parallax, e kuqe do të thotë të shkosh. Kjo do të thotë, një LED i gjelbër do të thotë që njësia është joaktive dhe e papunë, ndërsa një LED e kuqe do të thotë se njësia është aktive. * ngre supet* Shko figura.

Hapi 3: Shkruani Kodin

Shkruani Kodin
Shkruani Kodin

Për të lexuar të dhënat nga lexuesi RFID, duhet të dini kur është paraqitur një etiketë, hiqni të dhënat nga porta serike, pastaj dërgojini diku.

Formati i të dhënave të lexuesit RFID

Lexuesi Parallax RFID dërgon të dhëna me një ritëm fiks, akullnajor prej 2400 baud. Një etiketë RFID është 10 bajt. Për të lejuar zbulimin/korrigjimin e gabimit, meqenëse lexuesi mund të fiket nga zhurma e rastësishme, RFID 10-bajtësh kufizohet nga një roje nisëse dhe ndaluese. Sentineli fillestar është ushqimi i linjës (0x0A) dhe rojtari ndalesë është kthimi i karrocës (0x0D). Duket kështu:

[Filloni Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Ndalo Sentinelin]Këto janë tre hapat kryesorë.

Mësoni kur është paraqitur një etiketë

Kam përdorur një ndërrim ndërrimi pin në AVR që njofton firmware -in se ka ndodhur një ndryshim në një kunj të monitoruar. Konfigurimi i AVR për këtë është i lehtë dhe kërkon vendosjen e flamurit, tregimin e MCU se cilën pin doni të monitoroni dhe vendosjen e bitit të ndërprerjes globale. Konfiguro PCINT

BSET (PCICR, PCIE2); // regjistri i ndryshimit të kontrollit të ndërprerjes së kontrollit pcie2 BSET (PCMSK2, PCINT18); // aktivizoni ndërprerjen e ndryshimit të kunjave për PCINT18 (PD2) BSET (SREG, 7); // Vendosni SREG I-bitShkruani rutinën tuaj të shërbimit të ndërprerjes Ju dëshironi ta mbani ISR -në tuaj të shkurtër kështu që në vektorin tim të ndërprerjes unë lexoj të gjithë bajtin, pak nga pak, dhe e ruaj bajtin në një grup të karakterit global të paqëndrueshëm. Unë bëj sa vijon në çdo ndërprerje:

  • Kontrolloni për të siguruar që jam në fillim
  • Përqendroni kohën në pulsin e mesëm në 2400 baud (shpejtësia e lexuesit RFID)
  • Kaloni pjesën e fillimit dhe ndaloni në mes të bitit tjetër
  • Lexoni secilën pjesë në një numër të plotë të panënshkruar
  • Kur të kem 8 bit, vendosni bajtin në një grup karakterësh
  • Kur kam mbledhur 12 bajtë, njoftoni MCU -në se etiketa është lexuar për zbulimin e gabimit.

Ndryshova kodin SoftSerial nga Mikal Hart i cili modifikoi kodin nga David Mellis për vonesat e përcaktuara në mënyrë eksperimentale në rutinat serike.

Analizo daljen RS232

Rutina PCINT përmban kodin për leximin e daljes RS232 nga lexuesi RFID. Kur kam marrë 12 bajt (RFID 10-bajtësh plus rojtarë) e vendos bDataReady në 1 dhe e lejoj lakin kryesor të përpunojë të dhënat dhe t'i shfaqë ato.

// ky është mbajtësi i ndërprerjesISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Biti i fillimit shkon me kthim të ulët; uint8_t bit = 0; Vonesa e Sintonizuar (CENTER_DELAY); // Qendra në bitin e fillimit për (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // kalo pak, vëlla… nëse (BCHK (PIND, RFID_IN)) BSET (bit, x); tjetër BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // kapërce bitin e ndalimit RFID_tag [rxIdx] = bit; ++ rxIdx; nëse (rxIdx == 12) bDataReady = 1;}

Shfaq etiketën tënde

Në lakin kryesor (), gjatë lakut (përherë), kontrolloj për të parë nëse bDataReady është vendosur, duke sinjalizuar se e gjithë struktura RFID është dërguar. Pastaj kontrolloj për të parë nëse është një etiketë e vlefshme (p.sh. karakteret e fillimit dhe ndalimit janë përkatësisht 0x0A dhe 0x0D), dhe nëse po, e dërgoj nga lidhja ime RS232.

për (;;) {nëse (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Fillo bajt:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nNdalo bajtin:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Etiketa:"); për (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); nëse (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Hapi 4: Kodi dhe Lamtumira

Kjo faqe përmban një skedar zip me kodin përkatës. Wasshtë shkruar në AVR Studio 4.16. Nëse përdorni fletore, eklips ose vi (ose diçka tjetër) të programuesit, do t'ju duhet të kopjoni një Makefile të besuar në drejtori dhe t'i shtoni këto skedarë në vijën burimore. Gjithashtu vini re, koha për seksionin e leximit serik bazohet në një 16 MHz MCU. Nëse vraponi me një frekuencë të ndryshme të orës, do t'ju duhet të përcaktoni në mënyrë eksperimentale vonesat e akorduara për t'u përqëndruar në pulsionet e normës së baudit. Shpresoj se kjo e udhëzueshme ju ka ndihmuar në një farë mënyre. Nëse keni ndonjë sugjerim se si mund të përmirësohet, mos hezitoni të më tregoni!

Recommended: