본문 바로가기
PROJECT/Arduino Mini Project

[ 아두이노 ] 피카츄 오르골 만들기

by 2CHAE._.EUN 2022. 9. 30.

[ 아두이노 토이 프로젝트 ]

 

* 210610~210612 코뮤니티 모각코 아두이노 과정에서 진행했던 프로젝트 입니다.

 

1. 프로젝트 소개 및 설명

 

조도 센서가 빛을 감지하면 LED, 스탭 모터, 피에조 부조가 모두 작동하는 오르골

빛을 감지하지 모산다면 모든 기능은 off가 된다.

 


2. 회로 구성 설명

 

 

① 브레드 보드에 5V와 GND를 각각 연결

 

② 조도 센서

 

A0 - A0 연결

VCC는 아두이노의 3.3V 연결

GND는 브레드 보드의 GND로 연결

 

③ RGBLED

 

8,9,10,11번 핀을 브레드 보드에 각각 연결

브레드 보드의 9,0,11번에 R,G,B를 각각 연결

-는 브레드 보드의 GND로 연결

 

④ 스탭 모터

 

+,-는 브레드 보드의 5V, GND로 각각 연결

IN1~IN4까지 브레드 보드의 8,9,10,11번에 연결

 

⑤ 피에조 부저

 

13번과 GND에 각각 연결

 


3. 코드 설명

 

#include <HuemonelabKit.h>

#define NOTE_FS5 740   //파#
#define NOTE_G5 784    //솔
#define NOTE_A5 880    //라
#define NOTE_AS5 932   //라#
#define NOTE_B5 968    //시
#define NOTE_C6 1047   //도
#define NOTE_CS6 1109  //도#
#define NOTE_D6 1175   //레
#define NOTE_E6 1319   //미
#define NOTE_FS6 1480  //파#
#define NOTE_G6 1568   //솔
#define NOTE_A6 1760   //라
#define NOTE_B6 1976   //시
 

Stepper stepper(8,9,10,11); //스탭 모터
RGBLed rgb(9,10,11); //RGBLED
LightSensor light(A0); //조도 센서

int pin = 13; //조도 센서 핀 번호

void setup() {
  Serial.begin(9600);
  stepper.setSpeed(5); //스탭모터 속도
  stepper.setDir(1); //스탭모터 방향( 오른쪽 회전 )
}

void loop() {
  int value = light.read(); //조도센서 빛 감지
  Serial.println(value);
  delay(500); 

  //score : 전체 음표 갯수
  int score = sizeof(edmelody)/sizeof(edmelody[0]);

  
  if( value < 640 ){//조도 센서가 빛을 감지한다면
      delay(1000); //빛을 감지하고 1초 후에 모든 기능 작동
      for( int i=0; i < score; i++ ){ 
      int value_new = light.read(); //피에조 부저가 작동하는 동안 새로운 빛 value 감지
      if( value_new > 640){ 
        break; //빛을 감지하지 못한다면 음악 꺼짐
      }
      rgb.setColor(random(255),random(255),random(255)); //조명 빛 랜덤
      int duration = 1000/beats[i]; //음길이 계산
      tone(pin, edmelody[i],duration); //피에조 부저 노래 재생
      delay(duration * 1.1); //음길이 딜레이
      stepper.move(3); //스탭모터 회전
      noTone(pin); 
      }
    }
   else { //조도 센서가 빛을 감지하지 못한다면
      rgb.setColor(0,0,0);
      stepper.step(0);
      noTone(pin);
    }
     
}

 

* 저작권 관련 문제로 노래 배열 코드를 올려도 되는지 모르겠음

 


[ 프로젝트 구현시 생겼던 문제점 ]

 

1. 스탭모터, LED, 피에조 부저를 동시에 작동시키기

 

처음 코드를 구상했을 당시 라이브러리에 저장돼있는 play 함수를 사용했지만 피에조 부저가 작동하면 스탭 모터와

LED가 동시에 동작을 안하고 모든 기능이 한차례씩 따로 작동했던 문제점이 있었다.

 

해결 방법으로는 구글링으로 tone 함수 사용법에 대해 알게 되었고, 계이름과 박자가 저장되어있는 배열을 사용하면서

for문을 통해 한 음당 한 차례씩 모든 기능을 작동시키는 방법을 사용하게 되었다.

 

2. 피에조 부저가 작동 중일 때의 조도센서

 

피에조 부저가 작동 중일 때 조도 센서가 빛을 감지하지 못하는 문제점이 발생했다.

if문을 사용해서 value 값의 범위를 다르게 설정해도 인식이 되지 않았던 문제점이 있었다.

 

해결 방법으로는 음악을 재생하는 for문 안에 있는 배열에 접근할 때마다 새로운 value 값을 감지해서 조도 센서가

빛을 인식할 수 있도록 구현했다.

 

3. 피에조 부저 노래 코드

 

피에조 부저 노래 코드 예시를 봤을 때 도대체 무슨 코드인지 이해가 되지 않았었지만 쉬운 예시를 보면서 피에조

부저의 음높이, 박자 등을 알게 되었고 해당 노래의 계이름을 찾아 직접 코드를 작성해볼 수 있었다.

 


[ 프로젝트 디자인 소개 ]

 

 

피규어의 컨셉 상 피카츄가 있는 잔디 정원을 만들고 싶었고 빛을 감지하는 조도 센서를 이용해 밝은 오후를

표현하고 싶었습니다. 

 


[ 프로젝트 작동 영상 ]