Один из важнейших вопросов при создании умного дома – безопасность. Рассмотрим организацию доступа по технологии RFID с помощью карт доступа.
 Радиочастотная RFID — это технология автоматической бесконтактной идентификации объектов при помощи радиочастотного канала связи. Любая RFID-система состоит из:
 
 •    RFID-метки;
 •    считывателя информации (RFID-ридера);
 •    микроконтроллера или компьютера для дальнейшей обработки информации.
 
 Идентификация объектов производится по уникальному цифровому коду, который считывается из памяти электронной метки, прикрепляемой к объекту идентификации.
 Считыватель содержит в своем составе передатчик и антенну, и посылает в эфир электромагнитные сигналы определенной частоты. RFID-метки "отвечают" собственным сигналом, который содержит информацию об идентификационном номере данной метки и данные об объекте, оснащенном данной меткой. Этот сигнал улавливается антенной считывателя, информация расшифровывается и передается для дальнейшей обработки обработки.
 В состав набора входит модуль RC522 – RFID-модуль 13.56 МГц с SPI-интерфейсом (см. рис. 6.11). В комплекте к модулю идет 2 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-считывателем карты из списка, мы можем отправить сигнал на открытие дверей (например, на электромеханический замок, подключенный через реле).
 
 
  
 Рис. 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 по ссылке .
 
  
  
