Mündəricat:

AVR/Arduino RFID Reader, UART Kodu ilə C: 4 addımda
AVR/Arduino RFID Reader, UART Kodu ilə C: 4 addımda

Video: AVR/Arduino RFID Reader, UART Kodu ilə C: 4 addımda

Video: AVR/Arduino RFID Reader, UART Kodu ilə C: 4 addımda
Video: Arduino Camera Shield Unboxing & Test с примером проекта 2024, Noyabr
Anonim
C -də UART Kodu olan AVR/Arduino RFID Oxucu
C -də UART Kodu olan AVR/Arduino RFID Oxucu

RFID, inventar sistemlərindən nişan şəxsiyyət sistemlərinə qədər hər yerdə tapılan çılğınlıqdır. Heç bir mağazada olmusunuzsa və giriş/çıxış nöqtələrində metal detektora bənzər şeylərdən keçmisinizsə, onda RFID gördünüz. RFID qurmaqla bağlı yaxşı məlumatlar tapa biləcəyiniz bir neçə yer var və bu təlimat, Paralaks RFID oxuyucusunu (Serial TTL) bir AVR -də quraşdırmağa, seriya girişini oxumaq üçün lazım olan C kodunu vurğulamağa yönəlmişdir. Kod C -dədir və heç bir xarici kitabxana istifadə etmir. Əslində, RFID oxucusunun ötürmə sürətinə sinxronizasiya edərək və bağlı olduğu rəqəmsal pin oxuyaraq UART istifadə etmədən birbaşa 2400 baud danışır. Həyəcanlı? Mən də həmçinin.

Addım 1: Malları alın

Malları alın
Malları alın

Aşağıdakı hissələrin siyahısına ehtiyacınız olacaq:

  • RFID Oxuyucusu (Paralaks #28140 $ 39.99)
  • RFID etiketi (Paralaks #32397 $ 0.99)
  • AVR və ya Arduino klonu (stok AVR istifadə edirsinizsə, max232, 5 x 1uF kondansatörlərə və DE9 bağlayıcıya da ehtiyacınız olacaq)
  • Lehimsiz çörək taxtası

İsteğe bağlı

  • 4 mövqe başlığı
  • Tel

(və etiket məlumatlarının ötürülməsi üçün max232 və s.) RS232 vasitəsilə etiket məlumatları göndərmək əvəzinə ən sevdiyiniz LCD ekranı da bağlaya bilərsiniz.

Addım 2: Parçaları birləşdirin

Parçaları birləşdirin
Parçaları birləşdirin
Parçaları birləşdirin
Parçaları birləşdirin
Parçaları birləşdirin
Parçaları birləşdirin

İşin hardware tərəfi olduqca asandır. RFID oxuyucumu birbaşa çörək taxtamın içinə yığmaq əvəzinə, RFID oxuyucusunu bir az daha yaxşı hərəkət etdirmək üçün sürətli bir kabel çəkməyi seçdim. Bunun üçün yatdığım və üç teldə lehim etdiyim bir qadın yuva başlıq zolağından 4 mövqeyi kəsdim. Elektrik lenti getto bağlayıcısını tamamladı. RFID oxuyucunun 4 əlaqəsi var:

  • Vcc
  • Aktiv et
  • Çıxdı
  • Gnd

Yəqin təxmin etdiyiniz kimi, Vcc -i +5V -ə və Gnd -i yerə bağlayın. RFID oxuyucusu çox enerji istehlak etdiyinə görə, ENABLE pinini müxtəlif vaxtlarda söndürüb aça bilərsiniz. Sadəcə davam etməyi seçdim. Ters çevrildiyi üçün onu aktivləşdirmək üçün DÜŞÜK çəkirsiniz. Alternativ olaraq onu yerə bağlaya bilərsiniz. Qərar verdiyim təqdirdə mənə imkan vermə/söndürmə variantları vermək üçün PIND3 -ə bağladım. Çıxış pin oxucunun bir etiket oxuduqdan sonra seriya məlumatlarını göndərdiyi yerdir. Mən onu PIND2 -yə bağladım. Qeyd edək ki, Paralaks Kainatında qırmızı getmək deməkdir. Yəni, yaşıl LED cihazın hərəkətsiz və boş olduğunu, qırmızı LED isə cihazın aktiv olduğunu bildirir. * çiyin çəkmək* Fiqura keç.

Addım 3: Kodu yazın

Kodu yazın
Kodu yazın

RFID oxuyucusundan məlumatları oxumaq üçün bir etiketin nə vaxt göndərildiyini bilməlisiniz, məlumatları serial portundan çıxarın və sonra bir yerə göndərin.

RFID Reader Məlumat Formatı

Parallax RFID oxuyucusu 2400 baud sabit, buzlu bir sürətlə məlumat göndərir. RFID etiketi 10 baytdır. Oxucu təsadüfi səs-küydən uzaqlaşdırıla biləcəyi üçün səhvlərin aşkarlanmasına/düzəldilməsinə icazə vermək üçün, 10 baytlıq RFID bir başlanğıc və dayandırma gözətçisi ilə məhdudlaşır. Başlanğıc gözətçisi xətt ötürməsidir (0x0A) və dayanma gözətçisi daşınma dönüşüdür (0x0D). Bu belə görünür:

[Sentinelə başlayın | Bayt 1 | Bayt 2 | Bayt 3 | Bayt 4 | Bayt 5 | Bayt 6 | Bayt 7 | Bayt 8 | Bayt 9 | Bayt 10 | Sentineli dayandırın]Bunlar üç əsas addımdır.

Bir etiketin nə vaxt göndərildiyini bilin

AVR -də firmware -ni izlənilən bir pimdə bir dəyişiklik baş verdiyini bildirən bir Pin Dəyişdirmə Kesintisindən istifadə etdim. Bunun üçün AVR -ni konfiqurasiya etmək asandır və bayrağı təyin etmək, MCU -ya hansı pini izləmək istədiyinizi söyləmək və qlobal fasilə bitini təyin etmək tələb olunur. PCINT konfiqurasiya edin

BSET (PCICR, PCIE2); // pin dəyişdirmə kəsmə nəzarət reyestri pcie2 BSET (PCMSK2, PCINT18); // PCINT18 (PD2) BSET (SREG, 7) üçün pin dəyişdirmə kəsilməsini aktivləşdirin; // SREG I-bitini təyin edinISR -ni qısa saxlamaq istəyirsən, buna görə də kəsmə vektorumda bütün baytı tədricən oxuyuram və baytı qlobal dəyişkən bir xarakter cərgəsində saxlayıram. Hər fasilədə aşağıdakıları edirəm:

  • Başlanğıcda olduğumu yoxlamaq üçün yoxlayın
  • Vaxtı 2400 baud (RFID oxuyucunun sürəti) ilə orta nəbzə mərkəzləşdirin.
  • Başlanğıc bitini atlayın və növbəti bitin ortasına qədər fasilə verin
  • Hər biti işarəsiz bir tamsaya oxuyun
  • 8 bit aldığımda baytı simvol sırasına qoyun
  • 12 bayt topladığımda MCU -ya etiketin səhv aşkarlanması üçün oxunduğunu bildirin.

Serial rutinlərində eksperimental olaraq müəyyən edilmiş gecikmələr üçün David Mellisdən kodu dəyişdirən Mikal Hartdan SoftSerial kodunu dəyişdirdim.

RS232 Çıxışını təhlil edin

PCINT proseduru, RFID oxuyucusundan RS232 çıxışını oxumaq üçün kodu ehtiva edir. 12 bayt (10 baytlıq RFID plus gözətçilər) əldə etdikdə bDataReady-ni 1 olaraq təyin etdim və əsas döngənin məlumatları emal etməsinə icazə verdim.

// bu kəsmə işləyicisiISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Başlanğıc biti aşağı gəlir; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // bir az atla, qardaş… əgər (BCHK (PIND, RFID_IN)) BSET (bit, x); başqa BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // keçid stop biti RFID_tag [rxIdx] = bit; ++ rxIdx; əgər (rxIdx == 12) bDataReady = 1;}

Etiketinizi göstərin

Main (), for (ever) döngəsi zamanı, bütün RFID quruluşunun göndərildiyini bildirən bDataReady -nin qurulub -qurulmadığını yoxlayıram. Etibarlı bir etiket olub olmadığını yoxlayıram (yəni başlanğıc və dayandırma simvolları müvafiq olaraq 0x0A və 0x0D -dir) və əgər belədirsə, RS232 bağlantımı göndərirəm.

for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Başlama baytı:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nBaytı dayandır:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16));#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); üçün (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); əgər (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

Addım 4: Kod və Vida

Bu səhifədə müvafiq kodu olan bir zip faylı var. AVR Studio 4.16 -da yazılmışdır. Proqramçı notepad, tutulma və ya vi (və ya başqa bir şey) istifadə edirsinizsə, etibarlı bir Makefile faylını qovluğa kopyalamalı və bu faylları mənbə xəttinə əlavə etməlisiniz. 16MHz MCU. Fərqli bir saat tezliyində işləsəniz, baud dərəcəsi pulslarını mərkəzləşdirmək üçün tənzimlənmiş gecikmələri eksperimental olaraq təyin etməlisiniz. Ümid edirəm bu təlimat sizə bir şəkildə kömək etdi. Necə təkmilləşdirilə biləcəyiniz barədə hər hansı bir təklifiniz varsa, mənə bildirməkdən çəkinməyin!

Tövsiyə: