Общие сведения:
RFID-считыватель - устройство, способное распознавать (читать уникальный номер) метки в виде карт и брелоков, работающих на соответствующей считывателю частоте. Может быть использован в системе контроля доступа, идентификации товаров и т.д.
Для работы со считывателем необходимо установить библиотеку Wiegand. При необходимости, ознакомьтесь с нашей инструкцией по установке библиотек в Arduino IDE.
Спецификация
- Рабочее напряжение: 9-15 В постоянного тока
- Потребляемый ток: < 100 мА
- Рабочая частота: 125 кГц / 13,56 Мгц
- Интерфейс: WG26 / WG34 (выбор перемычкой внутри считывателя)
- Дальность считывания: до 10 см
- Габариты: 74х114х18 мм
- Рабочая температура: -20...70 °С
Обозначение выводов:
Обозначение | Цвет | Описание |
Vcc | красный | Плюс питания |
GND | чёрный | Минус питания |
D0 | зеленый | Подключение к контроллеру |
D1 | белый | Подключение к контроллеру |
BEEP | жёлтый | Включение зуммера при подключении к GND |
LED | коричневый | Включение светодиода при подключении к GND |
Выбор типа интерфейса
Считыватель поддерживает работу с двумя типами интерфейса: Wiegand-26 и Wiegand-34. Различаются они длиной передаваемого пакета. Первый состоит из 24 бит кода и 2 бит контроля на четность, второй - из из 32 бит кода и 2 бит контроля на четность. Для переключения между WG26 и WG34 необходимо переставить перемычку, находящуюся под задней крышкой устройства, при этом никакие дополнительные изменения в коде вносить не нужно.
В библиотеку Wiegand встроена функция getWiegandType()
, позволяющая определить используемый тип интерфейса (подробнее в примере ниже).
Подключение:
Считыватель | Контроллер |
D0 | D2 |
D1 | D3 |
BEEP | D4 |
LED | D5 |
GND | GND |
Vcc | + питания (9-15В) |
Обратите внимание, что в случае некоторых контроллеров необходимо использовать другие выводы, поддерживающие прерывания. Например, для Piranha ULTRA: D0 подключается к 8 выводу, а D1 - к 9.
Пример чтения номера карты с последующим выводом в монитор последовательного порта:
#include <wiegand.h> // Подключение библиотеки wiegand WIEGAND wg; // Создание объекта считывателя void setup() { Serial.begin(9600); // Открытие порта передачи данных в последовательный порт // Номера выводов, к которым подключен считыватель. Обратите внимание, что указываемые выводы должны поддерживать прерывания. wg.begin(2, 3); // 2, 3 для контроллеров Arduino UNO, Nano, Mini, Mega, Piranha UNO. // 8, 9 для Piranha ULTRA } void loop() { if(wg.available()) { Serial.print("DECIMAL = "); Serial.print(wg.getCode()); // Вывод полученного номера десятичной системе счисления Serial.print(", Type W"); Serial.println(wg.getWiegandType()); // Вывод используемого интерфейса } }
wg.begin(pinD0, pinD1)
устанавливает номера выводов, в которым подключён считыватель, где pinD0 - пин, к которому подключен D0 считывателя, а pinD1 - пин, к которому подключен D1.
Управление зуммером и светодиодом
Для управления зуммером и светодиодом, встроенным в модуль, присутствуют желтый и коричневый провод (см. обозначение выводов). Для их включения необходимо подать "-" на соответствующий провод.
Например, в приведённом ниже скетче, после поднесения метки с номером, указанным в константе, на 2 секунды включится зуммер и светодиод.
#include <wiegand.h> // Подключение библиотеки wiegand WIEGAND wg; // Создание объекта считывателя #define ledOnboard 5 // Светодиод (встроенный в считыватель) подключен к 5 выводу контроллера #define zummer 6 // Зуммер (встроенный в считыватель) подключен к 6 выводу контроллера ///////////////////НАСТРОЙКИ/////////////////////// const int openTime = 2000; // Время, на которое включается светодиод и зуммер long masterKey = 7966357; // Номер карты, на которую сработает считыватель /////////////////////////////////////////////////// void setup() { pinMode(ledOnboard, OUTPUT); // Устанавливаем вывод светодиода как выход pinMode(zummer, OUTPUT); // Устанавливаем вывод зуммера как выход digitalWrite(ledOnboard, HIGH); // ВЫКЛючаем светодиод (для включения необходимо подать МИНУС на вывод) digitalWrite(zummer, HIGH); // ВЫКЛючаем зуммер (для включения необходимо подать МИНУС на вывод) Serial.begin(9600); // Инициализация монитора последовательного порта // Номера выводов, к которым подключен считыватель. Обратите внимание, что указываемые выводы должны поддерживать прерывания. wg.begin(2, 3); // 2, 3 для контроллеров Arduino UNO, Nano, Mini, Mega, Piranha UNO. // 8, 9 для Piranha ULTRA } void loop(){ if(wg.available()){ long id = wg.getCode(); // Получаем номер карты со считывателя и записываем в переменную Serial.print("id = "); Serial.println(id); // выводим номер на монитор if (id == masterKey){ // id карты совпало с заданной в скетче digitalWrite(ledOnboard, LOW); // Включаем светодиод digitalWrite(zummer, LOW); // Включаем зуммер delay(openTime); // Задержка digitalWrite(ledOnboard, HIGH); // Выключаем светодиод digitalWrite(zummer, HIGH); // Выключаем зуммер } } }
Вывод считанного номера на LCD дисплей
Следующий пример позволяет выводить прочитанные с метки данные на LCD дисплей, подключённый к контроллеру по шине I2C.
LCD дисплей I2C | Контроллер |
SCL | SCL |
SDA | SDA |
Vcc | 5V |
GND | GND |
Мы подключили LCD дисплей по шине I2C к выводам контроллера SCL и SDA. Если вы используете Trema shield, подключайте дисплей напрямую к колодке I2C.
#include <wiegand.h> // Подключаем библиотеку считывателя #include <wire.h> // Подключаем библиотеку для работы с шиной I2C #include <liquidcrystal_i2c.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2) WIEGAND wg; // Создаём объекта считывателя void setup() { lcd.init(); // Инициируем работу с LCD дисплеем lcd.backlight(); // Включаем подсветку LCD дисплея lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка) lcd.print("RFID 125kHz"); // Выводим текст "RFID 125kHz", начиная с установленной позиции курсора lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("ID: "); // Выводим текст "ID: ", начиная с установленной позиции курсора Serial.begin(9600); // Номера выводов, к которым подключен считыватель. Обратите внимание, что указываемые выводы должны поддерживать прерывания. wg.begin(2, 3); // 2, 3 для контроллеров Arduino UNO, Nano, Mini, Mega, Piranha UNO. // 8, 9 для Piranha ULTRA } void loop(){ if(wg.available()){ long id = wg.getCode(); // Получаем номер карты со считывателя и записываем в переменную Serial.print("id = "); Serial.println(id); // выводим номер на монитор lcd.setCursor(4, 1); // Устанавливаем курсор в позицию (4 столбец, 1 строка) lcd.print(id); // Выводим считанный номер } }
Обсуждение