아두이노 윤(Arduino Yun) 기반 실시간 침입 감지 SMS 알림 시스템
부품 및 소모품
| 부품 |
수량 |
| 아두이노 윤 (Arduino Yun) |
1 |
| 9V 배터리 (일반) |
1 |
| 점퍼 와이어 (일반) |
1 |
| 초음파 거리 센서 HC-SR04 |
1 |
앱 및 온라인 서비스
- Temboo (클라우드 서비스 연동 플랫폼)
- Twilio SMS Messaging API
프로젝트 소개
납땜이나 고급 기술 없이도 쉽게 만들 수 있는 침입 감지 시스템입니다.
작동 원리:
- 거리 센서가 핑(ping) 신호의 중단 감지
- WiFi를 통해 Temboo 호출
- Twilio API가 문자 메시지 발송
이 튜토리얼에서는 움직임이 감지되면 문자 알림을 보내는 침입 경보기를 만드는 방법을 보여줍니다. 복잡해 보이지만 초보자도 충분히 따라 할 수 있습니다. 거리 센서가 움직임을 감지하면 아두이노 보드에 문자를 보내라고 지시합니다. 이렇게 하면 집 밖에 있어도 휴대폰 서비스만 있으면 SMS 알림을 받을 수 있습니다.
소요 시간: 약 45분. 부품 비용: 아마존에서 $80~90, 알리익스프레스에서 $50 정도. 메인 비용은 WiFi 기능이 있는 아두이노 보드지만, 한 번 구매하면 다른 프로젝트에도 활용 가능합니다.
필수 부품
- HC-SR04 거리 센서
- 아두이노 윤 보드 또는 레오나르도 + WiFi 실드
- 점퍼 와이어 4개
- 미니 브레드보드 (선택 사항)
- 9V 배터리 및 배터리 박스 (배럴 플러그, 온/오프 스위치 포함)
부품 링크와 코드는 여기에서 확인하세요.
1단계: 연결 및 테스트
다이어그램과 같이 거리 센서를 보드에 연결합니다. 먼저 센서 테스트를 위해 첫 번째 코드 블록을 아두이노 IDE에 복사해 업로드하세요. 시리얼 모니터(9600 보드레이트)를 열면 거리 값(인치)이 출력됩니다. 충분히 큰 차이가 감지되면 "Intruder Detected"가 출력됩니다.
2단계: WiFi 네트워크 연결
- 아두이노 윤: 공식 가이드 참조
- 레오나르도 + Iduino WiFi 실드: 가이드 참조
터미널로 LAN 스캔하거나 무료 프로그램(맥의 경우 LanScan)으로 같은 네트워크에 연결되었는지 확인하세요.
3단계: 문자 메시지 기능 추가
- 아두이노 IDE에서 새 스케치 생성
- 위 웹사이트의 두 번째 코드 블록을 복사해 붙여넣기
- 오른쪽 아래 화살표 클릭 → '새 탭 만들기' → 파일명
TembooAccount.h
- 웹사이트의 마지막 코드 블록(헤더 파일)을 해당 탭에 붙여넣고 저장
이제 Temboo와 Twilio 계정을 만들어 코드에 정보를 입력해야 합니다.
4단계: Twilio 및 Temboo 자격 증명 입력
- Twilio 계정 설정에서 Account SID와 Auth Token 확인 (자물쇠 버튼 클릭해 표시)
- 메인 스케치의 따옴표 안에 해당 값 입력
- Twilio 홈페이지 → Account → Phone Numbers에서 'Sent From' 번호 확인 후 코드에 입력
- 수신할 전화번호와 메시지 내용 커스터마이징 (전화번호 형식:
+1*********)
- 헤더 파일(
TembooAccount.h)에 Temboo 계정 정보 입력 (Temboo 로그인 → Applications에서 확인)
- 저장 후 업로드
9V 배터리 팩으로 전원 켜고 시리얼 모니터로 작동 확인 (연결까지 약 20초 소요).
5단계: 완료 및 조정
작동이 불안정하면 코드의 거리 임계값(예: 20인치 미만 또는 500인치 초과)을 조정하세요. 설치 위치와 주변 물체에 따라 값이 달라집니다. 테스트 단계(첫 번째 코드 블록)에서 충분히 테스트하세요. Temboo와 Twilio 무료 호출 횟수가 제한되어 있으므로 낭비하지 마세요. 코드에는 보드 재시작 전 최대 10회만 발송되도록 제한이 있습니다.
코드
테스트 코드 (IntruderDectectorTEST)
// TEST CODE
#include <SoftwareSerial.h>
int trigPin = 2;
int echoPin = 4;
long duration, cm, inches;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(5000);
Serial.println("Patrol Mode Initiated...");
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(1);
digitalWrite(trigPin, HIGH);
delayMicroseconds(2);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = (duration / 2) / 74;
Serial.println(inches);
if (inches < 20 || inches > 1000) {
Serial.println("Intruder Detected!");
Serial.println("Sending text Notification...");
delay(5000);
Serial.println("Patrol Mode Initiated...");
}
}
문자 발송 기능 포함 전체 코드
#include <Bridge.h>
#include <Temboo.h>
#include "TembooAccount.h"
#include <SoftwareSerial.h>
int numRuns = 1;
int maxRuns = 5;
int trigPin = 2;
int echoPin = 4;
long duration, cm, inches;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(5000);
Bridge.begin();
Serial.println("Patrol Mode Initiated...");
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(1);
digitalWrite(trigPin, HIGH);
delayMicroseconds(2);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = (duration / 2) / 74;
Serial.println(inches);
if (inches < 20 || inches > 1100) {
Serial.println("Intruder Detected!");
Serial.println("Sending text Notification...");
if (numRuns <= maxRuns) {
Serial.println("Running SendSMS - Run #" + String(numRuns++));
TembooChoreo SendSMSChoreo;
SendSMSChoreo.begin();
SendSMSChoreo.setAccountName(TEMBOO_ACCOUNT);
SendSMSChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
SendSMSChoreo.setAppKey(TEMBOO_APP_KEY);
SendSMSChoreo.addInput("AuthToken", "e684a4f37ee686636e2b1e24c12f4279");
SendSMSChoreo.addInput("To", "+14125236422");
SendSMSChoreo.addInput("From", "+14123608633");
SendSMSChoreo.addInput("Body", "Intruder Detected!!!!!!");
SendSMSChoreo.addInput("AccountSID", "ACf3be01a84d78829e5619c16b6e16a9e4");
SendSMSChoreo.setChoreo("/Library/Twilio/SMSMessages/SendSMS");
SendSMSChoreo.run();
while(SendSMSChoreo.available()) {
char c = SendSMSChoreo.read();
Serial.print(c);
}
SendSMSChoreo.close();
}
Serial.println("Waiting...");
delay(10000);
Serial.println("Patrol Mode Initiated...");
}
}
회로도
회로도 이미지 참조: schematic image