CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный “Свой-чужой” – RoboCraft

Урок 10. контроль доступа. rfid-rc522 servo arduino – описания, примеры, подключение к arduino

В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).

CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный "Свой-чужой" – RoboCraft

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

В этом уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

Сборка:

1) RFID-модуль RC522 подключается к arduino проводами Папа-Мама в следующей последовательности:

Более подробно о подключении Rfid модуля.

2) Теперь нужно подключить Зуммер, который будет подавать сигнал, если ключ сработал и замок открывается, а второй сигнал, когда замок закрывается.

Зуммер подключаем в следующей последовательности:

ArduinoЗуммер
5VVCC
GNDGND
pin 5IO

3) В роли отпирающего механизма будет использоваться сервопривод. Сервопривод может быть выбран любой, в зависимости от требуемых вам размеров и усилий, который создает сервопривод. У сервопривода имеется 3 контакта:

ArduinoСервопривод
5V *Красный (Центральный)
GNDЧерный или Коричневый (Левый)
pin 6Белый или Оранжевый (Правый)

*Сервопривод рекомендуется питать от внешнего источника питания, если запитать сервопривод от ардуины, то могут возникнуть помехи и перебои в работе arduino. Организовать это можно с помощью источника питания 9V и комбинированного стабилизатора 5V ,3.3V.

Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:

Контроль доступа. RFID-rc522 Servo Arduino

Теперь, если все подключено, то можно переходить к программированию.

Скетч:

#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
Servo servo;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
void loop() {
  // Поиск новой метки
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Выбор метки
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  uidDec = 0;
  // Выдача серийного номера метки.
  for (byte i = 0; i < mfrc522.uid.size; i  )
  {
    uidDecTemp = mfrc522.uid.uidByte[i];
    uidDec = uidDec * 256   uidDecTemp;
  }
  Serial.println("Card UID: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
    servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(3000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 500); // Делаем звуковой сигнал,  Закрытие
  }
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}

Разберем скетч более детально:

Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер

CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный "Свой-чужой" – RoboCraft

Полученный UID необходимо ввести в следующую строчку:

if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.

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

Видео:

Craftduino и rfid-модуль rc522. обзор, подключение, тестовый скетч. хардварный "свой-чужой" – robocraft


RFID-модуль RC522

Данил Борчевкин
команда lab409.ru

Что нам понадобится в данной статье:
1. CraftDuino или аналог;
2. Модуль RC522;
3. Макетная плата
4. Провода гибкие папа-папа
5. Два светодиода
6. Два резистора 470R или 1K

ОБЗОР

CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный "Свой-чужой" – RoboCraft

RFID-модуль 13.56 МГц с SPI-интерфейсом. В комплекте к модулю идет 2 RFID-метки — в виде карты и брелока.
Данный модуль может быть использован для различных радиолюбительких и коммерческих применений, в том числе контроля доступа, автоматической идентификации, робототехники, отслеживания вещей, платежных систем и т.д.
Основные характеристики:
• Основан на микросхеме MFRC522;
• Напряжение питания : 3.3V;
• Потребляемый ток :13-26mA
• Рабочая частота: 13.56MHz
• Дальность считывания: 0 ~ 60 мм
• Интерфейс: SPI , максимальная скорость передачи 10МБит/с
• Размер: 40мм х 60мм
• Чтение и запись RFID-меток.

Комплект модуля мне по душе по 3 причинам:
1. Сам модуль;
2. RFID-карта с возможностью перезаписи;
3. RFID-брелок (да, тот же, который используется для открытия домофонной двери) с возможностью перезаписи.

Даже один взгляд на данный комплект рисует в голове множество способов применения RC522:
1. Автоматический замок для открывания двери, ящика, шкафа;
2. Программатор для домофонных ключей;
3. Организация складского учета (но с этим чуть сложней — нужно закупить RFID-метки, такие же, как и на любом товаре в современном магазине);
4. Открытие закрытых ранее для вас дверей копирование и программирование карт для организации доступа к вашим сокровищам.

Важно заметить, что не каждая карта и ключ имеют возможность перезаписи, поэтому при покупке обращайте внимание на описание товара и ищите на буржуйском следующее «Programmable/ Writable», «can be written over and over again» или что-то в этом духе.

ПОДКЛЮЧЕНИЕ
RC522 имеет интерфейс SPI, а это значит, что костылей в этой статье не будет, т.к. CraftDuino имеет его из коробки.

Модуль RC имеет 8 выводов (написаны по порядку расположения на модуле):
VCC — Питание. Необходимо 3.3V;
RST — Reset. Линия сброса. Ни в коем случае не подключать к пину RESET на CraftDuino! Данный пин цепляется на цифровой порт с PWM;
GND — Ground. Земля=));
MISO — Master Input Slave Output — данные от ведомого к ведущему, SPI;
MOSI — Master Output Slave Input — данные от ведущего к ведомому, SPI;
SCK — Serial Clock — тактовый сигнал, SPI;
NSS — Slave Select — выбор ведомого, SPI;
IRQ — линия прерываний;

Для подключения к CraftDuino необходимо воспользоваться следующей распиновкой:
RC522 —> пин CraftDuino
VCC —-> 3.3V
RST —-> 9
GND —-> GND
MISO —> 12
MOSI —> 11
SCK —-> 13
NSS —-> 10
IRQ —-> NС — не подключаем [в рамках этого примера. Далее планируется его использовать]

ТЕСТОВЫЙ СКЕТЧ
Для работы с данным модулем есть 2 разных пути:
1. Изучить работу микросхемы, форматы команд и запросов и написать свой софт;
2. Не заморачиваться на первом этапе и воспользоваться готовой библиотекой и примерами.

Первый путь мы отложим до последующих статей, а пока воспользуемся готовой библиотекой, установим ее в Arduino IDE с помощью копирования в папку %путь установки%/libraries/RFID и зальем тестовый скетч cardRead:

CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный "Свой-чужой" – RoboCraft

/**
* Read a card using a mfrc522 reader on your SPI interface
* Pin layout should be as follows (on Arduino Uno):
* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SS: Pin 10
* RST: Pin 9
*
* Script is based on the script of Miguel Balboa.
* New cardnumber is printed when card has changed. Only a dot is printed
* if card is the same.
*
* @version 0.1
* @author Henri de Jong
* @since 06-01-2022
*/

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN);

// Setup variables:
    int serNum0;
    int serNum1;
    int serNum2;
    int serNum3;
    int serNum4;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init();

}

void loop()
{

    if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
            if (rfid.serNum[0] != serNum0
                && rfid.serNum[1] != serNum1
                && rfid.serNum[2] != serNum2
                && rfid.serNum[3] != serNum3
                && rfid.serNum[4] != serNum4
            ) {
                /* With a new cardnumber, show it. */
                Serial.println(" ");
                Serial.println("Card found");
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];

                //Serial.println(" ");
                Serial.println("Cardnumber:");
                Serial.print("Dec: ");
		Serial.print(rfid.serNum[0],DEC);
                Serial.print(", ");
		Serial.print(rfid.serNum[1],DEC);
                Serial.print(", ");
		Serial.print(rfid.serNum[2],DEC);
                Serial.print(", ");
		Serial.print(rfid.serNum[3],DEC);
                Serial.print(", ");
		Serial.print(rfid.serNum[4],DEC);
                Serial.println(" ");

                Serial.print("Hex: ");
		Serial.print(rfid.serNum[0],HEX);
                Serial.print(", ");
		Serial.print(rfid.serNum[1],HEX);
                Serial.print(", ");
		Serial.print(rfid.serNum[2],HEX);
                Serial.print(", ");
		Serial.print(rfid.serNum[3],HEX);
                Serial.print(", ");
		Serial.print(rfid.serNum[4],HEX);
                Serial.println(" ");
             } else {
               /* If we have the same ID, just write a dot. */
               Serial.print(".");
             }
          }
    }

    rfid.halt();
}

Данный скетч выполняет следующие действия:
1. Инициализирует RC522;
2. Если обнаруживает RFID-метку, то выводит ее номер в десятичной и шестнадцатеричной системах исчисления;
3. Ожидает следующей метки. Если предыдущая метка не убрана от модуля и продолжает считываться, то выводит в com-порт точку.

Я не сказал бы, что данный скетч мне нравится, но пример есть пример.

СВОЙ-ЧУЖОЙ
Для интереса, давайте запилим распознавание определенной карты. Чтобы это выполнить, необходимо выполнить следующую логику работы:
1. Создать массив с номером известной карты в качестве разрешенного;
2. Считать серийный номер и записать его в отдельный массив;
3. Произвести поэлементное сравнение разрешенного номера со считанным;
4. В зависимости от результата, выполнить разные действия.

Не только из-за лени переделаем вышеприведенный пример:

serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];

Этот колхоз заменим на трушное считывание в массив unsigned char readnig_card[5] и его вывод через цикл for

Serial.println("Card found");
Serial.println("Cardnumber:");
for (i = 0; i < 5; i  )
{
  Serial.print(rfid.serNum[i]);
  Serial.print(" ");
  reading_card[i] = rfid.serNum[i];
}

На самом деле, отказ от циклов, массивов и структур сложнее if – нормальная практика у китайских программистов. Более подробно можно почитать здесь

Кроме этого, уберем ненужное выведение точек в случае считывания одной и той же карты и прикрутим сравнение с разрешенным номером карты с соответствующей последующей реакцией. Теперь, изменяя и дополняя функции allow() и denied(), можно получить любое необходимое действие.

for (i = 0; i < 5; i  )
{
  if (reading_card[i]!=master[i])
    {
      break;
    }
}
if (i == 5)
{
  allow();
}
else
{
  denied();
}

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

Для индикации возьмем 2 светодиода (в моем случае это синий и желтый), и прицепим их на цифровые порты 6 и 7, как показано на рисунке ниже. Кроме того, не забываем об ограничении тока посредством резистора.

CraftDuino и RFID-модуль RC522. Обзор, подключение, тестовый скетч. Хардварный "Свой-чужой" – RoboCraft

Итого, получаем скетч

/*
www.lab409.ru
Danil Borchevkin
15/12/2022

* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SS: Pin 10
* RST: Pin 9
*/

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9
#define BLUE_LED 6
#define YELLOW_LED 7

RFID rfid(SS_PIN, RST_PIN);

unsigned char reading_card[5]; //for reading card
unsigned char master[5] = {114,13,207,204,124}; // allowed card
unsigned char i;

void indication(int led);
void allow();
void denied();

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init();
  pinMode(BLUE_LED, OUTPUT);
  pinMode(YELLOW_LED, OUTPUT);
}

void loop()
{
    if (rfid.isCard())
    {
        if (rfid.readCardSerial())
        {
                /* Reading card */
                Serial.println(" ");
                Serial.println("Card found");
                Serial.println("Cardnumber:");
                for (i = 0; i < 5; i  )
                {
		  Serial.print(rfid.serNum[i]);
                  Serial.print(" ");
                  reading_card[i] = rfid.serNum[i];
                }
                Serial.println();
                //verification
                for (i = 0; i < 5; i  )
                {
                  if (reading_card[i]!=master[i])
                  {
                    break;
                  }
                }
                if (i == 5)
                {
                  allow();
                }
                else
                {
                  denied();
                }
         }
    }
    rfid.halt();
}

void allow()
{
  Serial.println("Access accept!");
  indication(BLUE_LED);
}
void denied()
{
  Serial.println("Access denied!");
  indication(YELLOW_LED);
}
void indication(int led)
{
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
}

Теперь у нас все довольно серьезней и интересней. Уже можно организовывать доступ в помещение. Но есть огромное НО – то, что мы выводим как серийный номер, нифига им не является (по крайней мере, в таком виде) – советую покопаться в самой библиотеке и понять, что UID номер карты перевернут, а один из байтов – CRC.

Ссылки
Даташит на микросхему MFRC522
Репозиторий цикла статей с даташитами, примерами, библиотекой и т.д.
Ссылка на скачивание библиотеки

Rc522 – rfid-модуль 13.56 мгц карта брелок

RFID-модуль RC522   карта   брелок
Тестирование и настройка готового дупликатора

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

Вы можете создать корпус с помощью SketchUp, который имеет интуитивно понятный интерфейс с простыми кнопками, такими как Ластик, Линии и Инструмент рулетки.

Размеры коробки: 120 х 125 х 37 мм.

Если вы новичок в Sketchup, вам необходимо ознакомиться со следующими руководствами по SketchUp:

Коробка для корпуса устройства (вид сверху)Коробка для корпуса устройства (вид снизу)

Прежде чем разрабатывать кейс для проекта, следует учесть следующие аспекты:

  • Вид сверху:
    — 2 отверстия для светодиодов (5,2 мм).
    — 1 для ЖК-дисплея (42,2 x 7,3 мм).
    — 1 отверстие для кабеля (16 x 10,5 мм).
  • Вид снизу:
    — 1 отверстие для клавиатуры (27 × 10 мм).

Далее можно соотнести размеры и соорудить пластиковый корпус. Также вы можете изменить дизайн по своему усмотрению.

Все тело с модулями, расположенными внутри

Rfid модуль rc522 чтение запись

Сегодняшний рассказ будет про RFID RC522. Как всегда по традиции, собрать работающий макет на  rfid считывателе rc522 можно будет за 20-30 минут, без пайки и каких-нибудь знаний в программировании.
Использовать модуль можно например для работы с эл. замком или для проверки «свой/чужой», записи на карту своих данных,  но об этом разговор будет в другой статье. Эта же про сам модуль RFID RC-522. 

RFID RC522 для считывания и записи на карты  
RFID RC522 Arduino схема, подключение
Datasheet или описание от производителя  

В 1945 году Лев Сергеевич Термен изобрёл шпионское устройство (т. н. «жучок»), которое причисляют к первым предшественникам RFID-технологии.

RFID (Radio Frequency Identification) радиочастотная идентификация – технология которая основана на электромагнитном радиочастотном излучении для обмена данными. RFID метки можно использовать для чтения и записи. Данные передаются считывателю бесконтактным способом путем модулирования несущей частоты от радиосигнала считывателя.

Скачать rfid rc522 datasheet 

Преимущества технологии RFID:

  • бесконтактная
  • возможность скрытой установки меток
  • высокая скорость считывания данных
  • трудно подделать(протокол Mifare®. — торговая марка, имеет криптозащиту)

Модуль rfid rc522 купить

модуль RFID-RC522rfid_metka

rfid rc522 библиотека
Используя специальную библиотеку скачать и посмотрев примеры можно без труда собрать устройство позволяющее считать UID карты и использовать в своих разработках, например для открытия электронного замка, или идентификации держателя карты.

запись rfid rc522
Запись на карту производится чуть посложнее чем считывание. Как это сделать будет разобрано в следующей статье. На карту из комплекта можно записать до 1Кбайт в энергонезависимую память EEPROM

rfid rc522 удобно использовать с Нано
Как я и писал выше удобнее всего использовать Нано из-за её малых размеров и меньшей стоимости.

RFID метка
RFID метка – это маленькое устройство с антенной. Антенна в разы больше чипа с данными. Чтобы прочитать эти данные нужен RFID считыватель. Метку помещают в корпус, в нашем случае она находится в карте и в брелоке.

Различные виды меток.

  • RFID браслет
  • Карта пластиковая
  • Брелок в пластмассовом корпусе
  • Различные кольца, брелоки для ключей, ожерелья. 
  • Можно изготовить в виде значков.

Активные и Пассивные метки. 
Пассивные RFID метки не имеют источника питания и поэтому нет необходимости в замене батареек. 
Ток в антенне образуется электромагнитным сигналом от RFID считыватель.
Можно скрыть считыватель за какой-нибудь панелью и использовать незаметно.
В памяти каждой метки находится идентификационный номер UID и 1024 байта данных или 1 килобайт энергонезависимой памяти EEPROM.  для записи различных данных. Поднеся метку к считывателю можно считать информацию. Для передачи данных метка используют энергию считывателя. Расстояние считывания до десятков метров. Зависит от применяемого считывателя, а так же от метки. Активные можно считывать и  на больших расстояниях.

Наш модуль rfid rc522 позволяет считывать метки до 5-7 см.

rfid модуль rc522 13.56 mhz с SPI-интерфейсом. 
В комплекте к модулю идут 2 RFID-метки – в виде карты и брелока.
Метки могут работать на разных частотах.
LF (125 – 134 кГц), 
HF (13.56 МГц), 
UHF (860 – 960 МГц). 

Метки работающие на частотах 13,56 МГц сравнительно дешёвые, хорошо стандартизированы. Применяются в платежных системах, логистике, идентификации личности. Для частоты 13,56 МГц разработан стандарт ISO 14443 (виды A/B). На основе этого стандарта работают системы оплаты проезда общественного транспорта.

По способам работы они тоже отличаются.

  • Могут работать только на чтение – на них можно записать информацию только 1 раз
  • Однократно записываемые. Поставляются без информации. Возможна запись всего 1 раз.
  • Многократно записываемые. Можно записывать информацию тысячи раз.

Модуль rfid rc522 купить

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

Другая проблема – это кража данных «скимминг». Используя сканер для чтения или дублирования информации.
Для предотвращения этого используйте специальные чехлы…

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

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

Библиотека mfrc522

Установите версию MFRC522 (домашняя страница) через диспетчер библиотек).

Библиотека включает несколько примеров, а также компонент для Fritzing. Для первого знакомства запустите скетч DumpInfo. В комментариях указаны варианты подключения разных карт. Стандартный вариант для Arduino Uno / Nano.

Когда вы поднесете карту к дверному монитору, вы увидите большую таблицу данных. Дождитесь полной загрузки данных и обратите внимание на данные в блоке 0 — там вы можете увидеть идентификатор.

Но нет необходимости вручную считывать информацию из массива данных, идентификатор можно получить с помощью вызова функции. В начале стоит отдельная строка Card UID: 77 E7 BC 3A.

Возьмем упрощенный пример. Суть в следующем. Инициализируем объект класса MFRC522 и проверяем различные условия. Если карта не поднесена к считывателю, то выходим из функции loop (), если не можем прочитать карту, то также выходим из функции. Если оба условия все же соблюдаются (есть карта и данные с нее), то выполняем требуемый код.

Носим карту и брелок из комплекта (MIFARE 1 КБ), а также транспортные карты Москвы (MIFARE Ultralight или Ultralight C). Идентификатор карты отображается в десятичном формате.

Вход по пропускам

Каждая вкладка имеет собственный идентификатор, который можно найти после наброска библиотеки DumpInfo. Запоминаем идентификатор и пишем наш скетч для проверки. Если идентификатор совпадает, отображается сообщение (включить светодиод, открыть ворота и т.д.).

Программа не пустила меня к себе на порог, а вот кота пустили. «Умный дом» — угроза человечеству.

Запись и чтение пользовательских данных

Давайте посмотрим на два примера, включенных в библиотеку: rfid_write_personal_data и rfid_read_personal_data. Они позволяют записывать, а затем читать данные с карты.

Сначала загрузите скетч для записи данных. После перепрошивки подносим карту к считывателю; в дверном мониторе предлагается ввести фамилию, которую необходимо дополнить решёткой. После успешного ввода вам необходимо ввести имя и еще раз с последним символом решетки.

Затем прошиваем доску вторым примером и снова приносим карту. Считыватель прочитает данные и передаст их на дверной монитор.

Необходимые материалы

Для создания проекта Arduino, дубликатора ключей внутренней связи, вам потребуются следующие компоненты:

  1. Arduino Nano.
  2. RFID RC522.
  3. Пьезоэлектрический зуммер.
  4. 2x светодиодный монитор.
  5. 2х 330 резисторов.
  6. Клавиатура 4 × 4.
  7. Адаптер I2C для LCD.
  8. LCD16X2BL.

Подключение rc522 к arduino uno

RC522 работает с метками диапазона HF по протоколу MIFARE.

Модуль RC522 имеет SPI-интерфейс. В SPI используются четыре цифровых сигнала:

  • MOSI — выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
  • MISO — вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCLK или SCK — последовательный тактовый сигнал (англ. Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS — выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).

Также, стоит отметить, что при подключении к Ардуино используется питание на 3.3 В.

RC522GNDVCCRSTSDA (SS)MOSIMISOSCK
Arduino UnoGND3.3V910111213

Подключение к плате esp32

Плата ESP32 имеет другую распиновку, чем Arduino Uno, поэтому схема подключения будет следующей.

Библиотека MFRC522 должна работать без проблем.

Подключение модуля к плате arduino

Рассмотрим подключение модуля к плате Arduino. Нам понадобятся следующие детали:

Подключение модуля RFID-RC522 к плате Arduino по будем производить по схеме соединений на рисунке 3.

Рисунок 3. Схема соединений для подключения RFID модуль RC522 к плате Arduino

На платах Arduino есть разъём ICSP. Он используется для работы по интерфейсу SPI. Назначение контактов разъёма ICSP представлено на рисунке 4. Поэтому можно для соединений использовать контакты разъёма ICSP.

Рисунок 4. Распиновка разъёма ICSP Arduino для интерфейса SPI

Предназначение дубликатора домофонных ключей

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

RFID означает радиочастотную идентификацию. Устройство выполняет ту же функцию, что и штрих-код или магнитная полоса на обратной стороне кредитной карты. Предоставляет уникальный идентификатор для этого объекта. И точно так же, как штрих-код или магнитная полоса, RFID необходимо сканировать для получения информации.

RFID используется в этом проекте для чтения данных с RFID-меток и отправки информации в энергонезависимую память MCU.

Идентификатор, считанный тегами, сравнивается с сохраненной информацией и, если он совпадает, дверь открывается.

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

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

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

Программа

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

Давайте попробуем прочитать информацию с карты. Воспользуемся для этого скетчем DumpInfo из библиотеки RC522.

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

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

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

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

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

Штырь для клавиатуры Штырь Arduino

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

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

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

Связь между Arduino, LCD и RFIDДомофон на Arduino, LCD и RFID

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

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

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

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

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

LCD контакты

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

Характеристики контактов

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

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

Функции библиотеки

PCD_DumpVersionToSerial () — отправляет версию прошивки считывателя на дверной монитор

PICC_IsNewCardPresent () — Проверяет отправленную метку

PICC_ReadCardSerial () — считывает данные с метки

PICC_DumpToSerial () — загружает данные метки в монитор порта

PICC_GetType () — тип карты

PICC_GetTypeName — имя карты

Купить модуль RC-522 на AliExpress

Часто задаваемые вопросы faq

  1. Что делать, если модуль не читает метку?

Интерфейсы и назначение выводов

Микросхема MFRC522 поддерживает интерфейсы SPI, UART и I2C (см. рисунок 2). Выбор интерфейса осуществляется установкой логических уровней на определенных выводах микросхемы. На данном модуле выбран интерфейс SPI.

Рисунок 2. RFID модуль RC522 – назначение выводов

Назначение выводов интерфейса SPI:

Сигнал сброса RST – это сигнал, поступающий от цифрового выхода контроллера. При поступлении сигнала LOW происходит перезагрузка считывателя. Также ридер установкой на RST низкого уровня  сообщает, что находится в режиме сна, для вывода модуля из режима сна необходимо подать на данный вывод сигнал HIGH.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *