- PVSM.RU - https://www.pvsm.ru -
На форумах периодически возникают желающие слепить из arduino starter kit свою СКУД для машины, офиса. По схождению звёзд и при поддержке вдохновения, черпаемого из новостей о Free and open-source software (FOSS), именно этим мы решили заняться в свободное от учёбы время. Описание промежуточного результата работы оформили для подачи заявки на публикацию в почти небезызвестный журнал [1]. Окромя воды и кратких определений составных частей, в нём собрано описание всего необходимого для написания, успешной компиляции и прошивания скетча, управляющего моделью. Заявленная цель работы – создание аналога того, что сейчас на эту тему можно найти на рынке, который был бы конкурентоспособен за счёт низкой цены.
Системы контроля и управления доступом (СКУД) – это эффективная контрольно-пропускная система, которая позволяет управлять безопасностью объекта и осуществлять контроль доступа. Целью работы является демонстрация возможности реализации модели СКУД на базе программно совместимого аналога arduino, которая будет существенно более выгодной в коммерческом плане по сравнению с существующими промышленными аналогами.
Ключевые слова. Безопасность, инженерно-техническая защита информации, защита информации, предохранительные устройства и мероприятия, контроль территории, носимые устройства авторизации, RFID, токен, Arduino.
Одним из направлений обеспечения информационной безопасности на предприятии или в организации является инженерно-техническая защита, в рамках которой используются системы контроля и управления доступом.
Перед проектирующим систему информационной защиты организации специалистом нередко ставится задача обеспечения для сотрудников защиты на некоторой территории, внутри которой возможен свободный обмен. В качестве элемента такой системы можно предложить устройства, разрабатываемые на базе плат Arduino.
Используемая для реализации системы технология Radio Frequency IDentification (радиочастотная идентификация – РЧИ) — это метод удаленного хранения и получения информации путем передачи радиосигналов с помощью устройств, называемых RFID-метками [Технология 13.56 МГц [2], Принцип работы RFID [3]]. Данная технология является одной из тех, элементами которых являются носимые пользователями систем, построенных на этих технологиях, специальные высокотехнологичные идентификаторы — токены(англ. token).
Использованный нами архитектурный тип метки – «пассивная». Пассивные RFID-метки не имеют встроенного источника энергии. Чип, обеспечивающий работу метки, питается от индуцируемого в антенне сигналом запроса электрического тока.
Таблица 1
Пассивные RFID — метки
Функциональные возможности. | Только прочтение/прочтение-запись. |
Частота. | 125KHz / 13.56MHz / 915 МHz / 2.45GHz прочтение-запись. |
Расстояние прочтения. | До 6 м + (с установленной антенной). |
Размеры. | Разные, ~ 0,8 мм в диаметре. |
Вес. | 6 — 54 гр. |
Память. | До 16 Kbit. |
Срок эксплуатации. | 10 лет. |
Температурный режим. | — 40 до + 70 по Цельсию. |
Ниже приведён пример распределения характеристик РЧИ-меток по рабочим частотным диапазонам:
Таблица 2
Классификация RFID по диапазонам частот:
Характеристика | Низкие частоты (НЧ, LF) – 125-134 КГц | Высокие частоты (ВЧ, HF) – 13,56 МГц | Ультра-высокие частоты (УВЧ, UHF) – 860-960 МГц | Микроволны (SHF) – 2,4 ГГц |
---|---|---|---|---|
Максимальное расстояние считывания | от 3 до 70 см. | от 3 до 100 см. | от 10 см до 4 м. | 2-10 м. |
Скорость передачи данных радиометка-считыватель | около 9600 бит/сек. | до 64 кбит/сек. | до 128 кбит/сек. | до 128 кбит/сек. |
Наличие антиколлизии | Есть, но не у всех микросхем. | Есть. | Есть. | Есть. |
Объем памяти радиометки | 32-1024 байта. | 8-16384 байт. | 64-1024 бит (ISO), 64 или 96 бит (EPC). | от 64 бит до 32 кбит. |
СКУД на основе РЧИ устанавливаются повсюду, где целесообразно оные устанавливать. Это территории, доступ на которые должен предоставляться строго ограниченному кругу лиц. Кроме того, RFID применяются при изготовлении европейских и американских паспортов, различных кредитных карт; в животноводстве, системах охраны автомобилей.
Далее описывается сценарий взаимодействия с системой (рис. 1). Сотрудник предприятия или предполагаемый злоумышленник, проходя на контролируемую территорию, предоставляет свою RFID-метку. Модуль системы, отвечающий за получение информации с RFID-метки должен выполнить считывание и проанализировать полученные данные, используя базу данных системы, содержащую соответствия между записями на метках и сотрудниками, которым метки принадлежат. Если предоставленная метка зарегистрирована в базе, то система должна пропустить работника. В ином случае – опционально просигнализировать о неудаче авторизации.
Рис. 1. Модульная диаграмма.
Стрелками указаны пути обмена информацией между компонентами.
Устройством управления будет выступать плата Arduino с записанной в её контроллер программой. Чтением информации с RFID-метки займётся специальная схема RFID-RC522[Mifare RC522 RFID Модуль [4]], а сигналы о работе модели системы будут подаваться при помощи светодиода и элементарного аудиоустройства (buzzer)[Buzzer Arduino Example Code [5]]. Работу модуля контроля доступа будет исполнять сервомотор SG90 [SG 90 9g Micro Servo [6]].
Выбранная в качестве базы для разработки системы платформа Arduino обеспечена разработанным для использования именно с ней ПО[Arduino code tutorials and examples [7]].
Бесплатно распространяющаяся интегрированная среда разработки Arduino IDE 1.0.6 решает задачу удобных написания, компилирования и загрузки управляющего кода.
Для работы с модулем RFID-RC522 была задействована библиотека <MFRC522.h>[Arduino library for MFRC522 [8]]. Использование методов из объявленного в ней класса MFRC522 – это возможность считывания информации с RFID-меток. В данном случае мы определяем «своих» при помощи только uid метки. Это четыре байта, при совпадении которых с записанными будет подаваться сигнал об успешной авторизации и производиться действия, символизирующие предоставление доступа.
Для управления сервомотором понадобилась поставляемая вместе с IDE <Servo.h>, содержащая, кроме прочих, описание класса Servo. Данный класс «подключается» к указываемому по номеру порту и позволяет при помощи предоставляемого им методов attach(int port) и write(int val) выбирать порт для работы с сервомотором и задавать положение ротора сервомотора соответственно.
Рис. 2. Принципиальная схема
/*
<Программа контроллера модели системы СКУД на Arduino. Использует buzzer, RGBLED и RFID-reader>
Copyright (C) <2014> <Ilyin I.I. Zubov Y.M.>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <SPI.h> // стандартная в Arduino IDE библиотека для работы с SPI шиной. Шта? https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface
#include <Servo.h> // стандартная в Arduino IDE библиотека для управления сервомоторчиком
#include <MFRC522.h> // Хэдер с одноимённым классом для управления РЧИ-читалкой. Шта? https://github.com/miguelbalboa/rfid
// Номера пинов управления РЧИ-читалкой
#define SS_PIN 10
#define RST_PIN 9
const int RGB_LED_PINUMBERS[] = { 5, 6, 7 }; // Номера пинов-выходов для RGB-светодиода
const int SERVO_PINUMBER = 3; // Номер пина управления сервомоторчиком
const int BUZZER_PINUMBER = 4; // номер пина управления пищалкой
const int BUTTON_PINUMBER = 2; // номер входа, подключенный к кнопке
const int NEW_CARD_CHECK_DELAY = 500; // задержка между проверками поднесённости карты в милисекундах
const int OPEN_CLOSE_DELAY = 3000; // задержка между открытием и закрытием
const byte tehUID[4] = { 0x33, 0xFF, 0x6B, 0x9A }; // tehUID карты, на котороую реагируем положительно
bool buttonState = 0; // переменная для хранения состояния кнопки
enum States { // Состояния контроллера:
wait, check, open, close
}; States state; // текущее состояние
bool rightCard; // Для запоминания в цикле проверки верности карты, верна ли она
bool white; // Состояние светодиода(горит ли), пока находимся в состоянии ожидания карты
int pos = 0; // Положение ротора сервомотора (градусы)
Servo myservo; // Экземпляр Servo для управления сервомотором
MFRC522 mfrc522(SS_PIN, RST_PIN); // Экземпляр MFRC522 для управления РЧИ-ридером.
void setup() {
Serial.begin(9600); // Начать общение с компом по последовательному порту
SPI.begin(); // Инициализация SPI-шины.
mfrc522.PCD_Init(); // Инициализация РЧИ-читалки
myservo.attach(SERVO_PINUMBER); // Инициализация управляющего сервоприводом объекта с указанием пина для работы
Serial.println("Scan PICC to see UID and type..."); // разговариваем с портом, ага.
white = false; // До начала работы светодиод не горит
state = wait; // Работа начинается с состояния ожидания
// активируем на выход пины для RGB-лампочки:
pinMode(RGB_LED_PINUMBERS[0], OUTPUT); // red
pinMode(RGB_LED_PINUMBERS[1], OUTPUT); // green
pinMode(RGB_LED_PINUMBERS[2], OUTPUT); // blue
pinMode(BUZZER_PINUMBER, OUTPUT); // активируем на выход пин для гудка
pinMode(BUTTON_PINUMBER, INPUT); //активируем пин на вход, ждем кнопку
}
void loop() {
switch (state){
case wait:
Waiting();
return;
case check:
Checking();
return;
case open:
Opening();
return;
case close:
Closing();
return;
}
}
void Waiting(){
delay(NEW_CARD_CHECK_DELAY);
/// мигаем белым:
if (!white){
digitalWrite(RGB_LED_PINUMBERS[0], HIGH); // зажигаем светодиод
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // зажигаем светодиод
digitalWrite(RGB_LED_PINUMBERS[2], HIGH); // зажигаем светодиод
white = true;
}
else{
digitalWrite(RGB_LED_PINUMBERS[0], LOW); // зажигаем светодиод
digitalWrite(RGB_LED_PINUMBERS[1], LOW); // зажигаем светодиод
digitalWrite(RGB_LED_PINUMBERS[2], LOW); // зажигаем светодиод
white = false;
}
// проверяем наличие новой карты:
if (mfrc522.PICC_IsNewCardPresent())
state = check;
// считываем значения с входа кнопки
buttonState = digitalRead(BUTTON_PINUMBER);
// проверяем нажата ли кнопка
// если нажата, то buttonState будет HIGH:
if (buttonState == HIGH) {
state = open;
}
}
void Checking(){
// Желтеем:
digitalWrite(RGB_LED_PINUMBERS[0], HIGH); // зажигаем красный
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // зажигаем зелёный
digitalWrite(RGB_LED_PINUMBERS[2], LOW); // тушим синий
// Считываем UID одной из поднесённых карточек
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
delay(500);
rightCard = true; // Забываем о предыдущей проверке
// Проверяем считанный UID:
for (byte i = 0; i < 4; i++) {
if (tehUID[i] != mfrc522.uid.uidByte[i])
rightCard = false;
}
if (rightCard)
state = open; // Открываемся, если та самая
else{
Serial.println("Unknown CARD.");
digitalWrite(5, HIGH); // зажигаем светодиод
digitalWrite(6, LOW); // тушим светодиод
digitalWrite(7, LOW); // тушим светодиод
digitalWrite(4, HIGH);
//buzz(4, 7000, 2000); // buzz the buzzer on pin 4 at 2500Hz for 500 milliseconds
delay(2000); // wait a bit between buzzes
digitalWrite(4, LOW);
state = wait; // Ждём другую, если не
}
}
void Opening(){
Serial.println("OPEN");
digitalWrite(RGB_LED_PINUMBERS[0], LOW);
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // Зеленеем
digitalWrite(RGB_LED_PINUMBERS[2], LOW);
delay(500); // имитируем активную деятельность. Считывание происходит гораздо быстрее. Эта задержка создана для красоты презентации.
ServoOpen();
state = close;
}
void Closing(){
delay(OPEN_CLOSE_DELAY);
digitalWrite(RGB_LED_PINUMBERS[1], LOW); // Обеззелёниваемся
ServoClose();
state = wait;
}
// Две процедурки поворота ротора сервы на 180:
void ServoOpen(){
for (pos = 0; pos <= 180; pos += 1){ // Крутим с нулеградусного положения на противоположное по одному градусу
myservo.write(pos); // Говорим серве двигаться на градус далее
delay(15); // 15мс ждём завершения поворота
}
}
void ServoClose(){
for (pos = 180; pos >= 0; pos -= 1){
myservo.write(pos);
delay(15);
}
}
/*
Программа написана для работы, выполненной из любопытства и, по схождению звёзд, для участия
в конференции БИП 2014.
Код распространяется под лицензией GPLv3. На здоровье.
Текст лицензии: http://www.gnu.org/licenses/gpl-3.0.html
*/
Рис. 3. Внешний вид результата сборки Уроки Fritzing [9]
Видео демонстрация:
Презентация [10]
По окончании процесса проектирования, сборки и тестирования можно подвести итог – подсчитать наши немодельные затраты и сравнить их суктами, предлагаемыми на рынке. Под немодельными затратами понимаем реально обеспечивающие должную работу системы модули. В данном случае используемые нами компоненты не будут заменены, но система требует модуля контроля доступа. Примером может послужить магнитный замок.
Приведённые в таблице цены получены в процессе анализа рынка данных компонентов на момент выполнения работы и признаны авторами «умеренными».
Таблица 3
Список компонентов и цены:
Обозначение | Кол-во | Тип | Свойства | Стоимость |
---|---|---|---|---|
LED1 | 1 | RGB LED | 4х контактный RGB светодиод с общим анодом | 10-20р / шт |
R1,R2,R3 | 3 | 220Ωрезистор | допуск ± 5% сопротивление 220Ω | 30р / 50шт |
SG1 | 1 | Buzzer 12mm | Зуммер 12мм | 5р / шт |
Часть1 | 1 | Arduino Uno (Rev3) | микроконтроллер платы на основе ATmega328 | 300-400р / шт |
Часть 2 | 1 | RFID-RC522 | Модуль чтения-записи RFID карт на частоте 13,56 Мгц | 250-350р / шт |
Результатом нашей работы стала модель СКУД, не претендующая на статус прототипа готового коммерческого продукта. Данный программно-аппаратный комплекс не завершен, что делает затруднительным оценку результирующей стоимости нашего устройства. Но уже на основе имеющихся у нас данных можно сказать, что материальные затраты на техническую сторону реализации данной системы (предполагается написание комплекса программных решений, предоставляющих управление ею с помощью ПК), незначительные по сравнению с существующими промышленными аналогами. А труд, приложение которого необходимо для окончательной реализации всей СКУД, является студенческим, то есть бесплатным.
P.S. Для дальнейшего сокращения стоимости СКУД можно использовать touch memory вместо RFID и более дешевый аналог Arduino (Nano).
Автор: veter069
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/81627
Ссылки в тексте:
[1] журнал: http://www.info-secur.ru/index.htm
[2] Технология 13.56 МГц: http://idcards.ru/materials/technology/skud/hif.php
[3] Принцип работы RFID: http://www.ms-keys.narod.ru/princip_proxi.htm
[4] Mifare RC522 RFID Модуль: http://arduino.ru/forum/apparatnye-voprosy/mifare-rc522-rfid-modul
[5] Buzzer Arduino Example Code: http://www.faludi.com/2007/04/23/buzzer-arduino-example-code/
[6] SG 90 9g Micro Servo: http://datasheet.sparkgo.com.br/SG90Servo.pdf
[7] Arduino code tutorials and examples: http://arduino.cc/en/Tutorial/HomePage
[8] Arduino library for MFRC522: https://github.com/miguelbalboa/rfid
[9] Уроки Fritzing: http://blog.amperka.ru/уроки-fritzing
[10] Презентация: https://drive.google.com/file/d/0B-tk-VyBe4iWVno2QlBrSnVRVHc/view?usp=sharing
[11] Источник: http://habrahabr.ru/post/249693/
Нажмите здесь для печати.