Устройство контроля доступа по RFID меткам.
Автор: Сайфутдинов Эдуард Ирекович МБОУ «Лянторская СОШ №6» Сургутский район г.Лянтор
Научный руководитель: Инчин Александр Николаевич, учитель технологии МБОУ «Лянторская СОШ №6»
Сургутский район г.Лянтор
Введение.
В современном мире зачастую очень мало времени остается на необходимую, но рутинную работу, поэтому прибегают к автоматизации. Одной из такой деятельности является учет и контроль рабочего времени работников, а также безопасность на предприятии или организации.
Конечно существуют специализированные системы для контроля доступа имеющие множество функций, но как правило они стационарные и жестко привязаны к одному месту и имеют малую автономность, и достаточно дороги.
Моя работа направлена на разработку устройства контроля доступа, имеющего небольшие размеры и позволяющее организовать контроль практически в любом месте где это требуется - мобильность, а также его автономность и небольшую стоимость.
Цель: в ходе работы над проектом получить готовое устройство, выполняющее функции контроля доступа и учета прихода и ухода работника.
Задачи:
Разработка устройства на доступных электронных компонентах, с использованием микроконтроллера;
Разработка алгоритма работы устройства
Разработка программного обеспечения на основе полученного алгоритма;
Сборка и проверка работоспособности устройства
Объектом для моей работы является изучение функционирования подобных систем, их устройства и реализации способов контроля доступа и фиксации времени.
Предметом исследования является функционирование и программирования микроконтроллеров, электронных компонентов систем контроля и их реализация.
Общие сведения о системах электронных контроля.
В физической безопасности термин «контроль доступа» относиться к практикам ограничения доступа к собственности, в здания или помещения, доступ к которым разрешён только для авторизованных людей. Физический контроль доступа может быть достигнут путём использования человека (охранник, служащий в приёмной), через механические способы, такие как замки и ключи на двери, или через технологические средства, такие как системы доступа, основанные на картах доступа или биометрическая идентификация.
В большинстве организаций, которые используют информационные системы для работы, на входе, если не в рабочее помещение, то в здание находится специально обученный человек с надписью «охрана» или «служба безопасности», который обычно требует предъявить пропуск тех, кто работает в этом здании и записывает в журнал всех, кто не работает в этом здании/помещении, но по каким-то деловым вопросам должен пройти внутрь
Система контроля доступа определяет то, кому разрешено входить или выходить, где им разрешено выходить или выходить, куда им разрешено выходить или выходить и когда им разрешено входить или выходить. В данном случае подразумеваем тех, у кого он есть. Точками контроля доступа могут быть двери, турникеты, ворота, шлагбаумы, места на парковке, лифты или другие физические преграды, где получение доступа может быть проконтролировано электроникой. Обычно точкой контроля доступа является дверь, а доступ контролируется магнитным замком и считывателем карт.
Для системы можно сформулировать следующие требования.
• Контроль доступа
• Учёт рабочего времени
• Повышение качества охраны
• Интеграция с текущей IT-инфраструктурой
• Исключение несанкционированного доступа к рабочим местам (АРМ).
• Разграниченный контроль для разных групп сотрудников
• Возможность аппаратного расширения функций устройства
Аппаратная реализация проекта.
Для реализации нужно обязательно использовать микроконтроллер — это связанно с тем, что устройство должно считывать и записывать идентификатор. На обычных электронных компонентах реализация будет очень сложна, нужно использовать большое количество деталей. Нужно реализовать банк для хранения данных – использовать отдельные программируемы микросхемы памяти программирование которых производится на языке ассемблер что достаточно сложно.
Теперь нужно определиться с каким микроконтроллером будем работать их достаточно много, он должен быть недорогим, производительным, имеющим возможность подключения периферийных устройств, достаточно экономным в лане потребления электричества, чтобы обеспечить автономную работу.
На данный момент широко распространены микроконтроллеры PIC производства Microchip Technology Inc и AT MEGA производства Atmel. В обоих случаях гамма микропроцессоров очень большая, позволяем решать широкий спектр задач. Но на базе микропроцессоров AT MEGA существуют готовые решения, которые не дороги и отличаются хорошим набором функций и количеством интерфейсных разъемов. Решения на базе микропроцессоров AT MEGA называются ARDUINO, в проекте я буду использовать плату Arduino UNO R3 рисунок 1.
Рисунок 1. Общий вид платы.
Удобство работы с Arduino заключается еще в том, что для нее создана специальная среда Arduino ide которая имеет русскую локализацию, и имеет большое количество библиотек периферийных устройств, что упрощает программирование.
В качестве идентификатора можно использовать различные метки или RFID. Данные метки могут быть выполнены в различном форм-факторе, я решил использовать в виде карточки рисунок 2, потому что на нее можно нанести наклейку с данными владельца.
Рисунок 2. Общий вид RFID карты.
Для того чтобы можно было считывать такие карточки для Arduino существует модуль расширения RC522 рисунок 3.
Рисунок 3. Общий вид модуля RC522.
Для выполнения моего проекта это минимальный набор компонентов чтобы построить устройство для считывания карт. В процессе наладки устройства будут добавляться компоненты для расширения функций устройства.
Практическая реализации проекта.
Реализацию проекта можно разделить на два этапа:
Сборка устройства заключается в подключении модуля считывателя к плате Arduino в соответствии с требованиями для разъемов на платах считывателя и Arduino.
Считыватель поддерживает интерфейсы SPI, UART и I2C через которые происходит обмен данными с другими приборами. На плате модуля RFID RC522 установкой логических уровней на специальных выводах микросхемы выбран интерфейс SPI. С одним Arduino могут работать несколько приборов, подключенных к шине SPI.
Рассмотрим интерфейсный разъем (рисунок 4) считывателя и схему согласования с Arduino (рисунок 5).
Рисунок 4. Интерфейсный разъем RFID RC522
Где: SDA (SS, CS, NSS) выбор ведомого, вход SPI
SCK тактовый сигнал SPI, вход
MOSI передача от мастера к помощнику, вход SPI
MISO передача от помощника к мастеру, выход SPI
IRQ прерывание, выход
GND общий
RST сброс, вход
3.3 V питание
Рисунок 5. Схема согласования считывателя RFID RC522 с главным модулем Arduino.
Следует отметить что подключение к различным платам Arduino может отличаться поскольку плата считывателя питается напряжением 3,3В, а плата Arduino может не иметь такого преобразователя. В таблице 1 приведены подключения модуля к различным платам.
RFID rc522 | Arduino Mega | Arduino Uno и Nano v3 | Arduino Leonardo и Micro | Arduino Pro Micro | CraftDuino |
MISO | 50 | 12 | ICSP-1 | 14 | 12 |
MOSI | 51 | 11 | ICSP-4 | 16 | 11 |
SCK | 52 | 13 | ICSP-3 | 15 | 13 |
SDA | 53 | | 10 | | |
Таблица 1. Подключение RFID RC522 к различным типам контроллера Arduino.
На рисунке 6 представлена принципиальная схема подключения RFID RC522 к Arduino
Рисунок 6. Принципиальная схема подключения RFID RC522 к Arduino.
Подключаем обе платы в соответствии с принципиальной схемой. На этом первый этап работы над устройством закончен, переходим к программированию Arduino.
Работа над программой будет происходить в Arduino IDE, удобство данной среды программирования заключается в том, что есть множество библиотек для переферийных устройств в том числе и для RFID RC522. Программа будет написана с помощью применения этой библиотеки.
Далее листинг программы:
Считывание серийного номера карты:
#include
#include
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
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 ) {
/* Если карта - новая, то считываем*/
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("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 {
/* Если это уже считанная карта, просто выводим точку */
Serial.print(".");
} } }
rfid.halt(); }
В мониторе COM порта будут отображаться серийные номера карт.
Рисунок 6. Монитор СОМ порта.
Окончательный код программы для устройства где используется 2 светодиода и баззер.
/* buzzer, RGBLED и RFID-reader
#include // библиотека "RFID".
#define bazzer 5
#define SCK_PIN 13
#define SS_PIN 10
#define RST_PIN 9
#define PIN_CS 4
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
void setup() {
Serial.begin(9600);
if(!SD.begin(PIN_CS)){
Serial.println("SD-card not found"); return;
}
Serial.println("Waiting for card...");
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
}
void loop() {
// Поиск новой метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор метки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; 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); // Делаем звуковой сигнал, Открытие
delay(3000); // пауза 3 сек и механизм запирается.
tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие