개요
도어락에 매번 비밀번호를 누르다 보니 번거롭기도 하고 여는 시간도 오래 걸리고 해서 지문인식 기능을 달아보기로 했다.
과정
필요한 재료 찾기
먼저 컨트롤러는 아두이노를 사용하기로 그냥 결정. 이 참에 아두이노도 써보면 좋을 것 같아서.. 그리고 나머지 필요한 재료들을 찾기로 했다.
아두이노의 경우에는 엄청 작은 아두이노 프로 미니 5v 버전을 사용하기로 했고, 거기 맞춰서 5~12v 사이의 전원이 필요해서 주변을 둘러보다가 집에 굴러다니던 휴대폰 충전 어댑터를 쓰기로 했다. (5v, 1000mA)
핵심이 되는 지문 인식 모듈을 이리저리 찾아보다가 발견한 게 GT-511C3. 처음에는 511C1 버전을 사용하려고 했는데 막상 구매해보니 제대로 동작하지도 않고, 관련 자료들도 부실해서 C3 버전으로 교환했다.
그리고 항상 켜져있을 순 없으니 사람이 앞에 오면 자동으로 켜지도록 근접 모션 센서를 하나 구매했고, 지문 등록 등의 동작을 하기 위해서 CLCD 도 하나 구매했다.
CLCD 의 글자 밝기 조절을 위한 가변저항 하나, 도어락에 인가할 전압을 올리기 위해 콘덴서 하나, 그리고 지문 등록/삭제/내부에서 문 열기 기능등을 위한 조작계로 푸쉬버튼 세 개를 사용했다.
코딩
CLCD
나는 아두이노 해 본 적도 없지만 일단 사들고 와서 LED 몇 개 켜보고 그냥 코딩을 시작했다. 먼저, 지문인식 모듈이 불량이었기 때문에 CLCD 에 글자 표시하는 부분부터 시작했는데, LiquidCrystal 라이브러리(아두이노 SDK 에 포함)를 사용해서 그냥 됐다. 내가 특별히 한 거라곤 열린 자물쇠, 닫힌 자물쇠, 사람모양, 각 버튼 아이콘을 특수문자로 만들어서 CLCD 에 등록하는 거 정도 뿐...
추가로, IDLE 상태일 때는 화면이 꺼지도록 하기 위해서 백라이트를 별도의 가변저항에 연결하지 않고 아두이노의 핀으로 직결했다. HIGH 를 인가하면 그냥 조명에 불이 들어오게. 보통 LED 는 저항 없이 연결하면 안되지만, 애초에 이건 5v 에 직결하도록 되어 있었으니까 별 문제 없을거라고 생각하고 연결했다. 어차피 아두이노에서 나오는 핀이 5v 가 되는 것도 아니고..
모션 센서
별로 쓸 부분이 없다. 아두이노 GND 랑 vcc 에 연결하고 가운데 선을 아두이노 핀에 연결했다. 근접센서 자체에서 모션인식을 받는 텀을 설정하거나 모션인식 받고 나서 일정시간동안 HIGH 를 나타내는 등의 기능이 있지만 그런거 다 귀찮아서 걍 안 쓰고 근접센서에 신호가 오는 경우 일단 IDLE 상태를 벗어난 뒤에 IDLE 상태로 돌아가기 위한 타이머를 일일이 세도록 코딩했다.
버튼
버튼을 임의의 핀 세 개랑 연결하고 (GND는 다 하나로 묶어버림) 각 버튼을 내 맘대로 MODE, SELECT, NEXT 라고 명명했다.
MODE 버튼은 모드를 변경하는 버튼이다. 내가 만든 도어락은 네 개의 모드가 있다.
IDLE 모드
LCD 백라이트도 끄고 지문인식기 LED 도 끄고 아무 동작도 하지 않는다. 이 상태에서 SELECT 버튼을 누르면 문이 열린다. MODE 버튼을 누르거나 근접센서에 사람이 감지되면 WELCOME 모드로 이행한다. 다른 아무 모드에서건 별도의 입력 없이 가만히 내버려두면 일정시간 이후에 이 모드로 돌아온다.
WELCOME 모드
IDLE 모드에서 모드 버튼을 누르거나 근접센서에 사람이 인식되면 이 모드로 온다. 이 모드에서는 지문 입력을 대기하고 있다가 지문이 인식되면 문을 연다. 잘못된 지문이면 안 연다. 여기서 모드 버튼을 누르면 ADD 모드로 이행된다.
ADD 모드
지문을 추가하기 위한 모드다. 이 모드에서 셀렉트 버튼을 한 번 누르면 지문 추가가 시작된다. 지문 추가는 단순히 화면에 나오는 메시지를 따라 손가락을 세 번 인식시키면 된다. 여기서 모드 버튼을 한 번 더 누르면 DELETE 모드로 간다.
DELETE 모드
이미 추가된 지문을 삭제하기 위한 모드다. NEXT 버튼은 이 모드에서만 사용된다. 이 모드에서 셀렉트 버튼을 한 번 누르면 등록된 지문의 번호를 선택하는 모드가 된다. NEXT 를 누를 때마다 번호가 바뀌고 지우고 싶은 번호가 화면에 나오면 셀렉트를 다시 한 번 누르면 삭제된다.
도어락
기존 도어락을 뜯어서 어떤 배선에 HIGH 나 LOW 를 인가해야 문이 열리는 지 확인했다.
이건 각 도어락마다 방식이 다를테니 딱히 뭐라 적을 말이 없네..
하드웨어
배선
배선의 경우에는 처음에는 별 생각이 없었는데, 하다 보니까 선이 생각보다 엄청 많다. 특별히 회로도를 그려보고 시작한 게 아니라서 되는대로 하다보니 헬게이트가 열렸다.
회로도로 깔끔하게 보여주고 싶었는데, 나는 아무리 노력해도 멀쩡한 회로를 그릴 수가 없었다.....또르르..
여튼 먼저 빵판에다가 꽂아서 개발 및 테스트를 했다.
빵판 중간에 빨갛게 빛나는 LED 는 도어락으로 나가는 선을 확이하려고 꽂아둔거..
납땜
동작하는 걸 확인했으니 납땜을 시작했다.
이건 LCD
초보자에겐 너무 가혹한 아두이노 미니의 핀 간격...
하우징
처음에는 판자랑 물라스틱으로 어떻게 해볼까 했는데, 아무래도 야외에 노출되는 부분이 있고 해서 고민하고 있었더니 아버지께서 아크릴로 박스를 만들어주셨다! (깨작거리고 있으니까 재밌어 보였나보다...)
그렇게 만든 하우징에 LCD 랑 센서들을 잘 끼우고 조립!
처음 만들 때 점프선을 하염없이 길게 뽑았더니 도무지 다 들어가질 않아서 조립하면서 납땜을 도로 뜯어내고 선을 줄여가면서 다시 때웠다....또르르
뚜껑 덮으면 외부 유닛 완성!
장착
일단 잘 되는지 다시 한 번 확인하고..
처음에는 9v 건전지를 사용하려고 했었는데 이리저리 따져봐도 비효율적이라 편의점에서 산 휴대폰 충전기 어댑터랑 커넥터가 끊어져서 안 쓰던 USB 연결선을 가지고 전원부도 만들었다.
벽에 선을 이리저리 대보고 구멍을 뚫어서 선을 밖으로 뺀 다음에 실리콘으로 벽에 고정시켰다.
작동 영상
어두워서 그런가 내 카메라가 꼬져서 그런가 글자가 잘 안 보인다 ㅠㅠ
어쨌든 지문인식으로 문 열기 성공!
낮에 나갔다가 오는 길에 한 번 더 촬영. 멀리서 꺼져있다가 사람이 다가가면 자동으로 켜지는 부분도 잘 동작한다.
관련 자료
아두이노 소스코드
기타 자료들
지문인식 센서
여담
아두이노랑 그 외 다른 것들을 다 아트로봇 에서 구매했는데, 처음에 구매한 지문 인식기가 아무래도 불량이었던 것 같다. 그래서 확인을 위해 문의를 하고 반송하고 다른 제품으로 교환했는데, 아트로봇 쪽에서도 테스트 시료가 없어서였는지 그간 이 제품을 테스트해본 적이 없었다고 했다.
결국 교환해서 받은 다른 제품은 제대로 동작해서 해피엔딩.. 마침 이 포스팅 쓰면서 보니까 아트로봇쪽 블로그에도 지문인식기 관련 포스팅이 올라왔다. 불량 확인 때문에 테스트해보셨나보다.
아두이노 프로 미니에 FTDI 인터페이스를 통해서 업로드를 할 때, 아두이노에 전원을 따로 인가하고 rx , tx, sts 만 연결해서 시도하면 도무지 안된다. FTDI 쪽의 5v 와 gnd 핀을 꼭 아두이노로 연결해줘야 싱크가 되는 것 같다. 이거 몰라서 한참 삽질함..
물론 걍 이렇게 하면 된다. 저항 다리 잘라서 임시 커넥터 만들어서 업로드함..
이 부분에서 가장 조심해야 할 건.. FTDI 에서 나오는 5v 랑 gnd 가 조금이라도 쇼트되면 컴퓨터가 바로 꺼져버린다는거. 그냥 꺼지기만 하면 다행이지만 자칫하면 맛이 가버리는 수가 있으니 왠만하면 헤더핀을 꽂아서 쓰자....
작동 영상은 나중에 날 밝을 때 다시 한 번 찍어서 올려야겠당
여담2
회로도를 깔끔하게 그리고 싶었지만... 암 걸릴 것 같은 물건만 탄생함