2015년 5월 23일 토요일

대문열기 라즈베리파이 + Mini PN532 NFC 리더

라즈베리파이 + NFC 리더 를 이용한 대문열기.

개요 : NFC리더를 통해 스마트폰 또는 RFID 태그 의 UID 를 읽어들여 등록된 UID 인지 검증 후 문을 여는 동작을 한다.

장점 : 열쇠 없이 대문 열기

단점 : 정전시 집에 못들어감, 라즈베리파이에 문제 발생시 집에 못들어감.

하드웨어 준비

준비물 : 라즈베리파이 1개
PN532 NFC 리더 1개
NFC housing : 3D printing    http://www.thingiverse.com/thing:845134
NFC housing 3D 프린트를 원하면 클릭!! 3D Print
인터폰선(4선식) 인터폰 -> 대문 까지.
릴레이 : 1개
다이오드 : 1개
트랜지스터 BC337 : 1개 
저항 1K옴 : 1개

그림1. 전체 회로도


릴레이 부분 확대 사진.


인터폰 에서 대문까지 인터폰선을 연결(본인 집은 약 35미터), 프린팅한 하우징에 PN532 Reader를 장착하고 대문 인터폰 주변에 부착함.
좀 멀어서 통신에 문제가 있지 않을까 걱정 했지만 잘 작동함.




코딩 

NFC Library 설치 : http://gaeranking.blogspot.kr/2015/05/nfc.html 를 참조.

디렉터리 구조 : 

실행파일 
/usr/local/bin
/usr/local/bin/doornfc  >  NFC reader로 부터 수신대기.
/usr/local/bin/dooropen.py  > GPIO 제어하고 문을 연다.
/usr/local/bin/dooropen  > dooropen.py를 호출
/usr/local/bin/addnfc-uid.sh  > NFC UID 정보 수집을 위한 script, 읽은 데이터는
/var/nfc/uid.data에 저장한다.

데이터파일 
/var/nfc/uid.data  > UID 정보를 보관하는 파일.


1. uid.data 파일 만들기

$ sudo mkdir /var/nfc
$ sudo touch /var/nfc/uid.data
$ sudo chown pi /var/nfc/uid.data


2. 실행 스크립트 작성.

$ cat dooropen.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.output(23, True)
time.sleep(0.2)
GPIO.output(23, False)
GPIO.cleanup()
time.sleep(1)
print ("OK")


$ cat dooropen
sudo python /usr/local/bin/dooropen.py 


$ cat addnfc-uid.sh 
#!/bin/bash
echo "Touch your NFC Device to reader"
NFCUID=`nfc-poll | grep UID`
CHECK_DOUBLE=`grep "$NFCUID" /var/nfc/uid.data`
if [ ${#CHECK_DOUBLE} -gt 0 ] ; then
   echo "Your UID is already registered"
else
   echo "$NFCUID" >> /var/nfc/uid.data
   echo "UID registered."
   exit 0
fi


$ cat doornfc
#!/bin/bash

echo $$ > /var/run/doornfc.pid

while [ true ]
do

#  Reading UID from NFC tag
RESULT=`nfc-poll|grep UID`
#echo NFC-READ:$RESULT

if [ ${#RESULT} -eq 0 ]; then
   echo "no data from NFC Reader try again..."
else
   CHECK=`grep "$RESULT" /var/nfc/uid.data`
   echo CHECK-DB:$CHECK

   echo LENGTH_OF_CHECK=${#CHECK}

   if [ ${#CHECK} -gt 0 ]; then
      dooropen
   fi

fi
done


NFC등록

addnfc-uid.sh 를 실행 후 NFC Reader 에 스마트폰 또는 RFID 태그 접촉.

$ addnfc-uid.sh 
Touch your NFC Device to reader
nfc_initiator_target_is_present: Target Released
UID registered.

cat /var/nfc/uid.data 에 방금 접촉한 태그의 UID가 등록 되었다.


릴레이 작동해 보기

등록된 UID 로 릴레이가 작동 하는지 확인해 보자. doornfc 를 실행.

$ /usr/local/bin/doornfc 


NFC Reader에 스마트폰이나 RFID 태그 를 접촉 시키면 릴레이 에서 "딸깍" 하는 소리가 나면 정상 작동 하는것.


댓글 없음:

댓글 쓰기