대부분의 사람들이 같은 생각을 하겠지만 로그인을 하는 과정은 상당히 번거롭다. 물론 모든 사이트들을 주로 사용하는 아이디와 비밀번호로 설정하면 그리 어려운 일은 아니지만 홈페이지 마다 요구하는 형식이 달라 (예를 들어 대문자 사용이라던지 특수기호, 길이 등등) 아이디, 비밀번호등이 조금씩 다른 경우가 분명이 있을 것이다.
그래서 이번에는 아두이노를 이용하여 자동으로 로그인을 할 수 있는 장치를 만들어 볼 것이다.
우선 보드는 일반적인 우노가 아닌 레오나르도 보드가 필요하다. 아두이노 레오나르도 같은 경우에는 컴퓨터의 마우스, 키보드와 같이 주변기기로 인식되기 때문에 마우스, 키보드 입력들을 조정할 수 있다.
다음으로 RFID 모듈인 RC522가 필요하다. 단순히 버튼을 눌러 자동으로 로그인하는 방식을 선택해도 되지만 도어락등 좀더 다양한 곳에 응용하고자 카드 태그 방식을 이용했다.
아두이노 레오나르도 보드 같은 경우는 비싼 정품보드 대신 호환보드를 구입했다. (호환보드의 가격은 구매처마다 상당히 다르다.) 알리익스프레스등 해외직구가 제일 저렴하나 국내에서도 저렴한 가격을 찾을 수 있었다.
아두이노 레오나르도 : http://www.ic114.com/WebSite/site/sc/00V0.aspx?id_p=P0087297
아두이노 우노와 아두이노 레오나르도에 RC522모듈을 연결하는 방식은 약간 다른데, 각각의 방법은 아래와 같다.
1. 아두이노 우노
2. 아두이노 레오나르도
소스코드
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 |
#include <Keyboard.h>
#include <Mouse.h>
#include <SPI.h> // RFID를 위한 SPI 라이브러
#include <MFRC522.h>// RFID 라이브러
#define SS_PIN 10 //RFID SS(SDA:ChipSelect) PIN
#define RST_PIN 9 //RFID Reset PIN
MFRC522 rfid(SS_PIN, RST_PIN); //RFID 라이브러리
/* 등록된 RF CARD ID (예시)*/
#define PICC_0 0x08
#define PICC_1 0xFE
#define PICC_2 0x90
#define PICC_3 0x04
void setup() {
//시리얼 모니터 시작
Serial.begin(9600);
SPI.begin(); // SPI 시작
rfid.PCD_Init(); // RF 모듈 시작
Mouse.begin();
}
void loop() {
//카드가 인식 안되었다면 더이상 진행하지 말고 빠져나감
if ( ! rfid.PICC_IsNewCardPresent())
return;
//RF카드의 ID가 인식 안되었다면 더이상 진행하지 말고 빠져나감
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
//PICC 타입 읽어오기
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
//MIFARE 방식이 아니라면 더이상 진행하지 말고 빠져나감
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
//ID가 등록된 ID와 동일하다면
if (rfid.uid.uidByte[0] == PICC_0 ||
rfid.uid.uidByte[1] == PICC_1 ||
rfid.uid.uidByte[2] == PICC_2 ||
rfid.uid.uidByte[3] == PICC_3 ) {
Serial.println(F("등록된 카드입니다. 접속을 허가합니다."));
delay(100);
Mouse.click();
delay(100);
Keyboard.print("*****"); //아이디
delay(100);
Keyboard.write(KEY_TAB);
delay(100);
Keyboard.print("*****"); //비밀번호
delay(100);
Keyboard.write (KEY_RETURN);
delay(100);
}
else{
//등록된 카드가 아니라면 시리얼 모니터로 ID 표시
Serial.println(F("경고! 등록되지 않은 카드입니다."));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
}
//종료
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
//다시 시작
}
//16진수 표시
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
} |
cs |
RC522 모듈을 사용하기 위해서는 라이브러리가 필요하다.
메뉴 스케치 -> 라이브러리 포함하기 -> 라이브러리 관리를 선택하고 검색창에 "RFID"를 입력한다. 그러면 "MFRC522 by GithubCommunity"의 라이브러리 파일이 검색되고 이 파일을 설치하면 된다.
소스코드에서 61줄과 65줄에 사용할 아이디와 비빌번호를 입력하면된다. 소스코드에는 예시로 임의의 카드가 등록되어있는데 본인의 카드로 새로 등록하는 방법은 다음과 같다.
아두이노 스케치를 실행한 다음 시리얼 모니터를 열어준다. 그 다음 아우이노 레오나르도가 연결되어있는 상태에서 사용할 카드를 태그하면 아래와 같은 화면이 출력된다.
"In hex :" 다음 출력되는 16진수를 소스코드의 11~16줄의 원래의 16진수를 지우고 새로 입력하면 된다. 만약에 바꾸기전에 접속을 허용한다는 문구가 출력된다면 이미 같은 고유번호의 카드를 가지고 있는 경우이므로 (가끔 중복되는 경우가 있다.) 그대로 사용하면 된다.
아래는 실제 작동영상이다. 간단하게 블리자드에 로그인을 해보았다.
'아두이노' 카테고리의 다른 글
아두이노 I2C 주소 스캔하기 (3) | 2018.01.25 |
---|---|
아두이노를 버튼으로 제어하기 (0) | 2017.12.29 |
wemos d1으로 인터넷 시계 만들기 (0) | 2017.11.14 |
DHT22 온습도 모듈 사용하기 (0) | 2017.11.05 |
NRF24L01 모듈 사용하기 (0) | 2017.11.04 |