Печатать логин и пароль для разблокировки компьютера может быть утомительным занятием, особенно если вводимые данные длинные. Упростить сию задачу можно с помощью 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 принтере можно распечатать корпус, благодаря которому устройство можно смонтировать на внутренней стороне крышки стола.

Видео работы:
Перевод © digitrode.ru