6.6. Организация доступа в дом с помощью RFID-модуля для Arduino MEGA
Один из важнейших вопросов при создании умного дома – безопасность. Рассмотрим организацию доступа по технологии RFID с помощью карт доступа.
Радиочастотная RFID — это технология автоматической бесконтактной идентификации объектов при помощи радиочастотного канала связи. Любая RFID-система состоит из:

•    RFID-метки;
•    считывателя информации (RFID-ридера);
•    микроконтроллера или компьютера для дальнейшей обработки информации.

Идентификация объектов производится по уникальному цифровому коду, который считывается из памяти электронной метки, прикрепляемой к объекту идентификации.
Считыватель содержит в своем составе передатчик и антенну, и посылает в эфир электромагнитные сигналы определенной частоты. RFID-метки "отвечают" собственным сигналом, который содержит информацию об идентификационном номере данной метки и данные об объекте, оснащенном данной меткой. Этот сигнал улавливается антенной считывателя, информация расшифровывается и передается для дальнейшей обработки обработки.
В состав набора входит модуль RC522 – RFID-модуль 13.56 МГц с SPI-интерфейсом (см. рис. 6.11). В комплекте к модулю идет 2 RFID-метки — в виде карты и брелока. В RFID-метках, работающих на данной частоте, реализована криптографическая защита, что обеспечивает защиту от копирования и подделки.
rfid

Рис. 6.11. RFID-модуль RC522 и RFID-метки.

Основные характеристики:

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

Схема подключения модуля к плате Arduino показана  на рис. 6.12. При определении RFID-считывателем карты из списка, мы можем отправить сигнал на открытие дверей (например, на электромеханический замок, подключенный через реле).

rfid подключение
 
Рис. 6.12. Схема подключения RFID-модуля к плате Arduino MEGA

Приступим к написанию скетча. Для работы с RFID-модулем RC522 будем использовать библиотеки SPI (встроенная в Arduino IDE) и MFRC522.
#include
#include
Уникальные идентификаторы карт или брелоков, по которым доступен вход запишем в массиве uid_ok:
byte uidok[][4]={
                 {0x11,0x22,0x33,0x44},
                 {0x11,0x22,0x33,0x44}
};
Пины для подключения реле:
#define RELAY_RC522_PIN 41
В цикле будем считывать данные с поднесенной карты или брелока, затем проверять uid карты со списком разрешенных uid.
Код скетча представлен в листинге 6.5.
Листинг 6.5

#include <SPI.h>
#include <MFRC522.h>
// пин для подключения реле
#define RELAY_RC522_PIN 41
// уровни для включения/выключения реле
#define RELAY_ON 0
#define RELAY_OFF 1
// Инициализация MFRC522
// константы подключения контактов SS и RST
#define RST_PIN = 5;     
#define SS_PIN = 53;    
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
// массив разрешенных uid
byte uidok[][4]={
                 {0xE0, 0x2A, 0x87, 0x1B},
                 {0xD9, 0xFA, 0x90, 0x55 }
};
 
void setup() {
   Serial.begin(9600); // инициализация последовательного порта
   SPI.begin(); // инициализация SPI
   mfrc522.PCD_Init(); // инициализация MFRC522
   // сконфигурировать вывод реле как OUTPUT
   pinMode(RELAY_RC522_PIN,OUTPUT);
   digitalWrite(RELAY_RC522_PIN, RELAY_OFF);
}

void loop() {
  if (mfrc522.PICC_IsNewCardPresent()) {
   // чтение карты
   if ( mfrc522.PICC_ReadCardSerial()) {     
      // показать результат чтения UID и тип метки
      Serial.print(F("Card UID:"));
      if(compare_uid(mfrc522.uid.uidByte, mfrc522.uid.size)) {
          Serial.println();
          Serial.println(" – ok !!");
          // включить реле
          digitalWrite(RELAY_RC522_PIN, RELAY_ON);
          delay(4000);
          digitalWrite(RELAY_RC522_PIN, RELAY_OFF);
      } else {
          Serial.println();
          Serial.println(" – false !!");
          delay(1000);
      }
   }
  }
}
// поиск считанного uid в списке разрешенных
boolean compare_uid(byte *buffer, byte bufferSize) {
int bytes_ok=0;
   for(int i1=0;i1<2;i1++) {
      bytes_ok=0;
      for (byte i2 = 0; i2 < 4; i2++) {
         Serial.print(buffer[i2] < 0x10 ? " 0" : " ");
         Serial.print(buffer[i2], HEX);
         if(buffer[i2]== uidok[i1][i2]) {
            bytes_ok= bytes_ok+1;
         }
      }
      if(bytes_ok==4) {
         return true;
      }
   }
   return false;
}


Загрузим данный скетч на плату Arduino MEGA и проверим ограничение доступа работу с помощью RFID (см. рис. 6.13).


 
Рис. 6.13. Доступ по RFID-картам.

Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .

 

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 




 

Вверх