
이 프로젝트에서는 움직임을 감지하고 휴대폰으로 알림을 보내며, 자동문과 자동 조명도 작동시킬 수 있는 Arduino 기반 스마트 홈 시스템을 설계하고 제작했습니다. 목표는 전자공학, 코딩 및 회로 제작 능력을 키우면서 실용적인 시스템을 만드는 것이었습니다. Arduino와 센서, LED, 서보 및 코딩을 조합하여 이 시스템은 특정 영역을 모니터링하고 활동이 감지되면 명확한 경고를 제공할 수 있습니다. 이 페이지에서는 부품, 배선, 코드 및 최종 조립을 포함하여 시스템을 설계하고 제작하고 프로그래밍하고 테스트한 과정을 설명합니다.
학생인 관계로 자원에 대한 접근이 제한되어 실제로 사용될 만한 적절한 부품을 사용할 수 없었습니다. 서보는 자동문을, LED는 조명을 나타냅니다. 이것은 단지 프로젝트일 뿐이며, LED는 방을 밝히기에는 너무 어둡고 서보는 문을 움직이기에는 너무 약하기 때문에 집에 적용해도 작동하지 않습니다.
안전
이 프로젝트의 안전을 위해 개인정보 보호에 주의해야 합니다. Blynk 인증 토큰이나 템플릿 이름 및 ID(이 내용은 뒤에서 설명합니다)를 공유하면 다른 사람이 시스템에 접근할 수 있기 때문입니다. 또 다른 안전상의 우려 사항은 LED를 연결할 때 저항을 사용하지 않으면 단락이 발생하여 LED가 깨질 수 있고 매우 높은 온도에 도달할 수 있다는 것입니다.
STEP 1. 준비물
재료 목록
전자 부품
- Arduino ESP32 (1개)
- ESP32 브레이크아웃 보드 (1개)
- 점퍼 와이어(암-암) (8개)
- 저항(220Ω 1개, 10KΩ 1개)
- LDR(광 의존성 저항) (1개)
- LED (1개)
- PIR 센서 (1개)
- 서보 모터 (1개)
- USB C 타입 데이터 케이블(컴퓨터 연결용) (1개)
- USB 어댑터(필요한 경우) (1개)
도구
- Arduino IDE 소프트웨어가 설치된 컴퓨터
STEP 2. ESP32 연결

ESP32를 브레이크아웃 보드에 장착하고 USB 데이터 케이블을 사용하여 컴퓨터에 연결하세요.
ESP32는 스마트 홈 보안 시스템의 주요 컨트롤러로 작동하며 Wi-Fi를 통해 휴대폰 또는 노트북의 Blynk 앱과 통신합니다(작동하려면 두 장치가 모두 같은 네트워크에 연결되어 있어야 합니다).
STEP 3. PIR 모션 센서 연결

(PIR 핀>ESP32 핀)
VCC>5V
GND>GND
OUT>GPIO 4
PIR 센서는 움직임을 감지하고 GPIO 4로 신호를 보냅니다.
STEP 4. 서보 모터 연결

(서보 와이어>ESP32 핀)
빨간색(전원)>5V
갈색/검은색(접지)>GND
주황색/노란색(신호)>GPIO 13
시스템이 홈 모드에 있을 때 움직임이 감지되면 서보가 90º 회전하여 문을 열고, 더 이상 움직임이 감지되지 않으면 잠시 후 원래 위치로 돌아옵니다.
STEP 5. LDR(광 센서) 연결

(부품>ESP32 핀)
LDR 출력>GPIO 34
LDR 출력>3.3V 또는 5V(회로에 따라 다름)
LDR 출력>10KΩ 저항>GND
LDR은 ESP32가 LDR에서 전달되는 저항을 계산하도록 하여 집 안의 빛의 세기를 측정합니다.
ESP32는 GPIO 34에서 빛(저항) 값을 지속적으로 읽습니다.
STEP 6. LED 연결

(LED 연결>ESP32 핀)
양극 다리>220Ω 저항>GPIO 26
음극 다리>GND
방이 어두워지면 LED가 자동으로 켜집니다.
STEP 7. 최종 핀 구성

(부품>ESP32 핀)
PIR 센서 출력>GPIO 4
서보 신호>GPIO 13
LED>220Ω 저항>GPIO 26
LDR 출력>GPIO 34
PIR VCC>5V
서보 VCC>5V
LDR 출력>5V
PIR GND>GND
서보 GND>GND
LED GND>GND
LDR 출력>10KΩ 저항>GND
STEP 8. Blynk 구성


- 컴퓨터나 휴대폰에서 Blynk의 새 템플릿을 만드세요(개인적으로는 컴퓨터가 훨씬 편했습니다).
- V0에 정수 범위가 0–1인 Virtual Pin 데이터 스트림을 만드세요.
- 대시보드에 Switch 위젯을 추가하고 V0에 연결하세요. OFF = 홈 모드, ON = 외출 모드로 설정하세요.
- motion_alert라는 Blynk 이벤트를 만들고 해당 이벤트의 알림을 활성화하세요(이 단계에서는 Blynk의 알림을 허용해야 하므로 휴대폰이 필요할 수 있습니다).
- Security System 템플릿을 사용해 디바이스를 만든 다음, Blynk Authority Token, Template Name, Template ID를 복사하여 Arduino 코드의 해당 항목에 붙여 넣으세요.
ESP32에 코드를 업로드하면 Blynk 대시보드에서 홈 모드와 외출 모드 사이를 전환할 수 있습니다. 외출 모드에서는 PIR이 움직임을 감지할 경우 ESP32가 Blynk를 통해 움직임 알림을 전송하고, 홈 모드에서는 서보가 감지된 움직임에 반응합니다.
STEP 9. 프로그램 업로드
다음 코드를 ESP32에 업로드하세요:
Blynk template ID, name, Auth Token과 WiFi SSID 및 이름을 붙여 넣었는지 확인하세요.
#define BLYNK_TEMPLATE_ID "paste template id"
#define BLYNK_TEMPLATE_NAME "paste template name"
#define BLYNK_AUTH_TOKEN "paste auth-token"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
Servo myServo;
int pirPin = 4;
int ledPin = 26;
int ldrPin = 34;
int lightThreshold = 3500;
char ssid[] = "enter wifi ssid";
char pass[] = "enter wifi password";
char auth[] = BLYNK_AUTH_TOKEN;
#define AWAY_MODE_VPIN V0
bool awayMode = false;
BLYNK_CONNECTED() {
Serial.println(">>> Blynk connected!");
}
BLYNK_WRITE(AWAY_MODE_VPIN) {
awayMode = param.asInt();
Serial.print(">>> Away mode changed to: ");
Serial.println(awayMode ? "ON" : "OFF");
}
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
myServo.attach(13);
myServo.write(0);
Serial.println(">>> Connecting to Blynk...");
Blynk.begin(auth, ssid, pass);
Serial.println(">>> Warming up PIR...");
delay(30000);
Serial.println(">>> Ready!");
}
void loop() {
if (!Blynk.connected()) {
Blynk.connect();
}
Blynk.run();
int motion = digitalRead(pirPin);
if (motion == HIGH) {
Serial.println(">>> MOTION DETECTED");
if (awayMode) {
Serial.println(">>> Away mode is ON - sending notification...");
Blynk.logEvent("motion_alert", "Motion detected while you're away!");
Serial.println(">>> logEvent called!");
delay(10000);
} else {
myServo.write(90);
}
} else {
myServo.write(0);
}
int lightValue = analogRead(ldrPin);
Serial.print("Light: ");
Serial.println(lightValue);
if (lightValue < lightThreshold) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
STEP 10. 시스템 작동


홈 모드
- PIR 센서가 움직임을 감지합니다.
- ESP32가 GPIO 4를 읽습니다.
- GPIO 13에 연결된 서보가 90° 회전합니다.
- 움직임이 감지되지 않으면 서보가 0°로 돌아갑니다.
- 알림은 전송되지 않습니다.
외출 모드
- PIR 센서가 움직임을 감지합니다.
- ESP32가 GPIO 4를 읽습니다.
- 다음을 사용하여 Blynk 알림이 전송됩니다:
Blynk.logEvent("motion_alert", "Motion detected while you're away!");
- 서보는 움직이지 않습니다.
자동 조명
- GPIO 34에 연결된 LDR이 광도를 측정합니다.
- ESP32가 측정값을 임계값 3500과 비교합니다.
- 측정값이 3500 미만이면 GPIO 26의 LED가 켜집니다.
- 측정값이 3500 초과이면 LED가 꺼집니다.
원문: https://www.instructables.com/Arduino-Smart-Home-System-1/