Общие сведения:
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); // Выводим считанный номер
}
}

Обсуждение