매뉴얼

수정 삭제
[조도센서X피에조센서] 아빠와 함께 모닝콜 침대를 만들어 보자
작성자 : KocoaFab 등록일 : 2018-05-18 조회수 : 168

첨부파일

 

 

1. 개요

 

매일 아침 우리는 전쟁을 치룹니다. 

바로 기상 전쟁을 말이죠.

 

매일 아침 제시간에 일어나기 위해 스마트폰 알람을 맞추고는 하지만,
울리는 휴대폰 알람을 끄고, 다시 잠에 든 경험은 누구나 한 번쯤 있을 것 입니다. 

 

출처 : 뉴발란스 퍼포먼스 블로그


매일 아침 물리치기 힘든 '아침잠'을 깨워줄 스마트한 디바이스가 있으면, 어떨까요?

침대에서 일어날 때까지 계속해서 알람을 울리게 한다면, 우리는 비로소 침대 위를 벗어나게 될 것 입니다. 

 

스마트 홈 키트에 구성되어 있는 조도 센서와 피에조 부저를 이용해 '일어날 때까지 알람을 울려주는 스마트한 알람 침대'를 구현해보도록 하겠습니다.

 

조도 센서와 피에조 부저의 활용 용도는 아래와 같습니다. 

 

- 조도 센서 :

  침대에 부착하여, 사람이 있는지, 없는지의 유무를 파악합니다.(사람이 누워있다면 조도 값이 어둡게 측정되고, 사람이 없다면 조도 값이 밝게 측정되는 원리를 활용합니다)

 

- 피에조 부저 :

  알람 멜로디를 출력합니다.

 

 

 

 

2. 준비물 / 부품 목록

 

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

 

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

 

부품명 피에조 부저 브레드보드 점퍼케이블
파트

 

 

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

조도 센서 사용법 알아보기

피에조 부저 사용법 알아보기

 

 

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

MDF 외관 조립하기

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

 

 

 

 

3. 하드웨어 메이킹

 

 

 

4. 소프트웨어 코딩

 

int C 1047 // 도
int D 1175 // 레 
int E 1319 // 미 
int F 1397 // 파 
int G 1568 // 솔 
int A 1760 // 라 
int B 1976 // 시 

int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결

int notes[25] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C };
// 학교종이 땡땡땡 멜로디 작성
int tempo = 200; // 멜로디의 음 길이 설정

void setup() {
  // 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
  Serial.begin(9600);
  pinMode(piezoPin, OUTPUT); // 피에조 핀을 출력핀으로 설정
}

void loop() {
  // 조도센서 값 측정 후 시리얼 모니터에 출력
  int cdsValue = analogRead(cdsPin);
  Serial.println(cdsValue);

  // 조도센서로 측정되는 빛의 밝기가 어두울 경우
  if (cdsValue > 700) {
    // 멜로디 재생
    for (int i = 0; i < 12; i++) {
      tone (piezoPin, notes[ i ], tempo);
      delay (300);
    }
    delay(100); // 멜로디 중간에 짧게 멈추는 용도

    for (int i = 12; i < 25; i++) {
      tone (piezoPin, notes[ i ], tempo);
      delay(300);
    }
  }
}

 

 

소프트웨어 코드 설명

 

int C 1047 
int D 1175 // 레 
int E 1319 // 미 
int F 1397 // 파 
int G 1568 // 솔 
int A 1760 // 라 
int B 1976 // 시 

int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결
int notes[25] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C };
// 학교종이 땡땡땡 멜로디 작성
int tempo = 200; // 멜로디의 음 길이 설정

 

알람에 사용할 멜로디를 미리 셋팅하는 코드입니다.

 

아래 이미지를 모시면 옥타브 및 음계별 주파수가 정해져 있습니다. 여기서 6옥타브 음계를 미리 C~B까지 변수에 저장을 한 후 notes배열 안에 멜로디 음계를 저장해 둡니다.

 

각 음계 주파수교컴 - 각 음계 주파수

 

 

  if (cdsValue > 700) {
    // 멜로디 재생
    for (int i = 0; i < 12; i++) {
      tone (piezoPin, notes[ i ], tempo);
      delay (300);
    }
    delay(100); // 멜로디 중간에 짧게 멈추는 용도

    for (int i = 12; i < 25; i++) {
      tone (piezoPin, notes[ i ], tempo);
      delay(300);
    }
  }

 

조도센서 측정값 700 기준으로 700보다 클 경우(어두울 경우) 멜로디를 재생하는 코드입니다.

 

조도센서의 측정값이 700이 넘으면 notes배열에 저장한 멜로디를 재생하고, 그다음 멜로디 재생이 끝나면 다시 조도센서로 주변 조도를 측정하게 됩니다.

 

멜로디 재생은 notes배열에 저장되어 있는 음계를 1개씩 재생하고 멜로디 중간 쉼표 부분에 delay(100)을 주어서 한박자 쉬고 남은 멜로디를 재생하게 됩니다.

(학교종이 땡땡땡 기준)

 

이 코드는 멜로디 재생 중에 다른 동작을 하지 않으므로, 멜로디 재생이 끝나야 그 다음 측정을 진행합니다.

 

주변 환경에 따라서 조도센서 측정값의 범위가 바뀔 수 있으니, 우선 조도센서를 측정해보고 측정값의 범위를 확인 한 후 위 코드의 조건문 'cdsValue > 700' 에 숫자를 바꿔주세요!

 

 

 

5. 프로젝트 시연 영상

 

 

출처:[KocoaFab] https://kocoafab.cc/make/view/732/