아두이노와 블루투스로 만드는 모션 감시 카메라: 1Sheeld 활용 DIY 보안 시스템
부품 및 소모품
| 부품 |
수량 |
비고 |
| 아두이노 우노(UNO) |
1 |
|
| 1Sheeld |
1 |
|
| 브레드보드(일반) |
1 |
|
| 점퍼 케이블 |
1 |
|
| PIR 모션 센서(일반) |
1 |
|
| LED 및 저항 |
1 |
|
| 블루투스 탑재 안드로이드 폰 |
1 |
|
| 점퍼 와이어(일반) |
1 |
|
앱 및 온라인 서비스
프로젝트 소개
이 튜토리얼에서는 모션 감지 카메라를 만드는 방법을 보여드립니다. 보안 카메라로 쓰거나, 움직임이 있을 때 사진을 찍는 파티 캠으로 활용할 수 있습니다. 촬영된 사진은 트위터로 업로드되고, 문자 메시지(SMS)로 알림을 받아 바로 확인할 수 있습니다.
준비물
**반드시 모든 1Sheeld 라이브러리가 설치되어 있어야 합니다.**
모션 감지 카메라 제작 단계
1단계: 1Sheeld와 아두이노 연결
- 1Sheeld를 아두이노에 장착합니다.
- 아두이노를 PC에 연결합니다.
- 1Sheeld의 UART 스위치가 열림(Open) 위치에 있는지 확인하세요. 닫혀 있으면 컴파일 오류가 발생합니다.
- 아래 코드를 아두이노에 업로드하세요: https://codepad.org/ckMD0prd
- SMS 수신할 전화번호로 수정하세요.
2단계: LED 연결
- LED를 8번 핀과 저항을 통해 그라운드에 연결합니다.
3단계: PIR 모션 센서 연결
- PIR 센서의 돔(감지부)을 자신에게서 멀리 향하게 하고, 하단의 3핀 커넥터가 보이도록 합니다.
- 왼쪽 핀 → 아두이노 2번 핀
- 가운데 핀 → 3.3V
- 오른쪽 핀 → 그라운드
프리칭(Fritzing) 회로도
4단계: 블루투스 페어링 및 실드 선택
- 1Sheeld 앱을 통해 안드로이드 기기와 1Sheeld를 블루투스로 페어링합니다.
- 다음 실드(Shield)들을 선택하세요:
- 카메라 실드 (Camera Shield)
- 트위터 실드 (Twitter Shield) — 페이스북을 쓰고 싶다면 페이스북 실드 사용. 코드:
Facebook.postLastPicture("HappyHolidays")
- 텍스트 투 스피치 실드 (Text to Speech Shield) — 원하면 선택
- SMS 실드 (SMS Shield) — 이벤트 발생 시 알림용
- 모든 계정에 로그인되어 있고 권한 승인이 완료되었는지 확인하세요. 코드용 세컨드 트위터 계정을 만드는 것이 좋습니다.
5단계: 실행 준비
- 코드 업로드가 완료되고 LED가 꺼질 때까지 기다립니다.
- UART 스위치를 닫힘(Closed) 위치로 바꿔 1Sheeld와 폰 간 통신을 시작합니다.
- 트위터 계정에서 촬영된 사진을 확인하세요.
참고: 세컨드 트위터 계정을 만들고, 주 계정으로 세컨드 계정을 '팔로우' 또는 '즐겨찾기' 해두면 업로드 시 알림을 받을 수 있습니다. 아니면 주 계정을 쓰고 SMS 알림을 받도록 설정하세요.
코드
모션 감지 보안 카메라 코드 (Java)
아두이노 IDE에 추가하고 1Sheeld에 업로드하세요. 1Sheeld의 UART 스위치가 Off 위치인지 확인하세요.
// 메모리 과부하 방지를 위해 다음 정의 필요:
#define INCLUDE_SMS_SHIELD
#define CUSTOM_SETTINGS
#define INCLUDE_CAMERA_SHIELD
#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_FACEBOOK_SHIELD
#define INCLUDE_TWITTER_SHIELD
#include <OneSheeld.h>
int ledPin = 8;
int inputPin = 2;
int PIR = LOW;
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
OneSheeld.begin();
}
void loop() {
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin, HIGH);
delay(100);
if (PIR == LOW) {
SMS.send("0123456789", "Motion DETECTED , Check Twitter for image");
PIR = HIGH;
TextToSpeech.say("got you");
Camera.setFlash(ON);
Camera.rearCapture();
Twitter.tweetLastPicture("Posted with #1sheeld @1sheeld");
// Facebook.postLastPicture("Posted by User"); // 페이스북 사용 시 주석 해제
delay(1000);
}
} else {
digitalWrite(ledPin, LOW);
if (PIR == HIGH) {
PIR = LOW;
}
}
}
회로도
Untitled%20Sketch.fzz