프로젝트

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

[조도센서X서보모터] 햇빛에 따라 움직이는 스마트 블라인드 만들기

2018-04-17 10:56:06

 

 

1. 개요

 

블라인드는 이제 집을 꾸며주는 인테리어 소품인 동시에 햇빛을 막아주는 유용한 용품입니다. 

적당한 햇빛은 비타민 D 생성에 도움이 되지만, 과다한 노출은 피부암의 원인이 되기도 합니다. 

 

채광 환경은 해의 위치에 따라 시시 각각 바뀌게 됩니다. 

집에 채광 상황에 따라 블라인드를 내렸다 올렸다 하는 것은 여간 번거로운 일이 아닐 수 없습니다. 

 

출처 : 다음 블로그

 

창문을 통해 들어오는 햇빛의 양의 필요 이상으로 많을 경우에만 블라인드가 자동으로 내려가도록 제작하면 어떨까요?

굳이 블라인드를 올렸다 내렸다하는 수고를 덜게 될 것입니다. 

 

스마트 홈 키트에 구성되어 있는 조도 센서와 서보 모터를 이용해 '햇빛에 따라 움직이는 스마트 블라인드'를 구현해보도록 하겠습니다.

 

조도 센서와 서보 모터의 활용 용도는 아래와 같습니다. 

 

- 조도 센서

  현재 집에 들어오는 햇빛의 양을 측정합니다. 

 

- 서보 모터

  블라인드를 제어합니다. 햇빛의 양이 많으면 블라인드를 내리고, 햇빛의 양이 적으면 블라인드를 올리도록 제어합니다. 

 

아이디어를 확장해본다면 메일 아침 해가 뜨면 자동으로 블라인드를 올려, 산뜻한 햇빛과 함께 아침이 맞이하게 해줄 수도 있겠습니다. 

 

 

 

 

2. 준비물

 

NO 부품명 수량 상세설명
MDF 외관  
2 우드락 가구 2 침대 / 스피커
3 오렌지보드 BLE 1 블루투스 4.0 포함 보드
4 조도 센서 모듈 1  
5 피에조 부저 1  
6 서보 모터 1  
7 브레드보드 1 SG-90
8 점퍼케이블    

 

부품명 MDF, 우드락 외관 오렌지보드 BLE 조도 센서 모듈 피에조 부저
파트

 

부품명 서보 모터 브레드보드 점퍼케이블
파트
 

 

 

TIP / 조도센서와 피에조 부저의 사용 방법을 알아보도록 하겠습니다. 

조도 센서 사용법 알아보기

서보 모터 사용법 알아보기

 

 

TIP / MDF 및 가구 제작 방법에 대해 알아보도록 하겠습니다. 

MDF 외관 조립하기

스마트 홈 구성하는 우드락 가구 만들기

 

 

 

 

3. 하드웨어 메이킹

 

 

 

 

4. 소프트웨어 코딩

 

  #include <Servo.h>  // 서보모터를 사용하기 위한 라이브러리 호출하기
  
  int servo = 6;  // 서보모터를 오렌지보드 A0번에 연결
  int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
  int notes[] = {4186, 6271};
  int tempo = 200; // 멜로디의 음 길이 설정
  int flag = 1;  // 블라인드의 상태를 저장하는 변수
  
  Servo blind;  // 서보모터를 blind라는 이름으로 선언
  
  void setup() {
    // 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
    Serial.begin(9600);
    pinMode(piezoPin, OUTPUT);  // 피에조 핀을 출력핀으로 설정
    blind.attach(servo);  // 서보모터를 6번핀에 연결
    blind.write(80); // 서보모토의 기본값을 80도로 설정
  }
  
  void loop() {
    // 조도 센서 값 측정 후 시리얼 모니터에 출력
    int cdsVal = analogRead(A0);
    Serial.println(cdsVal);
  
    // 날이 밝으면(빛이 밝아지면)
    if (cdsVal < 400) {
      // 현재 블라인드가 올라가있으면
      if (flag == 0) {
        // 멜로디를 출력하고
        for (int i = 0; i < 2; i++) {
          tone(piezoPin, notes[i], tempo);
          delay(100);
        }
        // 블라인드를 내림
        blind.write(180);
        // 블라인드가 내려가 있는 상태로 설정
        flag = 1;
      }
    }
    
    // 날이 어두우면(빛이 어두워지면)
    else {
      // 블라인드가 내려가 있으면
      if (flag == 1) {
        // 블라인드를 올림
        blind.write(80);
        // 블라인드가 올라가 있는 상태로 설정
        flag = 0;
      }
    }

    delay(100);
  }

 

 

소프트웨어 코드 설명

 

    // 날이 밝으면(빛이 밝아지면)
    if (cdsVal < 400) {
      // 현재 블라인드가 올라가있으면
      if (flag == 0) {
        // 멜로디를 출력하고
        for (int i = 0; i < 2; i++) {
          tone(piezoPin, notes[i], tempo);
          delay(100);
        }
        // 블라인드를 내림
        blind.write(180);
        // 블라인드가 내려가 있는 상태로 설정
        flag = 1;
      }
    }
    
    // 날이 어두우면(빛이 어두워지면)
    else {
      // 블라인드가 내려가 있으면
      if (flag == 1) {
        // 블라인드를 올림
        blind.write(80);
        // 블라인드가 올라가 있는 상태로 설정
        flag = 0;
      }
    }

 

조도센서의 측정값이 400보다 낮으면(밝아지면) 서보모터를 180도로, 400 이상이면(어두우면) 서보모터의 각도를 80도로 만들어 주는 코드입니다.

 

조도센서의 측정값은 주변환경에 따라 측정범위가 달라지니, 우선 조도센서를 측정하여 범위값을 확인 한 후 조건문의 조건(cdsValue < 400)을 변경해 주세요!

 

서보모터의 경우 밑의 사진을 참고하시고 180도 일 경우 밑의 사진처럼 서보모터 날개가 밑으로 내려도록, 80도 일 경우 서보모터 날개가 위로 올라가도록 조립해 줍니다.

 


 

 

flag의 경우 빛이 '어두울 경우 -> 밝을 경우' / '밝을 경우 -> 어두울 경우' 조건이 바뀔 때 1번만 멜로디와 모터의 동작을 제어하기 위해 사용되었습니다.

 

밝을 경우 flag를 1로 주고, 어두울 경우 flag를 0으로 주어 '밝을 경우 --> 밝을 경우' / '어두울 경우 -> 어두울 경우' 이와 같이 변경되면 아무런 동작을 하지 않도록 사용되었습니다.

 

 

 

5. 프로젝트 시연 영상

 

 

kocoafabeditor

코코아팹, 오렌지보드, 아두이노, 오픈소스하드웨어, SW교육, SW코딩, 코딩, 코딩 교육, 스마트홈, IoT 홈, IoT, DIY, 키트, kit, kocoafab, ornage board, arduino, opensource hardware, Software, education, physical computing, 조도 센서, CdS 센서, 서보 모터, Servo motor
profile

압구정양아치 2018-05-11 11:52:19

우노보드 사용해도 작동에 지장이 없나요?

profile

제발 2018-06-08 12:06:59

이제품판매도하시나요?