스마트폰 블루투스 근접 감지로 자동 잠금 도어락 만들기
컨셉
집무실이나 개인 작업실을 기술적으로 안전하게 지키고 싶으신가요? 이 가이드는 블루투스로 사용자 존재를 자동 감지해 자리를 뜨면 문을 잠그는 DIY 스마트 락 제작을 안내합니다.
개념
스마트폰은 검색 모드일 때 고유한 블루투스 식별자를 지속적으로 브로드캐스트합니다. 라즈베리 파이로 이 신호를 모니터링하면 장치가 범위 내에 있는지 판단하고 릴레이를 트리거해 문을 잠그거나 열 수 있습니다.
필요한 것들
- 라즈베리 파이 – 모든 모델 충분; 단순함 위해 구형 모델 B 사용. 네트워크 연결(이더넷 또는 Wi-Fi), SD 카드, 마이크로 USB 전원 공급기 필요.
- 블루투스 USB 어댑터 – Adafruit 4.0 BLE 모듈이 안정적이나 호환 동글이면 됨. 짧은 핑만 보내면 되므로 전송 속도는 중요하지 않음.
- GPIO 브레이크아웃 보드 ("코블러") – 핀 연결 명확화; 저렴하고 편리.
- 릴레이 보드 – 12V/5A 정격 4채널 보드 선택. 제네릭 모델 약 $5.
- 12/24V 전자석 잠금장치 – 마운팅 하드웨어 포함 180kg 유지력 락 약 $35에 구입.
- 12/24V 전원 공급기 – 락은 외부 전원에서 전력 공급받아야 함; 절대 파이에서 전원 공급하지 마세요.
- 파이썬 스크립트 (Lock.py) – 단계별 개발 예정.
블루투스 시작하기
파이에 필요한 블루투스 패키지 설치. 기기에서 직접 또는 SSH로 수행 가능.
sudo apt-get install bluez python-bluez
동글 삽입 후 인식 확인:
hcitool dev
근처 장치 검색용 샘플 파이썬 스크립트 다운로드:
wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.py
python inquiry.py
"0 devices found" 보고되면 폰이 검색 모드인지 확인. 아이폰이면 블루투스 설정 페이지 열기.
감지 스크립트 생성
detect.py 파일 생성 후 다음 코드 추가. MAC 주소를 본인 폰 식별자로 교체.
#!/usr/bin/python
import bluetooth
import time
while True:
print("Checking "+time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()))
result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
if result:
print("User present")
else:
print("User out of range")
time.sleep(10)
스크립트 실행해 실시간 상태 업데이트 확인. 10초 간격은 반응성과 전력 소모 균형. 배터리 수명 우려 시 내부에서 루프 비활성화하는 스위치 추가 고려.
GPIO 보드 모드
하드웨어에 맞는 핀 번호 체계 선택. "board" 모드는 물리적 핀 번호 사용, "BCM"(브로드컴)은 GPIO 채널 번호 사용. 아래 예제는 대부분 브레이크아웃 보드와 정렬되는 BCM 사용.
릴레이 배선
브레이크아웃 보드를 파이에 연결: 3.3V와 5V 핀을 릴레이의 VCC와 GND에 각각 연결. GPIO 23을 릴레이 입력에 배선. 릴레이 로직 레벨 요구사항 확인; 다수 3.3V 신호 직접 수용.
릴레이 수동 테스트 위해 wiringPi 설치 후 GPIO 23을 출력으로 구성:
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
gpio -g mode 23 out
핀 상태 확인:
gpio -g readall
릴레이 클릭 소리 나면 락 통합 준비 완료. 락 전원 공급기를 파이 전원 레일과 분리 유지.
다음 단계
감지 스크립트와 GPIO 제어 로직 결합해 폰이 범위 밖일 때 락 트리거. 배포 전 제어된 환경에서 철저히 테스트.