Daftar Isi:

Pembaca RFID AVR/Arduino Dengan Kode UART di C: 4 Langkah
Pembaca RFID AVR/Arduino Dengan Kode UART di C: 4 Langkah

Video: Pembaca RFID AVR/Arduino Dengan Kode UART di C: 4 Langkah

Video: Pembaca RFID AVR/Arduino Dengan Kode UART di C: 4 Langkah
Video: Project Arduino Dengan RFID MFRC522 -Arduino Project Indonesia 2024, November
Anonim
Pembaca RFID AVR/Arduino Dengan Kode UART di C
Pembaca RFID AVR/Arduino Dengan Kode UART di C

RFID adalah kegemaran, ditemukan di mana-mana - dari sistem inventaris hingga sistem ID lencana. Jika Anda pernah ke department store dan berjalan melalui benda-benda yang tampak seperti detektor logam di titik masuk/keluar, maka Anda telah melihat RFID. Ada beberapa tempat untuk menemukan informasi yang baik tentang pengaturan RFID, dan instruksi ini berfokus pada pemasangan pembaca Parallax RFID (Serial TTL) pada AVR, dengan penekanan pada kode C yang diperlukan untuk membaca input serial. Kode dalam C dan tidak menggunakan perpustakaan eksternal apa pun. Bahkan, ia berbicara 2400 baud secara langsung tanpa menggunakan UART dengan menyinkronkan ke baud rate pembaca RFID dan membaca pin digital yang terhubung dengannya. Bergairah? Gerakan mengungkap kekerasan seksual demi menghapuskannya.

Langkah 1: Dapatkan Barang

Dapatkan Barangnya
Dapatkan Barangnya

Anda memerlukan daftar suku cadang berikut:

  • Pembaca RFID (Paralaks #28140 $39.99)
  • Tag RFID (Paralaks #32397 $0,99)
  • AVR atau klon Arduino (jika Anda menggunakan AVR stok, Anda juga memerlukan kapasitor max232, 5 x 1uF, dan konektor DE9)
  • Papan tempat memotong roti tanpa solder

Opsional

  • 4 posisi tajuk
  • Kabel

(dan max232 dll untuk komunikasi informasi tag) Anda juga dapat menghubungkan layar LCD favorit Anda sebagai pengganti pengiriman data tag melalui RS232.

Langkah 2: Hubungkan Bagian

Hubungkan Bagian
Hubungkan Bagian
Hubungkan Bagian
Hubungkan Bagian
Hubungkan Bagian
Hubungkan Bagian

Sisi perangkat kerasnya cukup mudah. Alih-alih memasang pembaca RFID saya langsung ke papan tempat memotong roti, saya memilih untuk membuat kabel cepat sehingga saya bisa memindahkan pembaca RFID sedikit lebih baik. Untuk itu, saya baru saja memotong 4 posisi dari strip header soket perempuan yang saya letakkan dan disolder pada tiga kabel. Pita listrik melengkapi konektor ghetto. Pembaca RFID memiliki 4 koneksi:

  • Vcc
  • MEMUNGKINKAN
  • KELUAR
  • Gnd

Seperti yang mungkin sudah Anda duga, sambungkan Vcc ke +5V dan Gnd ke ground. Karena pembaca RFID menghabiskan begitu banyak daya, Anda dapat menekan pin ENABLE untuk mematikan dan menghidupkannya pada berbagai interval. Saya hanya memilih untuk tetap menggunakannya. Karena terbalik, Anda tarik LOW untuk mengaktifkannya. Atau, Anda dapat menghubungkannya ke ground. Saya menghubungkannya ke PIND3 untuk memberi saya opsi untuk mengaktifkan/menonaktifkan jika saya memutuskan untuk melakukannya. Pin OUT adalah tempat reader mengirimkan data serialnya setelah membaca sebuah tag. Saya menghubungkannya ke PIND2. Note, di Parallax Universe, merah berarti pergi. Artinya, LED hijau berarti unit tidak aktif dan idle, sedangkan LED merah berarti unit aktif. *mengangkat bahu* Pergi mencari.

Langkah 3: Tulis Kode

Tulis Kodenya
Tulis Kodenya

Untuk membaca data dari pembaca RFID, Anda harus mengetahui kapan tag telah dikirimkan, menarik data dari port serial, lalu mengirimkannya ke suatu tempat.

Format Data Pembaca RFID

Pembaca RFID Parallax mengirimkan data dengan kecepatan glasial tetap 2400 baud. Sebuah tag RFID adalah 10 byte. Untuk memungkinkan deteksi/koreksi kesalahan, karena pembaca dapat disetel dari kebisingan acak, RFID 10-byte dibatasi oleh sentinel start dan stop. Sentinel start adalah line feed (0x0A) dan stop sentinel adalah carriage return (0x0D). Ini terlihat seperti ini:

[Mulai Sentinel |Byte 1|Byte 2|Byte 3|Byte 4|Byte 5|Byte 6|Byte 7|Byte 8|Byte 9|Byte 10| Hentikan Penjaga]Ini adalah tiga langkah utama.

Ketahui kapan tag telah dikirimkan

Saya menggunakan Pin Change Interrupt pada AVR yang memberi tahu firmware bahwa telah terjadi perubahan pada pin yang dipantau. Mengkonfigurasi AVR untuk ini mudah dan memerlukan pengaturan flag, memberi tahu MCU pin mana yang ingin Anda pantau, dan mengatur bit interupsi global. Konfigurasikan PCINT

BSET(PCICR, PCIE2); // perubahan pin register kontrol interupsi pcie2 BSET(PCMSK2, PCINT18); // aktifkan interupsi perubahan pin untuk PCINT18 (PD2) BSET(SREG, 7); // Setel SREG I-bitTulis rutin layanan interupsi Anda Anda ingin menjaga agar ISR Anda tetap pendek sehingga dalam vektor interupsi saya, saya membaca seluruh byte, sedikit demi sedikit, dan menyimpan byte tersebut dalam array karakter volatil global. Saya melakukan hal berikut di setiap interupsi:

  • Periksa untuk memastikan saya mulai sedikit
  • Pusatkan waktu ke pulsa tengah pada 2400 baud (kecepatan pembaca RFID)
  • Lewati bit awal dan jeda ke tengah bit berikutnya
  • Baca setiap bit menjadi bilangan bulat yang tidak ditandatangani
  • Ketika saya punya 8 bit, masukkan byte ke dalam array karakter
  • Ketika saya telah mengumpulkan 12 byte, beri tahu MCU bahwa tag telah dibaca untuk deteksi kesalahan.

Saya memodifikasi kode SoftSerial dari Mikal Hart yang memodifikasi kode dari David Mellis untuk penundaan yang ditentukan secara eksperimental dalam rutinitas serial.

Mengurai Keluaran RS232

Rutinitas PCINT berisi kode untuk membaca keluaran RS232 dari pembaca RFID. Ketika saya mendapatkan 12 byte (10-byte RFID plus sentinel), saya menyetel bDataReady ke 1 dan membiarkan loop utama memproses data dan menampilkannya.

// ini adalah interupsi handlerISR(PCINT2_vect){ if (BCHK(PIND, RFID_IN)) // Bit awal menjadi low return; uint8_t bit = 0; TunedDelay(CENTER_DELAY); // Pusatkan pada bit awal untuk (uint8_t x = 0; x < 8; x++) { TunedDelay(INTRABIT_DELAY); // lewati sedikit bro… if (BCHK(PIND, RFID_IN)) BSET(bit, x); lain BCLR(bit, x); } TunedDelay(INTRABIT_DELAY); // lewati stop bit RFID_tag[rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}

Tampilkan Tag Anda

Di main(), selama loop for(ever), saya memeriksa untuk melihat apakah bDataReady telah disetel, menandakan bahwa seluruh struktur RFID telah dikirim. Saya kemudian memeriksa untuk melihat apakah itu tag yang valid (yaitu karakter awal dan akhir adalah 0x0A dan 0x0D, masing-masing), dan jika demikian, saya mengirimkannya ke koneksi RS232 saya.

for (;;){ if (bDataReady) {#ifdef _DEBUG_ USART_tx_S("Mulai byte: "); USART_tx_S(itoa(RFID_tag[0], &ibuff[0], 16)); ibuff[0] = 0; ibuff[1] = 0; USART_tx_S("\nStop byte: "); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nTagRFID: "); 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; bDataSiap = 0; }}

Langkah 4: Kode dan Perpisahan

Halaman ini berisi file zip dengan kode yang relevan. Itu ditulis di AVR Studio 4.16. Jika Anda menggunakan notepad programmer, Eclipse, atau vi (atau yang lainnya), Anda harus menyalin Makefile yang tepercaya ke dalam direktori dan menambahkan file-file ini ke baris sumber. Perhatikan juga, waktu untuk bagian pembacaan serial didasarkan pada 16MHz MCU. Jika Anda menjalankan pada frekuensi jam yang berbeda, Anda perlu menentukan penundaan yang disetel secara eksperimental untuk memusatkan pada pulsa laju baud. Saya harap instruksi ini membantu Anda dalam beberapa cara. Jika Anda memiliki saran tentang bagaimana hal itu dapat ditingkatkan, jangan ragu untuk memberi tahu saya!

Direkomendasikan: