Mündəricat:
Video: AVR/Arduino RFID Reader, UART Kodu ilə C: 4 addımda
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:49
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
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
İş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
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ə:
Raspberry Pi 4B -də ADXL335 Sensor Arayüzü 4 addımda: 4 addımda
4 addımda Raspberry Pi 4B -də ADXL335 Sensor Arayüzü: Bu Təlimatda Raspberry Pi 4 -də bir ADXL335 (akselerometr) sensoru Shunya O/S ilə birləşdirəcəyik
ESP32 ilə PWM - Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: 6 addım
ESP32 ilə PWM | Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: Bu təlimatlarda Arduino IDE istifadə edərək ESP32 ilə PWM siqnallarının necə yaradılacağını görəcəyik. PWM əsasən hər hansı bir MCU -dan analoq çıxışı yaratmaq üçün istifadə olunur və bu analog çıxış 0V ilə 3.3V arasında ola bilər (esp32 vəziyyətində) & dan
CH340 UART Serial Dönüştürücü Kabelindən istifadə edərək Proqramı və ya Kodu Arduino Pro Mini -yə necə yükləmək olar: 4 addım
CH340 UART Serial Dönüştürücü Kabelindən istifadə edərək Proqramı və ya Arduino Pro Mini -yə Necə Yükləmək olar: USB TTL Serial kabelləri, USB ilə seriyalı UART interfeysləri arasında əlaqə təmin edən bir sıra USB konvertor kabelləridir. 5 volt, 3.3 volt və ya istifadəçi tərəfindən müəyyən edilmiş siqnal səviyyələrində əlaqə təmin edən bir sıra kabellər mövcuddur
Arduino ilə MFRC522 RFID Reader istifadə edin: 5 addım
Arduino ilə MFRC522 RFID Oxuyucusundan istifadə edin: Salam! Sizə sərin, asan açar kart və ya açar fənər skanerinin hazırlanmasını öyrədəcəyəm! Bir RFID MFRC522 modulu, ledləri, rezistorları, telləri, arduino uno, çörək taxtası və 9v batareyası (isteğe bağlı) varsa, sərinləmək üçün getmək yaxşıdır
NODEMcu Usb Portu işləmir? TTL (FTDI) Moduluna USB istifadə edərək kodu 2 addımda yükləyin: 3 addım
NODEMcu Usb Portu işləmir? Yalnız 2 addımda USB -dən TTL (FTDI) Moduluna Kod yükləyin: USB -dən TTL moduluna NODEMcu -ya bir çox tel bağlamaqdan yoruldunuzsa, kodu yalnız 2 addımda yükləmək üçün bu təlimatı izləyin. NODEMcu işləmir, sonra panikaya düşməyin. Sadəcə USB sürücü çipi və ya USB konnektoru