스마트폰으로 도어락 열기

by 조혜인 | 2017-02-27 18:02
arduino doorlock home samrt smart 도어락 스마트 아두이노

재료

  • Voltage Regulator (LM7805) 1개 (360원)
  • 도어락 1개
  • hc-05 1개 (5900원)
  • 커패시터(0.33uF) 1개 (330원)
  • 점퍼와이어 1개
  • Motor Driver IC (L293D) 1개 (550원)
  • 커패시터(1uF) 1개 (30원)
  • 아두이노 1개

집안 보안 항상 신경쓰이죠? 비밀번호 도어락을 설치해도 맘이 놓이지 않는 요즘입니다. 이 문제를 해결할만한 좋은 프로젝트를 발견해서 소개합니다 (Arduino & Android Based Bluetooth Controll Password Protected Smart Door Lock).

튜토리얼에서는 Bluetooth를 사용하여 Android 스마트 폰에서 보낸 암호를 사용하여 열고 닫을 수있는 arduino 기반의 DIY 스마트 잠금 장치를 만드는 방법을 설명합니다.




1. 준비물



1. 아두이노 우노 x1
2. 블루투스모듈 (HC-05) x1
3 .Laser Movementing tray from old CD/DVD ROM x1
4. 모터드라이버 IC (L293D) x1
5. Voltage Regulator (LM7805) x1
6. 커패시터 (0.33uF) x1
7. 커패시터 (1uF) x1
8. 도어락 x1
9. 브레드보드 x1
7.안드로이드 스마트폰 x1
10. 스크류 (선택) x6
11. 점퍼와이어












세부설명

Leaser Movementing try :   CD / DVD 플레이어에서 레이저 LED를 움직이는 부분이라고 합니다. 이 부분은 약간 보완이 필요할 것 같습니다. 한국화할 수 있는 부품을 찾아봐야 겠네요. CD 드라이브에서 분해해 보고 싶으신 분들은 링크를 확인하세요!

Voltage Regulator (LM7805) : 5V 레귤레이터


첨부파일 설명

- arduino_door_lock.zip : 아두이노 코드
-
arduino_door_lock.fzz : 회로도
- BTcontrol.apk : 안드로이드용 어플리케이션(구글앱스토어에서 다운 가능)
- BTcontrol.aia : 앱인벤터 소스



2. 만드는 과정

STEP 1. 회로 연결하기

회로를 다음과 같이 연결합니다. 어렵지 않습니다.
프릿징(Fritzing) 파일을 첨부해두었습니다.


1. 모터드라이버 IC(L293D)와 아두이노 연결 방법

Enable, IN1, IN2 ------ arduino 9, 10, 11 핀
Out1과 Out2 ------- DC 모터에 연결
2개의 입력 전압(IC 자체 용, 모터 전압 용) ---  아두이노 5V
4개 GND - 아두이노 GND


2. 전압 레귤레이터, AC어댑터, 아두이노 연결 방법

5V 레귤레이터 (LM7805) 입력 ------ AC 어댑터의 출력 
AC 어댑터의 출력 ------- arduino VIN 핀에 직접 연결됩니다.

3. 블루투스(HC-05) 연결 방법

HC-05 TX -----  arduino RX 핀
HC-05 RX ---- arduino TX 핀 












STEP 2. 코드 업로드

다음 아두이노 코드를 업로드 해 주세요.
파일을 첨부해 두었습니다.


블루투스 제어 스마트 도어 잠금 코드는 매우 간단합니다.
안드로이드 어플에서 컨트롤 하게 되어있습니다. 어플 다운로드 는 STEP3 에서 설명합니다.
일단 아두이노 코드부터 설명을 하겠습니다.


어플에서 다음 2개의 명령(문자열)을 아두이노로 전송할 것입니다..
- "OPEN = password"
- "CLOSE = password"


어플에서 두 개의 버튼으로 문을 열고 닫습니다. 
패스워드를 쓰고 OPEN 버튼을 누르면 "OPEN =password" 커맨드가 arduino로 전송됩니다.
'='로 명령(OPEN, CLOS)과 암호를 구분합니다. 


스마트폰에서 문자열을 수신 하면 arduino 프로그램은 명령과 암호를 수신 문자열에서 분리하여 두 개의 개별 변수에 저장합니다. 그런 다음 암호를 먼저 확인하고 암호가 저장된 암호와 일치하면 문을 열거나 닫습니다.












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
92
93
94
95
96
97
98
99
100
101
102
103
/* Athor: Md. Khairul Alam
   Date: 1 September, 2015
   This program is for password protected smart door lock */
String inputString = "";
String command = "";
String value = "";
String password = "arduPi"// this is the password for opening and closing your door
                            // you can set any password you like using digit and symbols
boolean stringComplete = false; 
int motorPin1 = 10;   // pin 2 on L293D IC
int motorPin2 = 11;   // pin 7 on L293D IC
int motorEnablePin = 9;   // pin 1 on L293D IC
int Speed = 100;
void setup(){
  //start serial connection
  Serial.begin(9600);  // baud rate is 9600 must match with bluetooth 
  //The String reserve() function allows you to allocate a buffer in memory for manipulating strings.
  inputString.reserve(50);  // reserve 50 bytes in memory to save for string manipulation 
  command.reserve(50);
  value.reserve(50);
  boolean stringOK = false;
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorEnablePin, OUTPUT);  
}
void loop(){
  // if arduino receive a string termination character like \n stringComplete will set to true
  if (stringComplete) {
    //Serial.println(inputString);
    delay(100);
    // identified the posiion of '=' in string and set its index to pos variable
    int pos = inputString.indexOf('=');
    // value of pos variable > or = 0 means '=' present in received string.
    if (pos > -1) {
      // substring(start, stop) function cut a specific portion of string from start to stop
      // here command will be the portion of received string till '='
      // let received string is open=test123
      // then command is 'open' 
        command = inputString.substring(0, pos);
      // value will be from after = to newline command
      // for the above example value is test123
      // we just ignoreing the '=' taking first parameter of substring as 'pos+1'
      // we are using '=' as a separator between command and vale
      // without '=' any other character can be used
      // we are using = menas our command or password must not contains any '=', otherwise it will cause error 
        value = inputString.substring(pos+1, inputString.length()-1);  // extract command up to \n exluded
       //Serial.println(command);
       //Serial.println(value);
       // password.compareTo(value) compare between password and value string,if match return 0 
    if(!password.compareTo(value) && (command == "OPEN")){
          // if password matched and command is 'OPEN' than door should open
           openDoor(); // call openDoor() function
           Serial.println(" OPEN"); // sent open feedback to phone
           delay(100);
           }
    else if(!password.compareTo(value) && (command == "CLOSE")){
          // if password matched and command is 'CLOSE' than door should close
           closeDoor();
           Serial.println(" CLOSE"); // sent " CLOSE" string to the phone 
           delay(100);
           }
    else if(password.compareTo(value)){
          // if password not matched than sent wrong feedback to phone
           Serial.println(" WRONG");
           delay(100);
           } 
        } 
       // clear the string for next iteration
       inputString = "";
       stringComplete = false;
    }  
}
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read(); 
    //Serial.write(inChar);
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline or a carriage return, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n' || inChar == '\r') {
      stringComplete = true;
    } 
  }
}
void openDoor(){
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW); 
   digitalWrite(motorEnablePin, HIGH);
   // use following line if you want to change speed, then use millis() instead if delay()
   //analogWrite(motorEnablePin, Speed);
   delay(1500);  
   digitalWrite(motorEnablePin, LOW); // off motor
}
void closeDoor(){
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH); 
   digitalWrite(motorEnablePin, HIGH);
   //analogWrite(motorEnablePin, Speed);
   delay(1500); 
   digitalWrite(motorEnablePin, LOW);
}




STEP 3. 어플리케이션 다운로드

어플리케이션을 다운로드 합니다.

apk 파일도 첨부해 두었습니다.


이용방법

1. 블루투사용 설정되어 있는지 여부를 확인합니다. 사용하지 않는 상태라면 블루투스 사용 설정창에서 YES를 누릅니다 합니다.
2. 나의 블루투스와 디바이스 페어링을 합니다. (블루투스 이름 설정 및 페어링 방법은 이곳 참조)
3. 비밀번호 상자에 비밀번호를 입력 한 다음 문 열림 버튼을 클릭하십시오. 비밀번호를 올바르게 입력하면 문이 열리고 응용 프로그램에 문이 열렸음을 나타내는 메시지가 표시됩니다. 문을 닫으려면 암호를 다시 입력하십시오. 잘못된 암호를 입력하면 앱에 잘못된 암호를 입력했다는 메시지가 표시됩니다.


다음 포스팅에서 이어서 설명하겠습니다. (앱인벤터로 앱 만들기 및 수정하기)



댓글 1

MADE BY

조혜인

arduino, processing, rhino, sketchup, 아두이노, 에프터이펙트, 포토샵, 프리미어
앱인벤터로 어플리케이션 만들기 다음글 스마트폰으로 도어락 열기현재글