Оглавление:
Видео: Считыватель RFID AVR / Arduino с кодом UART на C: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:55
RFID - это повальное увлечение, которое встречается повсюду - от систем инвентаризации до систем идентификации значков. Если вы когда-нибудь были в универмаге и проходили через эти металлоискатели в точках входа / выхода, то вы видели RFID. Есть несколько мест, где можно найти полезную информацию по настройке RFID, и это руководство посвящено установке считывателя Parallax RFID (последовательный TTL) на AVR, с акцентом на код C, необходимый для чтения последовательного ввода. Код находится на C и не использует никаких внешних библиотек. Фактически, он говорит со скоростью 2400 бод напрямую, без использования UART, синхронизируя со скоростью передачи считывателя RFID и считывая цифровой вывод, к которому он подключен. В восторге? Я тоже.
Шаг 1. Получите товары
Вам понадобится следующий список деталей:
- Считыватель RFID (Parallax # 28140 $ 39,99)
- RFID-метка (Parallax # 32397 $ 0,99)
- AVR или клон Arduino (если вы используете стандартный AVR, вам также понадобятся max232, 5 конденсаторов по 1 мкФ и разъем DE9)
- Макетная плата без пайки
По желанию
- 4-х позиционный заголовок
- Проволока
(и max232 и т. д. для передачи информации тега) Вы также можете подключить свой любимый ЖК-экран вместо отправки данных тега через RS232.
Шаг 2: соедините детали
Аппаратная сторона дела довольно проста. Вместо того, чтобы втыкать мой считыватель RFID прямо в макетную плату, я решил сделать быстрый кабель, чтобы можно было немного лучше перемещать считыватель RFID. Для этого я просто отрезал 4 позиции от лежащей у меня планки розетки и припаял три провода. Коннектор гетто завершен изолентой. Считыватель RFID имеет 4 соединения:
- Vcc
- ВКЛЮЧИТЬ
- ИЗ
- Gnd
Как вы, наверное, догадались, подключите Vcc к + 5V и Gnd к земле. Поскольку считыватель RFID потребляет очень много энергии, вы можете нажать на контакт ENABLE, чтобы выключать и включать его через различные промежутки времени. Я просто решил оставить его включенным. Поскольку он перевернут, вы потяните его НИЗКО, чтобы активировать. Как вариант, вы можете подключить его к земле. Я подключил его к PIND3, чтобы дать мне возможность включить / отключить, если я решу. Вывод OUT - это то место, куда считыватель отправляет свои последовательные данные после чтения тега. Я подключил его к PIND2. Обратите внимание, в Parallax Universe красный означает идти. То есть зеленый светодиод означает, что устройство неактивно и находится в режиме ожидания, а красный светодиод означает, что устройство активно. * пожимает плечами * Поймите.
Шаг 3: напишите код
Чтобы прочитать данные с RFID-считывателя, вы должны знать, когда тег был отправлен, вытащить данные из последовательного порта, а затем отправить их куда-нибудь.
Формат данных считывателя RFID
Считыватель Parallax RFID отправляет данные с фиксированной скоростью 2400 бод. RFID-метка составляет 10 байт. Чтобы обеспечить обнаружение / исправление ошибок, поскольку считыватель может быть отключен от случайного шума, 10-байтовый RFID ограничен сигнальным сигналом запуска и остановки. Сигналом начала является перевод строки (0x0A), а сигналом остановки - возврат каретки (0x0D). Это выглядит так:
[Start Sentinel | Байт 1 | Байт 2 | Байт 3 | Байт 4 | Байт 5 | Байт 6 | Байт 7 | Байт 8 | Байт 9 | Байт 10 | Остановить Sentinel]Это три основных шага.
Узнай, когда был отправлен тег
Я использовал прерывание смены пина на AVR, которое уведомляет прошивку о том, что на отслеживаемом пине произошло изменение. Настроить AVR для этого легко и требует установки флага, сообщающего MCU, какой вывод вы хотите контролировать, и установки бита глобального прерывания. Настроить PCINT
BSET (PCICR, PCIE2); // регистр управления прерыванием смены вывода pcie2 BSET (PCMSK2, PCINT18); // разрешить прерывание смены вывода для PCINT18 (PD2) BSET (SREG, 7); // Устанавливаем I-бит SREGНапишите свою процедуру обслуживания прерывания Вы хотите, чтобы ISR был коротким, поэтому в моем векторе прерывания я читаю весь байт, бит за битом, и сохраняю байт в глобальном энергозависимом массиве символов. При каждом прерывании делаю следующее:
- Убедитесь, что я нахожусь на стартовом бите
- Центрируйте синхронизацию по среднему импульсу на 2400 бод (скорость считывателя RFID)
- Пропустить стартовый бит и сделать паузу до середины следующего бита
- Считайте каждый бит в целое число без знака
- Когда у меня будет 8 бит, поместите байт в массив символов
- Когда я собрал 12 байтов, сообщите MCU, что тег был прочитан для обнаружения ошибок.
Я модифицировал код SoftSerial от Микала Харта, который модифицировал код Дэвида Меллиса для экспериментально определенных задержек в последовательных процедурах.
Анализ вывода RS232
Подпрограмма PCINT содержит код для чтения вывода RS232 из считывателя RFID. Когда я получил 12 байтов (10-байтовый RFID плюс сигнальные метки), я устанавливаю bDataReady на 1 и позволяю основному циклу обрабатывать данные и отображать их.
// это обработчик прерывания ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Стартовый бит становится низким return; uint8_t бит = 0; TunedDelay (CENTER_DELAY); // Центрировать на стартовом бите для (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // пропускаем немного, брат… if (BCHK (PIND, RFID_IN)) BSET (bit, x); иначе BCLR (бит, х); } TunedDelay (INTRABIT_DELAY); // пропустить стоповый бит RFID_tag [rxIdx] = bit; ++ rxIdx; если (rxIdx == 12) bDataReady = 1;}
Показать свой тег
В main () во время цикла for (ever) я проверяю, установлен ли bDataReady, сигнализируя, что вся структура RFID была отправлена. Затем я проверяю, является ли это допустимым тегом (т.е. начальный и конечный символы - это 0x0A и 0x0D соответственно), и если это так, я отправляю его через свое соединение RS232.
for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Начальный байт:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nСтоповой байт:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); для (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); если (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Шаг 4: Код и прощание
Эта страница содержит zip-файл с соответствующим кодом. Он был написан в AVR Studio 4.16. Если вы используете блокнот программиста, eclipse или vi (или что-то еще), вам нужно скопировать надежный Makefile в каталог и добавить эти файлы в исходную строку. Также обратите внимание, время для раздела последовательного чтения основано на MCU 16 МГц. Если вы работаете с другой тактовой частотой, вам нужно будет экспериментально определить настроенные задержки, чтобы сосредоточиться на импульсах скорости передачи. Я надеюсь, что это руководство помогло вам в какой-то мере. Если у вас есть предложения по улучшению, не стесняйтесь, дайте мне знать!
Рекомендуемые:
Считыватель RFID на базе ESP32 с сенсорным дисплеем: 7 шагов
Считыватель RFID на основе ESP32 с сенсорным дисплеем: в этой небольшой инструкции я покажу, как создать простой считыватель RFID с выходом TFT для настенного монтажа, используя модуль ESP32 DEV KIT C, печатную плату считывателя на основе RC-522 и комплект AZ-Touch ESP. Вы можете использовать этот считыватель для доступа к двери или охранной сигнализации
Считыватель / писатель ScanUp NFC и аудиорекордер для слепых, слабовидящих и всех остальных: 4 шага (с изображениями)
Читатель / писатель ScanUp NFC и аудиорекордер для слепых, слабовидящих и всех остальных: я изучаю промышленный дизайн, и этот проект - работа моего семестра. Цель состоит в том, чтобы поддержать слабовидящих и слепых людей с помощью устройства, которое позволяет записывать аудио в формате .WAV на SD-карту и вызывать эту информацию с помощью тега NFC. Итак, в
Считыватель RFID Arduino с TFT-дисплеем: 7 шагов
Считыватель RFID Arduino с TFT-дисплеем: в этой инструкции я покажу вам, как создать красивый RFID-считыватель с TFT-дисплеем и для настенного монтажа. Очень легко создать красивый RFID-считыватель с TFT-выходом для настенного монтажа с Arduino. MKR на ваш выбор и наш Ar
Демонстрация электронной шахматной доски 4x4 / с Arduino Mega + считыватель RFID + датчики на эффекте Холла: 7 шагов
Демонстрация электронной шахматной доски 4x4 / с Arduino Mega + RFID Reader + датчиками Холла: Привет, производители, я Тахир Мириев, выпускник Ближневосточного технического университета, Анкара, Турция, 2018 г. Я специализировался на прикладной математике, но мне всегда нравилось создавать вещи, особенно когда это требовало ручной работы с электроникой, дизайном и программированием
Считыватель Arduino RFID UHF: 10 шагов
Считыватель Arduino RFID UHF: Цель этого руководства - предоставить простой для понимания пример взаимодействия микроконтроллера с считывателем UHF RFID. Мы используем Thinkify TR-265. Демонстрация состоит из трех меток УВЧ, каждая из которых имеет уникальный идентификатор