프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

WiFi통신을 사용하여 도어 알리미 구현해보기

2016-11-07 10:54:38

개요

 

이번에 소개할 프로젝트는 WiFi를 이용한 프로젝트로 실생활에 사용할 수 있는 프로젝트 입니다.

 

내가 집을 비운사이에 집 안의 현관문이 열려있을 경우! 도둑이나 모르는 사람이 들어올 수 있습니다.

특히 혼자사는 집일 경우 이런 보안에 상당히 민감하죠. 여자일 경우에는 더더욱!!

 

 

 

 

그래서 이번 프로젝트에서는 값싼 아두이노를 사용하여 10만원 미만의 금액으로 집안의 보안시스템을 구현해보았습니다.

WiFi통신을 사용하기 떄문에 현관문이나 집안 창문이 열릴 경우 내가 어디에 있든지 스마트폰을 통해 언제든지 푸시 알람으로 경고 메시지를 알려줍니다.

 

부품도 정말 간단하기 때문에 쉽게 따라할 수 있습니다. 또 블루투스와 달리 안드로이드와 아이폰 모두 사용이 가능합니다.

 

 

 

 

동영상

 

 

 

 

부품 목록

 

NO    

부품명      

수량     

상세설명

1

OrangeBoard WiFi

1

WizFi250라이브러리 사용

2

마그네틱 도어 센서

1

 

 

부품명 OrangeBoard WiFi 마그네틱 도어 센서
파트  

 

 

 

 

 

하드웨어 making

 

하드웨어 연결의 경우 마그네틱 도어센서를 연결하는 것이 끝이기 때문에 아래 링크의 설명을 참조하였습니다.

아두이노 마그네틱 도어 센서 사용하기 - http://kocoafab.cc/tutorial/view/509

 

마그네틱 도어 센서의 경우에는 원래 N.O거나 N.C 둘중에 하나의 성격을 띄고 있습니다.

하지만 이번에 코코아팹에서 사용한 마그네틱 도어 센서의 경우에는 N.O와 N.C 둘 다 가지고 있어 선택형이기 때문에 선이 3개가 있습니다.

 

 

 

 

이 제품 구매 사이트를 가보면 알겠지만 설명에는 노란색(Yellow)선을 공통으로 사용한다고 알려주고 있습니다.

그렇기 때문에 노란색선은 GND와 연결해주시면 됩니다.

 

그럼 나머지 보라색선과 회색선은 둘 중 하나만 선택해서 사용하면 됩니다.

(저도 사용하기 전까지는 어떤 선이 N.O이고 어떤 선이 N.C인지 알 수 없었습니다.)

보라색선과 회색선 둘 중 하나는 아두이노의 디지털 입출력핀(아래 소스에서는 디지털 8번 핀)에 연결 해 주시면 됩니다.

 

케이블 역할
노란색 선 GND
회색 선 N.C(Normal Close) 
보라색 N.O(Normal Open)

 

 

 

 

시스템 구현하기

 

WiFi통신으로 스마트폰 푸시 알람을 울리게 하기 위해서는 아래 2개의 사이트의 도움을 받아야 합니다.

두 개의 사이트를 모두 사용하는 것이 불편할 수도 있으나 사용 방법은 크게 어렵지는 않습니다.

 

pushbullet https://www.pushbullet.com/
pushingbox https://www.pushingbox.com/

 

 

 

첫 번째로 소개할 pushbullet사이트는 이름에서 Push라는 말이 있듯이 컴퓨터와 스마트폰을 연결하여 스마트폰에서 푸시 알람이 울릴 수 있도록 도와줍니다.

카카오톡을 생각하면 생각이 쉬울거라 생각합니다. 컴퓨터에서 카톡을 사용하면 실시간으로 스마트폰과 연동되어 데이터가 전달되는 방식입니다.

이 사이트의 장점은 안드로이드 외에 아이폰도 사용이 가능하다는 점이 장점입니다.

 

 

 

 

두 번째로 소개하는 사이트는 pushingbox로 특정 조건이 발생하면 특정 행동을 하는 (IF~ THEN~) 사이트 입니다.

한 번쯤은 들어보았을 IFTTT와 비슷한 기능을 합니다.

 

여기서는 그런 레시피를 시나리오라고 하는거 같습니다. 예를 들어 '현재 온도가 영하로 떨어지면 메일로 알려준다' 이런 시나리오를 작성할 수 있습니다.  

 

 

 

 

1. Pushbullet사용하기

 

pushbullet은 별도의 회원가입 필요없이 Google아이디나 페이스북아이디로 사용합니다.

Google이나 페이스북 아이디가 있다면 오른쪽 상단의 Sign In을 통해 로그인할 수 있습니다.

 

 

 

 

로그인했을 때의 메인 사진입니다. 

Setup에서는 pushbullet을 사용하는 방법에 대해 단계별로 알려주고 있습니다.

 

 

 

 

Device를 클릭하면 현재 계정과 연결된 디바이스를 확인할 수 있습니다.

현재는 사이트 로그인 외에 어떠한 작업도 한것이 없기 때문에 연결된 디바이스가 없습니다.

 

 

 

 

이제 스마트폰으로 와서 어플을 받아야 합니다.

앱스토어나 플레이스토어에서 Pushbullet을 다운받습니다. 

 

 

 

 

Pushbullet 어플을 받으면 실행시키고 역시 로그인을 합니다.

저 같은 경우는 컴퓨터와 마찬가지로 Google아이디로 로그인하였습니다.

 

 

 

 

어플을 실행시킨 뒤 로그인을 하면 아래와 같은 창이 뜨게됩니다.

 

 

 

 

앱 설치가 끝난다음 컴퓨터로 돌아오면 아래 사진과 같이 Device목록에 설치한 어플의 스마트폰이 나타납니다.

연결된 목록 밑으로 Chrome도 보이는데 Chrome에도 확장프로그램으로 Pushbullet을 설치할 수 있습니다.

 

 

 

 

오른쪽 채팅창에 아무런 값이나 입력했을 때 실제 스마트폰으로 푸시알람이 울리며 전달된다면 정상로 세팅이 된 것입니다.

 

 

 

 

2. Pushingbox 사용하기

 

pushingbox역시 pushbullet과 마찬가지로 Google계정으로 로그인할 수 있습니다.

 

 

 

 

로그인 뒤에 My Services를 클릭하여 Add a service를 클릭합니다.

 

 

 

 

Add a service를 클릭하면 서비스가 가능한 목록이 쭉 뜨는데 그 중에서 Pushbullet을 선택합니다.

 

 

 

 

Pushbullet을 선택하면 아래와 같은 창이 뜨는데 Name은 임의로 적고,

중요한 것이 Access token이라는 것이 있습니다. 그 값은 Pushbullet으로 돌아와 My account에서 Access token값을 구해서 적습니다.

 

 

 

 

My Scenarios에서는 시나리오를 추가할 수 있습니다.

시나리오 이름을 적고 Add를 클릭하여 시나리오를 추가합니다.

 

 

 

 

Add an Action 클릭

 

 

 

 

Pushbullet을 사용하니까 Pushbullet을 추가합니다.

 

 

 

 

보낼 메시지의 제목과 내용을 적을 수 있습니다. 임의대로 적은 후 Submit을 클릭합니다.

 

 

 

 

메시지 내용을 다 적고 나면 아래와 같은 페이지가 뜨는데 Test Scenario를 눌러 테스트를 해볼 수도 있습니다.

아래 조그맣게 적힌 DeviceID를 복사합니다. DeviceID는 코드상에서 이 시나리오를 사용하기 위해 필요합니다.

 

 

 

 

Test Scenario를 클릭했을 때 잘 동작했다면 이제 준비는 끝났습니다.

스크롤의 압박이 있지만 사실 위 과정은 대부분은 5~10분 사이에 끝나는 간단한 작업입니다.

사실 세세하게 사진을 찍어서 그렇지 중간중간 비웠다면 분량이 얼마 되지 않았을거 같네요 :)

 

아래 사진은 문이 열리고 닫히는 것을 확인하기 위해 우드락으로 급하게 문을 제작하였습니다.

문에 보시면 마그네틱 도어 센서가 붙어 있는 것을 볼 수 있습니다.

마그네틱 도어센서를 사용하여 문이 열렸는지 닫혔는지를 감지하여 상태에 따라 스마트폰으로 메시지를 보낼 계획입니다.

 

 

 

 

 

 

소프트웨어 coding

 

 

 

 

 

WiFi보드에서는 마그네틱도어센서로 현재 문이 닫혔는지 열렸는지 판단합니다.

상태값은 아래와 같습니다.

상태 상태값
문이 열려 있을 때 1
문이 닫혀 있을 때 0

 

 

 

코드상에서는 5초 간격으로 현재 문의 상태를 파악합니다. 이 간격은 상수로 지정되어 있기 때문에 사용자가 임의로 수정이 가능합니다.

5초 간격으로 문의 상태를 파악하여 열려있을 경우 httpRequest()를 실행시킵니다.

const unsigned long postingInterval = 5000L; // delay between updates, in milliseconds

  if (millis() - lastConnectionTime > postingInterval) {
    if (digitalRead(8)) {
      httpRequest();
    }
  }

 

 

 

pushingbox로 보내는 요청문(httpRequest())은 아래와 같습니다. 

 

 

 

 

요청문을 보낼 때 deviceID가 필요한데, ID값은 MyScenario에서 확인할 수 있습니다.

    client.print(F("GET /pushingbox?devid="));
    client.print(DEVICEID);
    client.print(F(" HTTP/1.1\r\n"));
    client.print(F("Host: api.pushingbox.com\r\n"));
    client.print(F("User-Agent: Arduino\r\n"));
    client.print(F("\r\n\r\n"));

 

수박쨈

arduino, 아두이노, WiFi, 스마트폰, 알람, 보안, 도어