스마트 전등 스위치

1. 프로젝트 제작 동기

잘 때 불을 끄기 위해 스위치를 눌러야 하는 불편함이 있었습니다. 또한, 방 밖에 누군가 있을 때 불을 꺼야 하는 상황이나, 외출할 때 불을 꺼야 하는 상황에서도 손쉽게 전등을 제어할 수 있는 방법이 필요하다고 생각했습니다. 이에 아두이노를 활용하여 스마트폰으로 전등을 제어하고, 움직임 감지 시 자동으로 불을 꺼주는 시스템을 제작하게 되었습니다.

2. 프로젝트 설명

이 프로젝트는 아두이노와 다양한 센서를 활용하여 스마트 전등 스위치를 구현하는 것입니다. 주요 기능은 다음과 같습니다.

  • 블루투스 모듈을 이용해 스마트폰으로 전등을 원격 제어 가능
  • 초음파 센서를 이용해 일정 거리 내에서 움직임 감지 시 자동으로 전등 소등
  • 서보모터를 활용하여 기존 전등 스위치를 물리적으로 눌러 동작

3. 제작 과정

  1. 하드웨어 연결
    • 아두이노와 블루투스 모듈, 서보모터, 초음파 센서를 연결
    • 블루투스 모듈과 스마트폰을 페어링
  2. 하드웨어 연결 상세 정보
    • 블루투스 모듈
      • VCC 핀 → 아두이노 5V 핀
      • GND 핀 → 아두이노 GND 핀
      • TX 핀 → 아두이노 디지털 핀 2
      • RX 핀 → 아두이노 디지털 핀 3
    • 서보모터
      • 신호 핀 → 아두이노 디지털 핀 9
      • VCC 핀 → 아두이노 5V 핀
      • GND 핀 → 아두이노 GND 핀
    • 초음파 센서
      • VCC 핀 → 아두이노 5V 핀
      • GND 핀 → 아두이노 GND 핀
      • Trig 핀 → 아두이노 디지털 핀 12
      • Echo 핀 → 아두이노 디지털 핀 11
  3. 소프트웨어 개발
    • 초음파 센서를 이용하여 물체와의 거리 측정
    • 물체가 30cm 이내에 감지되면 서보모터가 작동하여 전등을 끄도록 설정
    • 스마트폰에서 블루투스를 통해 0을 전송하면 전등이 꺼지고, 1을 전송하면 원래 상태로 복귀
  4. 코드 구현
    #include <Servo.h>
    #include <SoftwareSerial.h>
    #define SERVO_PIN 9
    #define BT_RX 2
    #define BT_TX 3
    #define TRIG_PIN 12
    #define ECHO_PIN 11
    
    Servo servo;
    SoftwareSerial BTSerial(BT_RX, BT_TX);
    
    void setup() {
      servo.attach(SERVO_PIN);
      BTSerial.begin(9600);
      Serial.begin(9600);
      pinMode(TRIG_PIN, OUTPUT);
      pinMode(ECHO_PIN, INPUT);
      servo.write(0);
    }
    
    void loop() {
      long distance = measureDistance();
      
      if (distance > 0 && distance <= 30) {
        Serial.println("Object detected within 30cm, switching OFF light.");
        toggleSwitch();
        delay(1000);
        servo.write(0);
        Serial.println("Switch returning to original position");
      }
      
      if (BTSerial.available()) {
        char command = BTSerial.read();
        
        if (command == '0') {
          Serial.println("Bluetooth command received: Switch OFF");
          toggleSwitch();
        } else if (command == '1') {
          servo.write(0);
          Serial.println("Bluetooth command received: Switch returning to original position");
        }
      }
    }
    
    long measureDistance() {
      digitalWrite(TRIG_PIN, LOW);
      delayMicroseconds(2);
      digitalWrite(TRIG_PIN, HIGH);
      delayMicroseconds(10);
      digitalWrite(TRIG_PIN, LOW);
      
      long duration = pulseIn(ECHO_PIN, HIGH);
      long distance = duration * 0.034 / 2;
      
      return distance;
    }
    
    void toggleSwitch() {
      servo.write(90);
      delay(1000);
    }
    
  5. 서보모터 장착 및 테스트
    • 서보모터를 벽에 부착하여 실제 스위치를 누를 수 있도록 고정
    • 초음파 센서를 이용해 자동 소등 테스트 진행
    • 블루투스 모듈을 활용한 원격 조작 테스트 수행

4. 시연 영상 및 사진

프로젝트의 동작 과정을 시각적으로 확인할 수 있도록 시연 영상을 준비하였습니다.

  • 시연 영상 및 사진: (영상 및 사진 첨부 예정)

5. 개선방안 모색

  • 스마트폰 앱 개발을 통해 더욱 직관적인 UI 제공
  • 초음파 센서의 감지 범위를 조절하여 오작동 방지
  • 음성 인식을 활용한 음성 명령 기능 추가
  • 서보모터 대신 릴레이 모듈을 활용하여 직접 전등을 제어하는 방식 개선

6. 감상

더 발전된 IoT 시스템을 만들고 싶었지만, 현재 실력으로 구현할 수 있는 최적의 방법을 고민하며 프로젝트를 완성했습니다. 초음파 센서, 서보모터 등 동아리에서 배운 개념들을 실제로 활용하면서 더욱 깊이 이해할 수 있었습니다.

또한, 블루투스 모듈을 처음 사용하면서 인터넷 자료를 찾아가며 코드 작성 및 스마트폰과의 연결 방법을 익힐 수 있었습니다. 이 프로젝트를 통해 IoT 기술에 대한 관심이 더욱 커졌으며, 앞으로 더 발전된 스마트 시스템을 만들어보고 싶습니다.

시연