Turinys:

AVR/Arduino RFID skaitytuvas su UART kodu C: 4 žingsniai
AVR/Arduino RFID skaitytuvas su UART kodu C: 4 žingsniai

Video: AVR/Arduino RFID skaitytuvas su UART kodu C: 4 žingsniai

Video: AVR/Arduino RFID skaitytuvas su UART kodu C: 4 žingsniai
Video: DIY RFID scanner by arduino 🪪🪪 2024, Lapkritis
Anonim
AVR/Arduino RFID skaitytuvas su UART kodu C
AVR/Arduino RFID skaitytuvas su UART kodu C

RFID yra pamišimas, sutinkamas visur - nuo atsargų sistemų iki ženklelių ID sistemų. Jei kada nors buvote universalinėje parduotuvėje ir vaikščiojote pro tuos metalo detektoriaus išvaizdos daiktus įėjimo/išėjimo taškuose, tada matėte RFID. Yra daug vietų, kuriose galima rasti geros informacijos apie RFID nustatymą, ir šioje instrukcijoje daugiausia dėmesio skiriama „Parallax RFID“skaitytuvo (serijinio TTL) įdiegimui į AVR, pabrėžiant C kodą, reikalingą nuosekliajai įėjimui nuskaityti. Kodas yra C ir nenaudoja jokių išorinių bibliotekų. Tiesą sakant, jis kalba 2400 baudų tiesiogiai, nenaudodamas UART, sinchronizuodamas su RFID skaitytuvo duomenų perdavimo sparta ir skaitydamas skaitmeninį kaištį, prie kurio jis prijungtas. Susijaudinęs? Aš taip pat.

1 žingsnis: įsigykite prekes

Gaukite prekes
Gaukite prekes

Jums reikės šio dalių sąrašo:

  • RFID skaitytuvas („Parallax“#28140 39,99 USD)
  • RFID žyma („Parallax“#32397 0,99 USD)
  • AVR arba „Arduino“klonas (jei naudojate atsarginį AVR, jums taip pat reikės max232, 5 x 1uF kondensatorių ir DE9 jungties)
  • Duonos lenta be litavimo

Neprivaloma

  • 4 pozicijų antraštė
  • Viela

(ir max232 ir tt, kad būtų galima perduoti informaciją apie žymą) Taip pat galite prijungti savo mėgstamą LCD ekraną, o ne siųsti žymų duomenis per RS232.

2 veiksmas: prijunkite dalis

Prijunkite dalis
Prijunkite dalis
Prijunkite dalis
Prijunkite dalis
Prijunkite dalis
Prijunkite dalis

Techninė įranga yra gana paprasta. Užuot įkišęs savo RFID skaitytuvą tiesiai į duonos lentą, nusprendžiau pagaminti greitą kabelį, kad galėčiau šiek tiek geriau perkelti RFID skaitytuvą. Dėl to aš ką tik nutraukiau 4 pozicijas iš moteriškos lizdo antraštės, kurią gulėjau ir lituojau ant trijų laidų. Elektros juosta užbaigė geto jungtį. RFID skaitytuvas turi 4 jungtis:

  • Vcc
  • ĮJUNGTI
  • OUT
  • Gnd

Kaip jūs tikriausiai atspėjote, prijunkite „Vcc“prie +5 V, o „Gnd“- prie žemės. Kadangi RFID skaitytuvas sunaudoja tiek daug energijos, galite spustelėti ĮJUNGTI kaištį, kad jį išjungtumėte ir įjungtumėte įvairiais intervalais. Aš tiesiog pasirinkau tai tęsti. Kadangi jis yra apverstas, patraukite jį žemai, kad suaktyvintumėte. Arba galite jį prijungti prie žemės. Prijungiau jį prie PIND3, kad suteikčiau galimybę įjungti/išjungti, jei nusprendžiau. OUT kaištis yra vieta, kur skaitytojas siunčia savo serijos duomenis perskaitęs žymą. Prijungiau jį prie PIND2. Atkreipkite dėmesį, kad paralakso visatoje raudona reiškia eiti. Tai reiškia, kad žalias šviesos diodas reiškia, kad įrenginys yra neaktyvus ir neveikia, o raudonas šviesos diodas reiškia, kad įrenginys yra aktyvus. * gūžteli pečiais* Eik figūra.

3 žingsnis: parašykite kodą

Parašykite kodą
Parašykite kodą

Norėdami nuskaityti duomenis iš RFID skaitytuvo, turite žinoti, kada buvo pateikta žyma, ištraukti duomenis iš nuoseklaus prievado ir tada nusiųsti juos kažkur.

RFID skaitytuvo duomenų formatas

„Parallax“RFID skaitytuvas siunčia duomenis fiksuotu 2400 baudų ledyniniu greičiu. RFID žyma yra 10 baitų. Kad būtų galima aptikti/ištaisyti klaidas, kadangi skaitytuvas gali būti atjungtas nuo atsitiktinio triukšmo, 10 baitų RFID riboja pradžios ir pabaigos kontrolinis signalas. Pradinis sargybinis yra linijos tiekimas (0x0A), o galinis - vežimėlio grįžimas (0x0D). Tai atrodo taip:

[Pradėti „Sentinel“| 1 baitas | 2 baitas | 3 baitas | 4 baitas | 5 baitas | 6 baitas | 7 baitas | 8 baitas | 9 baitas | 10 baitas | Stop Sentinel]Tai yra trys pagrindiniai žingsniai.

Žinokite, kada buvo pateikta žyma

AVR naudojau kaiščio keitimo pertrauką, kuri praneša programinei įrangai, kad stebimas kaištis pasikeitė. Tam lengvai sukonfigūruoti AVR ir reikia nustatyti vėliavą, pasakyti MCU, kurį kaištį norite stebėti, ir nustatyti visuotinį pertraukos bitą. Konfigūruokite PCINT

BSET (PCICR, PCIE2); // smeigtuko keitimo pertraukimo valdymo registras pcie2 BSET (PCMSK2, PCINT18); // įgalinti PIN keitimo pertraukimą PCINT18 (PD2) BSET (SREG, 7); // Nustatykite SREG I bitąNorite, kad jūsų ISR būtų trumpas, todėl mano pertraukimo vektoriuje aš po truputį perskaitau visą baitą ir saugoju baitą visuotiniame nepastoviame simbolių masyve. Kiekvieno pertraukimo metu atlieku šiuos veiksmus:

  • Patikrinkite, ar pradedu veikti
  • Centruokite laiką į vidurinį impulsą 2400 baudų dažniu (RFID skaitytuvo greitis)
  • Praleiskite pradžios bitą ir pristabdykite iki kito bitų vidurio
  • Skaitykite kiekvieną bitą į nepasirašytą sveikąjį skaičių
  • Kai turėsiu 8 bitus, įdėkite baitą į simbolių masyvą
  • Kai surinksiu 12 baitų, praneškite MKU, kad žyma buvo nuskaityta, kad būtų aptikta klaida.

Pakeičiau „Mikal Hart“„SoftSerial“kodą, kuris pakeitė Davido Melliso kodą dėl eksperimentiškai nustatytų nuoseklių veiksmų vėlavimų.

Analizuoti RS232 išvestį

PCINT rutinoje yra kodas RS232 išvesties skaitymui iš RFID skaitytuvo. Kai gaunu 12 baitų (10 baitų RFID plius sargybiniai), nustatau „bDataReady“į 1 ir leidžiame pagrindinei kilpa apdoroti duomenis ir juos rodyti.

// tai pertraukimo tvarkytojasISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Pradinis bitas grįžta mažai; uint8_t bitas = 0; „TunedDelay“(CENTER_DELAY); // Pradžios bito centras (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // praleisk šiek tiek, broli… if (BCHK (PIND, RFID_IN)) BSET (bit, x); else BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // praleisti stop bitą RFID_tag [rxIdx] = bit; ++ rxIdx; jei (rxIdx == 12) bDataReady = 1;}

Parodykite savo žymą

Pagrindinėje () ciklo metu (visam laikui) tikrinu, ar nenustatytas „bDataReady“, signalizuojantis, kad išsiųsta visa RFID struktūra. Tada patikrinu, ar tai tinkama žyma (ty pradžios ir pabaigos simboliai yra atitinkamai 0x0A ir 0x0D), ir jei taip, išsiunčiu RS232 ryšį.

(;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Pradėti baitas:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuffas [0] = 0; ibuffas [1] = 0; USART_tx_S ("\ nSustabdyti baitą:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); for (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); if (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

4 žingsnis: kodas ir atsisveikinimas

Šiame puslapyje yra ZIP failas su atitinkamu kodu. Tai buvo parašyta AVR studijoje 4.16. Jei naudojate programuotojo užrašų knygelę, užtemimą ar vi (ar ką nors kitą), turėsite nukopijuoti patikimą „Makefile“į katalogą ir pridėti šiuos failus prie šaltinio eilutės. Taip pat atkreipkite dėmesį, kad serijinio skaitymo sekcijos laikas yra pagrįstas 16MHz MCU. Jei naudojate kitą laikrodžio dažnį, turėsite eksperimentiškai nustatyti suderintus vėlavimus, nukreiptus į baudos spartos impulsus. Tikiuosi, kad šis nurodymas jums kažkaip padėjo. Jei turite pasiūlymų, kaip tai patobulinti, nedvejodami praneškite man!

Rekomenduojamas: