Разблокировка компьютера с помощью NFC
Печатать логин и пароль для разблокировки компьютера может быть утомительным занятием, особенно если вводимые данные длинные. Упростить сию задачу можно с помощью Arduino Leonardo и шилда NFC.
В данном случае Arduino считывает уникальный идентификатор карты NFC и после получения верного номера использует эмулятор клавиатуры для ввода пароля.
Шаг 1:что потребуется
Arduino Leonardo
шилд NFC от Adafruit
NFC-метка (должна поставляться с шилдом), при желании можно приобрести несколько меток
Монтажный провод
В качестве инструментов следует взять:
Острый нож
Олово для пайки
Кусачки для проводов
Компьютер
Кабель microUSB
Шаг 2: аппаратная часть
Вам нужно припаять выводы к шилду и поменять джампер для этого проекта. Для удобства пайки можно выводы вставить в разъем Arduino и затем вставить в них шилд. С помощью острого ножа следует перерезать джампер, связывающий вывод IRQ с выводом 2. Нам нужно это сделать, потому что NFC-шилд не связывается с Arduino по выводу 2. Используйте мультиметр, чтобы проверить наличие или отсутствие контакта. Затем отрежьте небольшой кусок провода и запаяйте его между шестым выводом и выводом IRQ.
Шаг 3: Программная часть
Программа, которую нужно загрузить в Arduino, представлена ниже. Следует заметить, что при этом у вас уже должна быть установлена библиотека Adafruit NFC Library.
#include <Wire.h>
#include <Adafruit_NFCShield_I2C.h>
#define IRQ 6 // this trace must be cut and rewired!
#define RESET 8
Adafruit_NFCShield_I2C nfc(IRQ, RESET);
//////////////////////////////////// SETUP
void setup() {
// set up Serial library at 9600 bps
Serial.begin(9600);
// find Adafruit RFID/NFC shield
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// configure board to read RFID tags
nfc.SAMConfig();
Keyboard.begin(); //initiate the Keyboard
}
/////////////////////////////////// LOOP
unsigned digit = 0;
void loop() {
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// wait for RFID card to show up!
Serial.println("Waiting for an ISO14443A Card ...");
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
uint32_t cardidentifier = 0;
if (success) {
// Found a card!
Serial.print("Card detected #");
// turn the four byte UID of a mifare classic into a single variable #
cardidentifier = uid[3];
cardidentifier <<= 8; cardidentifier |= uid[2];
cardidentifier <<= 8; cardidentifier |= uid[1];
cardidentifier <<= 8; cardidentifier |= uid[0];
Serial.println(cardidentifier);
if (cardidentifier == 606061173) {
Keyboard.write('m');
Keyboard.write('y');
Keyboard.write('p');
Keyboard.write('a');
Keyboard.write('s');
Keyboard.write('s');
Keyboard.write('w');
Keyboard.write('o');
Keyboard.write('r');
Keyboard.write('d');
delay(5000); //makes sure the password isn't repeated
}
}
}
После загрузки кода откройте монитор последовательного соединения на скорости 9600 бод. Поместите на секунду NFC-метку на шилд, а затем уберите ее. Монитор должен показать «Card detected #card number.». Здесь вам нужно скопировать номер карты (#card number) в выражение cardidentifier == 606061173 (вставить свой код). Затем измените строчки с keyboard.write на те, которые определят ваш собственный код. После этого перезалейте код.
Шаг 4: корпус
При желании для такого девайса на 3D принтере можно распечатать корпус, благодаря которому устройство можно смонтировать на внутренней стороне крышки стола.
Примечание
Оригинальное видео работы было удалено автором (видео помечено как приватное).