Как известно, компьютеры были изобретены в 1871 году, но только в 1961 году контроль доступа к ним (ПК) начали осуществлять с помощью пароля. В настоящее время кроме буквенно-цифровых паролей доступно и множество новых, появившихся сравнительно недавно, способов идентификации: с помощью жестов, отпечатка пальца, распознавания лица и многое другое.
В этой статье мы рассмотрим как разблокировать компьютер, работающий на операционной системе Windows, с помощью платы Arduino и меток RFID (Radio Frequency Identification - радиочастотная идентификация). К компьютеру будут подключены плата Arduino и считыватель RFID меток и чтобы разблокировать компьютер нужно будет всего лишь поднести "правильную" радиочастотную метку к считывателю RFID меток.
На нашем сайте вы можете посмотреть все проекты, в которых используется радиочастотная идентификация.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- RC522 RFID reader (считыватель радиочастотных меток) (купить на AliExpress).
- RFID метки.
- USB кабель.
- Соединительные провода.
Считыватель RFID меток RC522
Сейчас на рынке доступно достаточно много моделей считывателей RFID меток, однако для нашего проекта мы выбрали модуль RC522, работающий по интерфейсу SPI. Это достаточно дешевое устройство, доступное для покупки практически во всех магазинах радиоэлектроники. Модуль RC522 имеет интерфейсы SPI, UART и I2C, однако по умолчанию он использует интерфейс SPI. Внешний вид данного модуля показан на следующем рисунке.
В этом проекте модуль RC522 подключен к плате Arduino, а плата Arduino подключена к компьютеру. Когда RFID метку подносят к модулю RC522, плата Arduino с его помощью считывает идентификатор RFID метки (ID number) и передает его в компьютер.
Схема проекта
Схема подключения считывателя RFID меток RC522 к плате Arduino представлена на следующем рисунке.
Поскольку RFID модуль RC522 работает по интерфейсу SPI, то подключить его к плате Arduino достаточно просто – мы соединили его контакты MISO, MOSI, SCK и NSS к контактам SPI платы Arduino Uno. Модуль RC522 запитывается от контакта 5V платы Arduino. Сама же плата Arduino получает питание по USB кабелю от компьютера. Полный список соединений в схеме представлен в следующей таблице.
Модуль RC522 | Плата Arduino Uno |
VCC | 3.3V |
GND | GND |
RST | D9 |
MISO | D12 |
MOSI | D11 |
SCK | D13 |
SDA/NSS | D10 |
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Установка блокировки/разблокировки компьютера с помощью RFID
После сборки схемы проекта подключите плату Arduino к компьютеру. Определите COM порт компьютера, к которому подключилась плата Arduino – это можно сделать либо с помощью диспетчера устройств Windows, либо с помощью Arduino IDE как показано на следующем рисунке. В нашем случае плата Arduino оказалась подключенной к COM порту под номером 1.
После этого в плату Arduino необходимо загрузить код программы для работы с модулем RC522 – он приведен в конце статьи. После загрузки кода программы в плату откройте окно монитора последовательной связи (serial monitor). Затем прислоните RFID метку к модулю RC522, после чего вы увидите в окне монитора последовательной связи 5 значений. Эти значения необходимо скопировать себе в "укромное место" и закрыть окно монитора последовательной связи. Полученные нами значения показаны на следующем рисунке.
После этого скачайте каталог с настройками RFID (rfid_configuration folder) по следующей ссылке - rfid_configuration ZIP file. По этой ссылке вы скачаете ZIP архив, в котором будет 4 файла.
После распаковки ZIP архива зайдите в нем в каталог с именем 32 bit или 64-bit в зависимости от того 32 или 64-разрядная у вас операционная система. В этом каталоге откройте текстовый файл RFIDcredentials.txt. Вставьте в него свои значения из окна монитора последовательной связи (которые вы получили ранее) и обновите (укажите свои) имя пользователя (user name) и пароль (password). Если вы хотите добавить две карты для входа в операционную систему, то заполните и вторую строчку в файле RFIDcredentials.txt как показано на следующем рисунке.
После этого сохраните и закройте этот файл. Затем откройте из этой же папки файл RFIDCredSettings, измените в нем номер COM порта, к которому подключена плата Arduino, на свой, сохраните и закройте этот файл. Остальные значения в файле не меняйте.
Теперь скопируйте все 4 элемента нашего каталога, которые вы извлекли из скачанного ZIP архива и изменили в них часть значений на свои, в каталог C:\Windows\System32. Если система потребует подтверждения этой операции – подтвердите ее.
Теперь запустите файл реестра (register file) чтобы внести изменения в реестр. При этом, скорее всего, вы на своем экране увидите примерно следующее диалоговое окно:
Нажмите "yes", затем "ok". После этого осуществите выход из системы и вы увидите что в систему был добавлен еще один пользователь – с именем RFID.
Вход в учетную запись этого пользователя теперь можно будет осуществлять с помощью RFID карт/меток. То есть никакого пароля на вход в систему вводить уже не будет нужно – достаточно будет всего лишь прислонить RFID метку к RFID считывателю и вход в систему произойдет автоматически.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе нам необходимо подключить заголовочные файлы всех используемых библиотек и определить контакты для RFID RST_PIN и SS_PIN. Если в вашей Arduino IDE еще нет библиотеки для работы с модулем RC522 (mfrc522 library), то вы можете скачать ее по следующей ссылке - MFRC522 Arduino Library. После скачивания библиотеку необходимо добавить в вашу Arduino IDE.
1 2 3 4 5 6 7 8 |
#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522: : MIFARE_KEY; |
Затем в функции void setup мы инициализируем последовательную связь со скоростью 9600 бод и связь по интерфейсу SPI со считывателем RFID меток.
1 2 3 4 5 6 7 8 9 10 |
void setup() { serial.begin(9600); while(!Serial); SPI.begin(); mfrc522.PCD_Init(); for(byte i = 0; i < 6; i++) Key.KeyByte[i] = 0xFF; serial.print('>'); } |
После этого в функции void loop() мы будем ждать когда к считывателю прислонят RFID карту.
1 2 3 4 5 6 7 8 9 |
void loop() { if( ! mfrc522.PICC_IsNewCardPresent() ) return; if( ! mfrc522.PICC_ReadCardSerial() ) return; send_tag_val (mfrc522.uid.uidByte, mfrc522.uid.size); delay(1000); } |
Если карта будет найдена, то произойдет вызов функции send_tag_val, которая передаст данные из RFID метки в компьютер с помощью порта последовательной связи. Эти данные в компьютере будут сравниваться с данными, которые мы ранее сохранили в файле – при их совпадении будет осуществлен вход (разблокировка) в систему.
1 2 3 4 5 6 7 8 9 10 11 |
void send_tag_val (byte *buffer, byte buffersize) { serial.print("ID"); for (byte i = 0; i < buffersize; i++) { serial.print(buffer[i], DEC); serial.print(" "); } serial.printIn(0, DEC); serial.print('>'); } |
Более подробно работа проекта показана в видео, приведенном в конце статьи.
Исходный код программы (скетча)
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 34 35 36 37 38 39 40 41 |
#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; Serial.print('>'); } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) return; if ( ! mfrc522.PICC_ReadCardSerial()) return; send_tag_val(mfrc522.uid.uidByte, mfrc522.uid.size); delay(1000); } void send_tag_val(byte *buffer, byte bufferSize) { Serial.print("ID:"); for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i], DEC); Serial.print(" "); } Serial.println(0, DEC); Serial.print('>'); } |
Как посмотреть содержимое .dll?
Есть ли пояснения по их работе?
Ну так в сети огромное количество информации по этому вопросу - https://yandex.ru/search/?text=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C+%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5+dll+%D1%84%D0%B0%D0%B9%D0%BB%D0%B0&search_source=dzen_desktop_safe&src=suggest_B&lr=213
Да, спасибо))
Это мы умеем))
Интересно, есть ли пояснения по коду и по работе используемых в проекте файлов .dll ?
Ну вы слишком многого хотите от проекта простого энтузиаста в электронике ))
Тогда интересно, откуда Вы брали .reg и .dll файлы?
Сами написали?)))
Нет, статья переведена с иностранного сайта, ссылку забыл поставить, но если смотреть видео из статьи на ютубе, то там ссылка на источник статьи есть
Возникла проблема при создании учётной записи. Решением было извлечь файлы из папки 64/32 Bit и положить их в System32 и применить рег файл.
Я рад что вы справились. Спасибо за конструктивный комментарий для нашего сайта
Добрый день, требуется помощь. Работает всё, кроме создания пользователя. На видео используется Windows 7, в свою очередь у меня Windows 10. Есть ли возможность сделать как-то для Windows 10?
Доброе утро, к сожалению сейчас уже нет возможности заново собрать этот проект. Я думаю, как это делается, можно сравнительно легко найти на соответствующих сайтах про настройку и исправление ошибок работы в операционных системах Windows
Login failed. Всё сделано по мануалу
А кроме этой ошибки все остальные функции программы работают, не проверяли?
Проблему решили? У меня возникла такая же ошибка. не знаю, что и делать
Добрый день ! Нужна помощь, в MFRC522 Arduino Library какой нужно выбрать пример из библиотеки чтобы загрузить код програмы и узнать связь из 5-ти значений?
Добрый вечер. К сожалению, я не помню. Сейчас нет Arduino IDE под рукой, не могу посмотреть
Добрый день! Требуется ваша помощь. Выполняю все по пунктам, но не создаётся пользователь, и ничего не происходит при прикладывании карты. Ответьте пожалуйста, очень необходима помощь в этом вопросе!
Добрый вечер, насчет нюансов при создании нового пользователя в Windows не помогу, не очень силен в этих вопросах - вам лучше поискать ответ на это на специализированных сайтах про компьютеры, а с программой на Ардуино могу попробовать помочь. У вас при выполнении программы выводятся указанные в статье данные в монитор последовательного порта связи?