Что такое rfid? как это работает? взаимодействие rfid модуля rc522 с arduino

Программная часть

Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для Arduino и скопируем ключ, который вводим с клавиатуры.

Keypad.h – это библиотека, которая позволяет Arduino читать клавиатуру с матричным типом.

В этом проекте используется клавиатура 4 × 4.

В таблице показано соединение между платой Arduino и клавиатурой. Штыри клавиатуры подключены к цифровым выходным выводам Arduino. Pin D6 использовался для зуммера, потому что это был штырь ШИМ.

Вывод клавиатуры Контакт Arduino
1 D2
2 D3
3 D4
4 D5
5 A0
6 D7
7 D8

Соединение между Arduino, LCD и клавиатуройЖК-дисплей и клавиатура, подключенные к Arduino

Затем добавим RFID. В этом случае плата RFID использует протокол связи SPI, где Arduino будет действовать, как ведущий и считыватель RFID в качестве подчиненного. Считыватель карт и теги предназначены для связи с частотой, равной 13,56 МГц.

Это важный шаг, поскольку он помогает нам считывать данные с карты, и он будет решать, соответствует ли идентификатор информации, хранящейся в EEPROM. Если он соответствует, он даст нам доступ и отобразит «Unlocked». В противном случае на ЖК-дисплее отобразится «Заблокировано».

Соединение между Arduino, LCD и RFIDДомофон на Ардуино, LCD и RFID

Следующий шаг – добавить зуммер и 2 светодиода для имитации системы контролируемого доступа. Ознакомьтесь с приведенной ниже диаграммой. Зуммер установлен так, что он гудит всякий раз, когда мы получаем доступ (разблокирован). Красный светодиод всегда горит, когда он заблокирован, но зеленый светодиод загорается, когда он разблокирован.

Чтобы защитить модули, нужно использовать 3D-печать корпуса. Если у вас нет 3D-принтера, вы можете просто использовать пластиковый корпус, который позволяет вам вставлять все компоненты внутрь. Это очень полезно, потому что модули будут размещены внутри, а единственными частями вне коробки будут светодиоды, клавиатура и ЖК-дисплей.

Схема соединений, показывающая соединение между Nano, LCD, клавиатурой, RFID и звуковым сигналом

www.deviceplus.com/how-tos/arduino-guide/make-your-own-arduino-rfid-door-lock/

Подключение RC522 к Ардуино

Для подключения понадобятся плата Ардуино, считыватель RC522, компьютер, провода и беспроводная RFID метка.

Подключается модуль RC522 к ардуино по следующей схеме:

Напряжение питания обеспечивается от 2,5 до 3,3 В. Выход RST подключается к D9 пину на ардуино, SDA – к D10, MOSI – D11, MISO – D12, SCK – D13. В данном случае рассмотрены платы Arduino Nano v3 и Arduino Uno. После того как все будет подключено, на RC522 загорится индикатор.

Плата Ардуино оснащена дополнительным разъемом ICSP, который используется для работы по интерфейсу  SPI. Распиновка для него изображена на рисунке, выводы с модуля RC522 можно подключить к этому разъему.

Для работы с модулем нужно установить библиотеку RFID Library for MFRC522. После установки нужно загрузить тестовый скетч для считывания номера карты cardRead, включить мониторинг последовательного порта. Затем метку нужно поднести к ридеру, произойдет инициализация метки и на мониторе появится следующее:

В данном примере произведено считывание трех различных меток.

Можно выбрать другой пример – DumpInfo, который также считает данные с карты. В результате на экране появятся тип карты и информация, которая состоит из 16 сектором памяти по 4 блока.

Аппаратная часть

Для набора кода понадобится библиотека LiquidCrystal_I2C.h в Arduino IDE. Библиотека позволяет подключить ЖК-дисплей к Ардуино. Встроенная библиотека LiquidCrystal_I2C позволяет легко отображать символы на ЖК-дисплее.

Следуйте приведенным ниже инструкциям, чтобы установить новую библиотеку в свою среду разработки Arduino.

  1. Сначала загрузите файлы из Github.
  2. Извлеките из архивов каждую папку.
  3. Скопируйте ZIP-файлы в папку Ардуино.
  4. Откройте Ардуино и добавьте Keypad.zip:Меню эскиза -> Включить библиотеку -> Добавить ZIP-библиотеку
  5. Добавить библиотеку клавиатуры:Эскиз -> Включить библиотеку -> Клавиатура

Создание дубликатора своими руками

ЖК-дисплей имеет 16 контактов, что слишком много для Arduino Nano домофона, поэтому важно иметь адаптер I2C. Это позволяет управлять дисплеем только из двух сигнальных штырей на Ардуино

Это полезно из-за небольшого числа контактов, которые нужно будет контролировать из MCU.

ЖК-контакты

ЖК-дисплеи имеют параллельный интерфейс, а это означает, что MCU должен одновременно управлять несколькими контактами интерфейса для управления дисплеем. В приведенной ниже таблице дается описание каждого из контактов на английском языке:

Спецификация контактов

Для начала сделаем связи между ЖК-дисплеем и I2C. Для этого нужен адаптер ЖК-дисплея I2C (LCD1602). Адаптер преобразует ЖК-дисплей формата 16 x 2 в серийный ЖК-дисплей I2C, которым можно управлять через Arduino всего посредством 2-х проводов.

Соединения между Arduino и LCD

Conclusion

So, we managed to build a low-cost Arduino RFID door lock. It was an interesting project for me because I made it for my personal use. Moreover, building such a device will provide you not only the satisfaction of doing something useful, but also a lot of knowledge and an initiation in the first steps of custom electronics. Dealing with a wide range of boards will be definitely very challenging. The project presents a lot of interesting tasks, such as:

  • Working with other Arduino libraries
  • Understanding the use of EEPROM
  • Working with multiple communications like I2C, SPI

Click here to see Part 2 of this article, where we enable unlocking from a smartphone! Check out our Arduino projects section for other fun and challenging Arduino projects!

Дальнейшее развитие проекта «Умный замок»

В нашем проекте релизовано дистанционное управление дверным замком с помощью отпечатка пальца.

Можете смело экспериментировать, модифицировать скетч и обвязку. Например, можно заменить дверной электронный замок на реле для управления питанием вашего 3D принтера, манипулятора или квадрокоптера…

Можно развивать ваш “умный дом”. Например, удаленно активировать систему полива на Arduino или включать свет в комнате… При этом не забывайте, что вы одновременно можете активировать практически неограниченное количество устройств, используя Adafruit IO.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Описание работы дубликатора

При запуске копировальщик достаёт из eeprom последний сохранённый туда ключик и показывает на дисплее количество ключей в EEPROM, шифр ключа и его тип. Максимум в дубликатор можно сохранить 20 разных ключей. Rgb диод светит зелёным, т.е ключ уже можно писать на болванку. Если в EEPROM было пусто, на экране будет соответствующая надпись, в ожидании чтения ключа. Чтобы выбрать из EEPROM другой ключ , достаточно покрутить энкодер вправо или влево.

Если вы хотите сохранить в EEPROM прочитанный ключ, просто удерживайте нажатым энкодер несколько секунд. Если в EEPROM уже записаны все 20 ключей, то самый старый из них затирается. Если повторно пытаться сохранить в EEPROM ключ, который там уже есть — запись не происходит, а просто выбирается индекс уже сохраненного ключа.

Для перевода в режим записи жмём на кнопку энкодера — светится красный диод. Ключ который отображается на дисплее будет записан на болванку.

Теперь немного про ключи цифрал и метаком. Для копирования таких ключе нужна спец болванка тм-01а. Дубликатор умеет делать финализацию таких ключей, и они ничем не будут отличаться от исходных.

Но и это ещё не всё! Я прикинул, а что если сделать эмулятор rfid ключа? У меня есть девайс, который может хранить до 20 разных ключей, в нем есть мозги и рамка, как в обычном ключе. С манчестерским кодом я уже разобрался…. Короче, жмём на кнопку энкодера и переключаемся в третий режим — blueMode. Достаточно поднести дубликатор к домофону и … опа.. дверь открывается! Магия!

ПОДДЕРЖАТЬ АВТОРА

Если вам понравился проект — поддержите автора!

Если вам нравится самоделка, но чувствуете, что сил сделать самому пока не достаточно — можете заказать самоделку в авторском исполнении.

  • Дубликатор 3200 руб
  • Комплект для самостоятельной сборки 2300 руб

Доставка в ваш город составляет примерно 250 руб и уже входит в стоимость.

Заказать самоделку

В заказе будет особая авторская прошивка. Вырученные средства пойдут на на закупку материалов для новых проектов, оборудования для съемки, содержание сайта и доменного имени.

Как подключить RFID считыватель RC522 к Arduino

В этой статье мы рассмотрим подключение к Arduino считывателя карт и брелоков RFID RC522, работающего на частоте 13,56 МГц.

Модуль RFID-RC522 выполнен на микросхеме MFRC522 фирмы NXP. Эта микросхема обеспечивает двухстороннюю беспроводную (до 6 см) коммуникацию на частоте 13,56 МГц.

Беспроводной модуль RFID-RC522

Микросхема MFRC522 поддерживает следующие варианты подключения:

SPI (Serial Peripheral Interface, последовательный интерфейс для связи периферийных устройств) до 10 Мбит/сек;
двухпроводной интерфейс I2C до 3400 кбод в режиме High-speed,до 400 кбод в режиме Fast;
последовательный UART (аналог RS232) до 1228,8 кбод.

С помощью данного модуля можно записывать и считывать данные с различных RFID-меток: брелоков от домофонов, пластиковых карточек-пропусков и билетов на метро и наземный транспорт, а также набирающих популярность NFC-меток.

RFID – это сокращение от “Radio Frequency IDentification” и переводится как «радиочастотная идентификация». NFC – это “Near field communication”, «коммуникация ближнего поля» или «ближняя бесконтактная связь».

2Схема подключения RFID-RC522 к Arduino

Подключим модуль RFID-RC522 к Arduino по интерфейсу SPI по приведённой схеме.

Схема подключения RFID-RC522 к Arduino по интерфейсу SPI

Питание модуля обеспечивается напряжением от 2,5 до 3,3 В. Остальные выводы подключаем к Arduino так:

RST D9
SDA (SS) D10
MOSI D11
MISO D12
SCK D13

Не забывайте также, что Arduino имеет специальный разъём ICSP для работы по интерфейсу SPI. Его распиновка также приведена на иллюстрации. Можно подключить выводы RST, SCK, MISO, MOSI и GND модуля RC522 к разъёму ICSP на Ардуино.

3Библиотека для работы Arduino с RFID

Микросхема MFRC522 имеет достаточно обширную функциональность. Познакомиться со всеми возможностями можно изучив её паспорт (datasheet). Мы же для знакомства с возможностями данного устройства воспользуемся одной из готовых библиотек, написанных для работы Arduino с RC522. Скачайте её и распакуйте в директорию Arduino IDE\libraries\

Установка библиотеки “rfid-master” для работы Arduino с RFID-метками

После этого запустите среду разработки Arduino IDE.

4Скетч для считывания информации, записанной на RFID-метке

Теперь давайте откроем скетч из примеров: Файл Образцы MFRC522 DumpInfo и загрузим его в память Arduino.

Открываем скетч DumpInfo

Данный скетч определяет тип приложенного к считывателю устройства и считывает данные, записанные на RFID-метке или карте, а затем выводит их в последовательный порт.

#include #include const int RST_PIN = 9; // пин RST const int SS_PIN = 10; // пин SDA (SS) MFRC522 mfrc522(SS_PIN, RST_PIN); // создаём объект MFRC522 void setup() { Serial.begin(9600); // инициализация послед. порта SPI.begin(); // инициализация шины SPI mfrc522.PCD_Init(); // инициализация считывателя RC522 } void loop() { // Ожидание прикладывания новой RFID-метки: if ( ! mfrc522.PICC_IsNewCardPresent()) { return; // выход, если не приложена новая карта } // Считываем серийный номер: if ( ! mfrc522.PICC_ReadCardSerial()) { return; // выход, если невозможно считать сер. номер } // Вывод дампа в послед. порт: mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); }

Текст скетча достаточно хорошо прокомментирован.

Для более полного знакомства с библиотекой изучите файлы MFRC522.h и MFRC522.cpp из директории rfid-master.

5Дамп данных с RFID-метки

Запустим монитор последовательного порта сочетанием клавиш Ctrl+Shift+M, через меню Инструменты или кнопкой с изображением лупы. Теперь приложим к считывателю билет метро или любую другую RFID-метку. Монитор последовательного порта покажет данные, записанные на RFID-метку или билет.

Считываем данные с билета на наземный транспорт и метро с помощью RFID

Например, в моём случае здесь зашифрованы уникальный номер билета, дата покупки, срок действия, количество оставшихся поездок, а также служебная информация. Мы разберём в одной из будущих статей, что же записано на карты метро и наземного транспорта.

Примечание

Да, с помощью модуля RFID-RC522 можно записать данные на билет метро.

Но не обольщайтесь, каждая карта имеет неперезаписываемый счётчик циклов записи, так что «добавить» поездок себе на метро не получится – это сразу будет обнаружено и карта будет забракована турникетом А вот использовать билеты метро для записи на них небольших объёмов данных – от 1 до 4 кб – можно. И способы применения этому ограничены только вашей фантазией.

4Скетч для считывания информации, записанной на RFID-метке

Теперь давайте откроем скетч из примеров: Файл Образцы MFRC522 DumpInfo и загрузим его в память Arduino.

Открываем скетч DumpInfo

Данный скетч определяет тип приложенного к считывателю устройства и считывает данные, записанные на RFID-метке или карте, а затем выводит их в последовательный порт.

#include <SPI.h>
#include <MFRC522.h>

const int RST_PIN = 9; // пин RST
const int SS_PIN = 10; // пин SDA (SS)

MFRC522 mfrc522(SS_PIN, RST_PIN); // создаём объект MFRC522

void setup() {
	Serial.begin(9600); // инициализация послед. порта
	SPI.begin(); // инициализация шины SPI
	mfrc522.PCD_Init(); // инициализация считывателя RC522
}

void loop() {
	// Ожидание прикладывания новой RFID-метки:
	if ( ! mfrc522.PICC_IsNewCardPresent()) {
		return; // выход, если не приложена новая карта
	}

	// Считываем серийный номер:
	if ( ! mfrc522.PICC_ReadCardSerial()) {
		return; // выход, если невозможно считать сер. номер
	}

	// Вывод дампа в послед. порт:
	mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

Текст скетча достаточно хорошо прокомментирован.

Для более полного знакомства с библиотекой изучите файлы MFRC522.h и MFRC522.cpp из директории rfid-master.

Шаг 4: Соединяем все детали

Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.

Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.

Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.

OLED-дисплей → Arduino

VCC → 3.3V

GND → GND

SCL → Аналоговый Pin 5

SDA → Аналоговый Pin 4

RFID-ридер → Arduino

RST → Цифровой Pin 9

IRQ → Не соединен

MISO → Цифровой Pin 12

MOSI → Цифровой Pin 11

SCK → Цифровой Pin 13

SDA → Цифровой Pin 10

Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.

Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.

Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.

Программная часть

Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для Arduino и скопируем ключ, который вводим с клавиатуры.

Keypad.h – это библиотека, которая позволяет Arduino читать клавиатуру с матричным типом.

В этом проекте используется клавиатура 4 × 4.

В таблице показано соединение между платой Arduino и клавиатурой. Штыри клавиатуры подключены к цифровым выходным выводам Arduino. Pin D6 использовался для зуммера, потому что это был штырь ШИМ.

Вывод клавиатуры Контакт Arduino
1 D2
2 D3
3 D4
4 D5
5 A0
6 D7
7 D8

Затем добавим RFID. В этом случае плата RFID использует протокол связи SPI, где Arduino будет действовать, как ведущий и считыватель RFID в качестве подчиненного. Считыватель карт и теги предназначены для связи с частотой, равной 13,56 МГц.

Это важный шаг, поскольку он помогает нам считывать данные с карты, и он будет решать, соответствует ли идентификатор информации, хранящейся в EEPROM. Если он соответствует, он даст нам доступ и отобразит «Unlocked». В противном случае на ЖК-дисплее отобразится «Заблокировано».

Следующий шаг – добавить зуммер и 2 светодиода для имитации системы контролируемого доступа. Ознакомьтесь с приведенной ниже диаграммой. Зуммер установлен так, что он гудит всякий раз, когда мы получаем доступ (разблокирован). Красный светодиод всегда горит, когда он заблокирован, но зеленый светодиод загорается, когда он разблокирован.

Чтобы защитить модули, нужно использовать 3D-печать корпуса. Если у вас нет 3D-принтера, вы можете просто использовать пластиковый корпус, который позволяет вам вставлять все компоненты внутрь. Это очень полезно, потому что модули будут размещены внутри, а единственными частями вне коробки будут светодиоды, клавиатура и ЖК-дисплей.


www.deviceplus.com/how-tos/arduino-guide/make-your-own-arduino-rfid-door-lock/

Объяснение кода программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Номер радиочастотной метки (RFID tag number) мы будем сохранять в переменной “char tag”. К примеру, мы в нашем проекте использовали карту с номером метки «180088F889E1». Длина метки – 12 символов, поэтому нам необходимо объявить массив длиной 12 символов — “char input ”.

Arduino

char tag[] =»180088F889E1″;
char input;
int count = 0;
boolean flag = 0;

1
2
3
4

chartag=»180088F889E1″;

charinput12;

intcount=;

booleanflag=;

Как определить номер метки на вашей карте можно прочитать в обучающей статье по работе Arduino с RFID.

В следующем фрагменте кода мы устанавливаем режим работы (на вывод данных) используемых нами контактов и инициализируем последовательную связь со скоростью 9600 бод/с. Контакт 2 будет использоваться для управления реле, контакт 3 – для управления светодиодом красного цвета (он используется для индикации режима ожидания), а к контакту 4 подключен зуммер.

Arduino

void setup()
{
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}

1
2
3
4
5
6
7

voidsetup()

{

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(4,OUTPUT);

Serial.begin(9600);

}

Далее переходим к операциям, осуществляемым в основном теле программы – в функции void loop(). Красный светодиод в этом цикле будет гореть до тех пор, пока не будет выполняться какая-либо другая задача.

Также в функции void loop() мы будем непрерывно проверять поступают ли какие-либо данные по последовательному каналу связи. Если мы считали номер какой-нибудь карты с RFID мы будем сохранять его в массиве input[].

Arduino

void loop(
{
digitalWrite(3,1);
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
input = Serial.read();
count++;
delay(5);
}

1
2
3
4
5
6
7
8
9
10
11
12

voidloop(

{

digitalWrite(3,1);

if(Serial.available())

{

count=;

while(Serial.available()&&count<12)

{

inputcount=Serial.read();

count++;

delay(5);

}

Затем мы будем сравнивать принятый номер карты с номером карты, который хранится у нас в массиве char tag[]. Если номера совпадают, то мы устанавливаем флаг в 1, если не совпадают – то в 0.

Arduino

if(count == 12)
{
count =0;
flag = 1;
while(count<12 && flag !=0)
{
if(tag==input)
flag = 1;
else
flag= 0;
}

1
2
3
4
5
6
7
8
9
10
11

if(count==12)

{

count=;

flag=1;

while(count<12&&flag!=)

{

if(tagcount==inputcount)

flag=1;

else

flag=;

}

Если карта правильная, то флаг будет установлен в 1, в этом случае на контакт 2 будет подано напряжение высокого уровня (HIGH), а на контакт 3 – напряжение низкого уровня (low). Затем через 5 секунд на этих контактах будет восстановлено их исходное состояние. При подаче напряжения высокого уровня на контакт 2 сработает реле, которое откроет электронный замок, а через 5 секунд замок снова закроется.

Arduino

if(flag == 1)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(5000);
digitalWrite(2,LOW);
}

1
2
3
4
5
6
7

if(flag==1)

{

digitalWrite(2,HIGH);

digitalWrite(3,LOW);

delay(5000);

digitalWrite(2,LOW);

}

Если вы поднесете к модулю чтения неправильную RFID карту, то флаг установится в 0, в результате чего начнет звучать сигнал зуммера.

Arduino

if(flag == 0)
{
for(int k =0; k<= 10; k++)
{
digitalWrite(4,HIGH);
delay(300);
digitalWrite(4,LOW);
delay(300);
}
}

1
2
3
4
5
6
7
8
9
10

if(flag==)

{

for(intk=;k<=10;k++)

{

digitalWrite(4,HIGH);

delay(300);

digitalWrite(4,LOW);

delay(300);

}

}

Замок с электромагнитным управлением

Замок с электромагнитным управлением (solenoid lock) использует электромеханический блокирующий механизм. Он содержит в своем составе личинку со скошенным концом и монтажный кронштейн. Когда на данный замок подается питание, электрический ток создает магнитное поле, под действием которого личинка втягивается внутрь замка и, таким образом, дверь открывается. Личинка будет оставаться внутри замка до тех пор, пока на замок будет подаваться питание. Когда питание на замок перестает подаваться, личинка выдвигается наружу замка и закрывает дверь. В закрытом состоянии замок не потребляет питания. Внешний вид замка с электромагнитным управлением показан на рисунке ниже. Для управления подобным замком необходим источник питания, который будет выдавать 12V @ 500mA.

Compatible boards

!!!Only for advanced users!!!

This library is compatible with the Teensy and ESP8266 if you use the board plugin of the Arduino IDE. Not all examples are available for every board. You also have to change pins. See .

Some user made some patches/suggestions/ports for other boards:

  • Linux: https://github.com/miguelbalboa/rfid/pull/216
  • chipKIT: https://github.com/miguelbalboa/rfid/pull/230
  • ESP8266 (native): https://github.com/miguelbalboa/rfid/pull/235
  • LPCOPen (in C): https://github.com/miguelbalboa/rfid/pull/258

Note that the main target/support of library is still Arduino.

Модуль чтения RFID меток RDM6300 (EM4100)

Модуль RDM6300 (EM4100) предназначен для чтения и записи информации на метки, работающие на частоте 125 кГц. Он может использоваться в системах наблюдения и безопасности, персональной аутентификации, контроля доступа, цифровых игрушках и во многих других приложениях. Модуль RDM6300 представляет собой бесконтактную RFID плату, содержащую радиоприемник и встроенный микроконтроллер. Используя высокоэффективный алгоритм декодирования модуль может считывать RFID метки типа EM4100 и совместимые с ними метки. Модуль RDM6300 использует последовательную связь со скоростью 9600 бод (в логике TTL) для передачи данных от RFID меток, поэтому для считывания данных с данного модуля можно использовать любой микроконтроллер, имеющий UART (universal asynchronous receiver / transmitter — универсальный асинхронный приемопередатчик).

Назначение контактов (распиновка) модуля RDM6300 представлена в следующей таблице.

Название контакта Назначение контакта
5V питающее напряжение
GND общий провод (земля)
RX контакт приема данных
TX контакт передачи данных
ANT1 контакт для подключения антенны
ANT2 контакт для подключения антенны

Технические характеристики модуля чтения RFID меток RDM6300:

  • рабочая частота: 125 кГц;
  • скорость передачи данных: 9600 бод;
  • интерфейс: RS232 с логикой TTL;
  • рабочее напряжение: 5 В постоянного тока;
  • рабочий ток: <50mA;
  • расстояние приема (считывания) данных: 20~50mm;
  • размеры (мм): 38.5 x 20;
  • вес: 7 г.

Модуль чтения RFID меток RDM6300 по принципу действия очень похож на модуль EM-18 – оба они работают на частоте 125 кГц и поддерживают интерфейс RS232/TTL. А, к примеру, рабочая частота для другого популярного RFID модуля RC522 составляет 13,56 кГц.

RFID Door Lock Access Control System

Let’s create a quick Arduino project to demonstrate how a simple RC522 RFID reader module can be used to make a RFID Door Lock Access Control System. Our program will scan unique ID of each RFID tag when it’s close enough to be energized by the RC522 reader. If the UID of the tag matches a predefined value (Master tag) that is stored in Arduino memory, the access will be granted. And if we scan any unknown tag the access will be denied. Great! Right?

This is how the output looks like.


Door Lock Access Control Arduino Project Output

Of course this project could be interfaced to open doors, switch on a relay, light up an LED, or anything else you can think of.

In case you are not familiar with 16×2 character LCDs, consider reading (at least skimming) below tutorial.

SUGGESTED READING

Before we get to uploading code and scanning tags, let’s look at the circuit schematic for the project.


Wiring RC522 RFID Reader Writer Module with Arduino UNO & 16×2 Character LCD

That’s it! Now, try the below sketch out.

The program is quite simple. At the start we include the necessary libraries, define Arduino pins, create instances of LCD & MFRC522 objects and define master tag.

In setup function, we initialize SPI interface, MFRC522 object and LCD. Following that we print welcome message on the LCD.

In loop function, we wait until the new tag is scanned. Once it’s done, we compare the unknown tag with the master tag defined prior setup function. That’s it! If its ID matches master ID, access is granted else denied.

The key thing in the project is a custom function called getID(). Once it scans for the new card, inside a for loopit converts 4 byte of UID into string and concatenates to create a single string.

Принцип работы дубликатора на Ардуино

Каждый ключ имеет внутреннюю связь с домофонной дверью – этот номер и служит ключевым идентификатором. Этот номер интерком-ключа решает, нужный ли вы приложили ключ. Поэтому принцип работы дубликатора домофонных ключей на Arduino довольно прост: сначала нужно проверить «разрешенный» ключ, а затем присвоить тот же номер другому ключевому клону.

Проверяя номер из своей базы данных разрешенных скоростей передачи данных, он откроет дверь. Ключи для внутренней связи, которые мы будем подключать к Arduino дубликатору (иногда называемому iButton или Touch Memory), считываются и записываются в 1-проводной интерфейс. Поэтому схема подключения очень проста.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В начале программы нам будет необходимо подключить все используемые библиотеки, в нашем случае их всего две – одна для связи по интерфейсу SPI между платой Arduino и модулем RFID, и вторая – непосредственно для работы с модулем RFID. Обе эти библиотеки можно скачать по следующим ссылкам:

  1. SPI.h.
  2. MFRC522.h.

Также в начальной части программы необходимо определить контакты, к которым подключаются зуммер, замок с электромагнитным управлением (Solenoid Lock) и модуль RFID.

Arduino

int Buzzer = 4;
const int LockPin = 2;
#define SS_PIN 10
#define RST_PIN 9

1
2
3
4

intBuzzer=4;

constintLockPin=2;

#define SS_PIN 10
#define RST_PIN 9

Затем необходимо задать режимы работы для используемых контактов (на ввод или вывод данных), инициализировать связь по протоколу SPI и модуль RFID.

Arduino

pinMode(LockPin, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(hall_sensor, INPUT);
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522

1
2
3
4
5

pinMode(LockPin,OUTPUT);

pinMode(Buzzer,OUTPUT);

pinMode(hall_sensor,INPUT);

SPI.begin();// Initiate  SPI bus    

mfrc522.PCD_Init();// Initiate MFRC522

Внутри цикла void loop мы будем считывать значения с датчика Холла и когда у него на выходе будет напряжение низкого уровня (low), мы будем закрывать дверь.

Arduino

state = digitalRead(hall_sensor);
Serial.print(state);
delay(3000);
if(state==LOW){
digitalWrite(LockPin, LOW);
Serial.print(«Door Closed»);
digitalWrite(Buzzer, HIGH);
delay(2000);
digitalWrite(Buzzer, LOW);}

1
2
3
4
5
6
7
8
9

state=digitalRead(hall_sensor);

Serial.print(state);

delay(3000);

if(state==LOW){

digitalWrite(LockPin,LOW);

Serial.print(«Door Closed»);

digitalWrite(Buzzer,HIGH);

delay(2000);

digitalWrite(Buzzer,LOW);}

Также внутри цикла void loop мы будем проверять присутствует ли рядом с модулем RFID новая RFID карта. И если такая карта присутствует рядом с модулем, мы будем проверять ее UID (уникальный идентификатор). Если карта действующая, то мы будем открывать замок, в противном случае мы будем выдавать в окно монитора последовательной связи сообщение ‘You are not authorized’.

Arduino

if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
String content= «»;
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte < 0x10 ? » 0″ : » «));
content.concat(String(mfrc522.uid.uidByte, HEX));
}
Serial.println();
Serial.print(«Message : «);
content.toUpperCase();
if (content.substring(1) == «60 4E 07 1E» ) //change here the UID of the card/cards that you want to give access
{
digitalWrite(LockPin, HIGH);
Serial.print(«Door Unlocked»);
digitalWrite(Buzzer, HIGH);
delay(2000);
digitalWrite(Buzzer, LOW);
}
else
{
Serial.println(«You are not Authorised»);
digitalWrite(Buzzer, HIGH);
delay(2000);
digitalWrite(Buzzer, LOW);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

if(!mfrc522.PICC_IsNewCardPresent())

{

return;

}

// Select one of the cards

if(!mfrc522.PICC_ReadCardSerial())

{

return;

}

//Show UID on serial monitor

Stringcontent=»»;

byteletter;

for(bytei=;i<mfrc522.uid.size;i++)

{

content.concat(String(mfrc522.uid.uidBytei<0x10?» 0″» «));

content.concat(String(mfrc522.uid.uidBytei,HEX));

}

Serial.println();

Serial.print(«Message : «);

content.toUpperCase();

if(content.substring(1)==»60 4E 07 1E»)//change here the UID of the card/cards that you want to give access

{

digitalWrite(LockPin,HIGH);

Serial.print(«Door Unlocked»);

digitalWrite(Buzzer,HIGH);

delay(2000);

digitalWrite(Buzzer,LOW);

}

else

{

Serial.println(«You are not Authorised»);

digitalWrite(Buzzer,HIGH);

delay(2000);

digitalWrite(Buzzer,LOW);

}

}

2Считывание идентификатора ключа iButton с помощью Arduino

Для работы с интерфейсом 1-wire существуют готовые библиотеки для Ардуино. Можно воспользоваться, например, этой. Скачиваем архив и распаковываем в папку /libraries/, расположенную в каталоге Arduino IDE. Теперь мы можем очень просто работать с данным протоколом.

Загрузим в Ардуино стандартным способом этот скетч:

Скетч чтения ключа iButton с помощью Arduino (разворачивается)

#include <OneWire.h>
OneWire iButton(10); // создаём объект 1-wire на 10 выводе

void setup (void) {
  Serial.begin(9600);
}

void loop(void) {
  delay(1000); // задержка 1 сек
  byte addr; // массив для хранения данных ключа
  
  if ( !iButton.search(addr) ) { // если ключ не приложен
      Serial.println("No key connected..."); // сообщаем об этом
      return; // и прерываем программу
  }
  
  Serial.print("Key : ");
  for(int i=0; i}

Данный скетч показывает номер ключа для домофона, который подключён к схеме. Это то, что нам и нужно сейчас: мы должны узнать номер ключа, копию которого хотим сделать. Подключим Ардуино к компьютеру. Запустим монитор последовательного порта: Инструменты Монитор последовательного порта (или сочетание клавиш Ctrl+Shift+M).

Теперь подключим ключ к схеме. Монитор порта покажет номер ключа. Запомним этот номер.

Запоминаем номер ключа iButton, выводимый в монитор последовательного порта

А вот какой обмен происходит на однопроводной линии при чтении идентификатора ключа (подробнее – далее):

Диаграмма взаимодействия ключа Dallas с Arduino по однопроводному интерфейсу (1-wire)

На рисунке, конечно, не видны все детали реализации. Поэтому в конце статьи я прикладываю временную диаграмму в формате *.logicdata , снятую с помощью логического анализатора и программы Saleae Logic Analyzer и открываемую ей же. Программа бесплатная и скачивается с официального сайта Saleae. Чтобы открыть файл *.logicdata нужно запустить программу, нажать сочетание Ctrl+O или в меню Options (расположено вверху справа) выбрать пункт Open capture / setup.