Kazalo:

AVR/Arduino RFID bralnik s kodo UART v C: 4 koraki
AVR/Arduino RFID bralnik s kodo UART v C: 4 koraki

Video: AVR/Arduino RFID bralnik s kodo UART v C: 4 koraki

Video: AVR/Arduino RFID bralnik s kodo UART v C: 4 koraki
Video: Учебное пособие по Arduino для начинающих 16 - Учебное пособие по RFID RC522 с Arduino Uno 2024, November
Anonim
AVR/Arduino RFID bralnik s kodo UART v C
AVR/Arduino RFID bralnik s kodo UART v C

RFID je norost, ki jo najdemo povsod - od sistemov inventarja do sistemov identifikacijskih oznak. Če ste že kdaj bili v veleblagovnici in hodili skozi tiste stvari, ki so videti na detektorju kovin, na vstopnih/izstopnih točkah, ste videli RFID. Dobre informacije o nastavitvi RFID lahko najdete na več mestih, ta pouk pa se osredotoča na namestitev bralnika Parallax RFID (Serial TTL) na AVR, s poudarkom na kodi C, ki je potrebna za branje serijskega vhoda. Koda je v jeziku C in ne uporablja nobenih zunanjih knjižnic. Pravzaprav govori 2400 baud neposredno brez uporabe UART s sinhronizacijo s hitrostjo prenosa bralnika RFID in branjem digitalnega zatiča, s katerim je povezan. Navdušen? Jaz tudi.

1. korak: Pridobite blago

Pridobite blago
Pridobite blago

Potrebovali boste naslednji seznam delov:

  • Bralnik RFID (Parallax #28140 39,99 USD)
  • Oznaka RFID (Parallax #32397 0,99 USD)
  • Klon AVR ali Arduino (če uporabljate standardni AVR, boste potrebovali tudi max232, 5 x 1uF kondenzatorje in priključek DE9)
  • Tlačna plošča brez spajkanja

Neobvezno

  • 4 -mestna glava
  • Žica

(in max232 itd. za sporočanje informacij o oznakah) Namesto pošiljanja podatkov o oznakah prek RS232 lahko povežete tudi svoj najljubši LCD zaslon.

2. korak: Povežite dele

Povežite dele
Povežite dele
Povežite dele
Povežite dele
Povežite dele
Povežite dele

Strojna stran stvari je precej enostavna. Namesto, da bi svoj bralnik RFID vstavil neposredno v svojo ploščo, sem se odločil za hiter kabel, da bi lahko bralnik RFID malo bolje premikal. V ta namen sem samo odrezal štiri položaje z glave vtičnice, ki sem jo ležala, in spajkal na tri žice. Električni trak je zaključil getski priključek. Čitalnik RFID ima 4 povezave:

  • Vcc
  • Omogoči
  • OUT
  • Gnd

Kot ste verjetno uganili, priključite Vcc na +5V in Gnd na ozemljitev. Ker bralnik RFID porabi toliko energije, lahko udarite z vtičem ENABLE, da ga izklopite in vklopite v različnih časovnih presledkih. Enostavno sem se odločil, da bo tako ostalo. Ker je obrnjen, ga povlecite NIZKO, da ga aktivirate. Druga možnost je, da ga priključite na ozemljitev. Priključil sem ga na PIND3, da bi mi omogočil, da omogočim/onemogočim, če se odločim. OUT pin je mesto, kjer bralnik pošlje svoje serijske podatke, potem ko prebere oznako. Priključil sem ga na PIND2. Opomba, v vesolju Parallax rdeča pomeni pojdi. To pomeni, da zelena LED pomeni, da je enota neaktivna in miruje, rdeča pa pomeni, da je enota aktivna. * skomigni z rameni* Pojdi na sliko.

3. korak: Napišite kodo

Napišite kodo
Napišite kodo

Če želite prebrati podatke iz bralnika RFID, morate vedeti, kdaj je bila podana oznaka, izvlecite podatke iz serijskih vrat in jih nato nekam pošljite.

Oblika podatkov bralnika RFID

Bralnik RFID Parallax pošilja podatke s fiksno ledeno hitrostjo 2400 baud. Oznaka RFID je 10 bajtov. Da bi omogočili odkrivanje/popravljanje napak, ker je bralnik lahko izključen iz naključnega hrupa, je 10-bajtni RFID omejen z začetnim in končnim nadzornikom. Začetni stražar je podajanje vrstic (0x0A), nadzorni stražar pa vrnitev nosilca (0x0D). Izgleda takole:

[Začni Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Ustavi Sentinel]To so trije primarni koraki.

Vedite, kdaj je bila oznaka poslana

Na AVR -ju sem uporabil Prekinitev spremembe pin, ki vdelano programsko opremo obvesti, da je prišlo do spremembe na nadzorovanem pin -ju. Konfiguriranje AVR za to je preprosto in zahteva nastavitev zastavice, povedo MCU, kateri pin želite spremljati, in nastavitev globalnega prekinitvenega bita. Konfigurirajte PCINT

BSET (PCICR, PCIE2); // kontrolni register prekinitve pinov pcie2 BSET (PCMSK2, PCINT18); // omogočimo prekinitev menjave pin za PCINT18 (PD2) BSET (SREG, 7); // Nastavi SREG I-bitZapišite svojo rutino prekinitvenih storitev. Če želite, da je vaš ISR kratek, tako da v mojem vektorju prekinitev preberem celoten bajt, bit za bit, in shranim bajt v globalno nestanovitno niz znakov. Ob vsakem prekinitvi naredim naslednje:

  • Preverite, ali sem na začetku
  • Časovnik centrirajte na srednji impulz pri 2400 baud (hitrost čitalnika RFID)
  • Preskočite začetni bit in se ustavite do sredine naslednjega bita
  • Vsak bit preberite v nepodpisano celo število
  • Ko imam 8 bitov, vnesite bajt v niz znakov
  • Ko zberem 12 bajtov, sporočite MCU -ju, da je oznaka prebrana za odkrivanje napak.

Kodo SoftSerial sem spremenil od Mikala Harta, ki je spremenil kodo Davida Mellisa za eksperimentalno določene zamude v serijskih rutinah.

Razčlenite izhod RS232

Rutina PCINT vsebuje kodo za branje izhoda RS232 iz bralnika RFID. Ko sem dobil 12 bajtov (10-bajtni RFID plus nadzorniki), nastavim bDataReady na 1 in glavni zanki pustim, da podatke obdela in prikaže.

// to je upravljavec prekinitev ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Začetni bit gre nizko donosno; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centriraj začetni bit za (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // malo preskoči, bratec… if (BCHK (PIND, RFID_IN)) BSET (bit, x); drugače BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // preskoči zaustavitveni bit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Prikažite svojo oznako

V glavnem () med zanko for (ever) preverim, ali je nastavljen bDataReady in signalizira, da je poslana celotna struktura RFID. Nato preverim, ali gre za veljavno oznako (tj. Začetni in končni znak sta 0x0A oziroma 0x0D), in če je tako, pošljem svojo povezavo RS232.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Začetni bajt:"); USART_tx_S (itoa (oznaka RFID [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nUstavi bajt:"); USART_tx_S (itoa (oznaka RFID [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID oznaka:"); za (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (oznaka RFID [x], ibuff, 16)); če (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

4. korak: Koda in slovo

Ta stran vsebuje zip datoteko z ustrezno kodo. Napisano je bilo v AVR Studio 4.16. Če uporabljate programerjevo beležnico, mrk ali vi (ali kaj drugega), boste morali kopirati zaupanja vreden datoteko Makefile v imenik in te datoteke dodati v izvorno vrstico. Upoštevajte tudi, da čas za razdelek serijskega branja temelji na 16MHz MCU. Če tečete na drugačni taktni frekvenci, boste morali eksperimentalno določiti uglašene zamude, da se osredotočijo na impulze hitrosti prenosa. Upam, da vam je to navodilo na nek način pomagalo. Če imate kakršne koli predloge, kako bi ga lahko izboljšali, mi ne oklevajte in mi sporočite!

Priporočena: