프로젝트

음악에 반응하는 인터렉티브 아두이노 작품 만들기!

페이지 정보

작성자 메카 작성일16-03-17 18:33 조회13,023회 댓글1건

본문

 

02cd46d8a607ca14b01d10ead866e139_1458206
 

 

이번에는, 음악에 반응하는 아두이노 작품을 프로젝트로 해볼까 합니다.

 

지난 주말에 노래방에 갔다왔는데, 노래방 기계에 '멋진 디스플레이'가 달려있더랍니다.

 

02cd46d8a607ca14b01d10ead866e139_1458206
 

 

02cd46d8a607ca14b01d10ead866e139_1458206
 

 

사진은 노래방 기계는 아니지만 이런느낌으로 음악에 반응하는 형식이었습니다.

 

(정식명칭은 오디오 스펙트럼 아날라이저입니다.)

 

이전에도 비슷한 작품을 만들어본 경험이 있지만, 집에 두고두고 사용하고 싶은 마음이 문득 들어 깔끔하게 만들어보기로 하였습니다.

 

http://blog.naver.com/roboholic84/220555499562


(↑이전에 만들었던 프로젝트 링크입니다.)

 

즉 이번에 만들것은!

 

음악에 반응하는 인터렉티브 아두이노 작품!!

 

 

이번에는 거추장스럽게 회로를 만들지 않고, 쉴드만 사용하여서 하드웨어는 금방 만들 수 있도록 하였습니다.

 

 

 

이번에 만들 작품은 다음과 같습니다.!

 


02cd46d8a607ca14b01d10ead866e139_1458206


02cd46d8a607ca14b01d10ead866e139_1458206

 

 

 

02cd46d8a607ca14b01d10ead866e139_1458206


02cd46d8a607ca14b01d10ead866e139_1458206

 

사진으로만 보았는 데 벌써 멋진 작품이 될것같지요?

 

 

 

사진으로만 감상하지 말고 동영상으로도 한번 감상해 보도록 하겠습니다.

 

 

카메라 영상으로 찍기에는 밝은편이라 필름을 덮고 찍어보았습니다.

 

정말 노래방에 온것처럼 음악에 반응해서 동작하네요

 

02cd46d8a607ca14b01d10ead866e139_1458206
 

 

자, 그럼 이제 본격적으로 만들어 보도록 하겠습니다.

 

[필요한 부품들]

 

아두이노 우노

 

 

네오픽셀 쉴드

 

 

 

오디오 스펙트럼 쉴드

 

 

납땜이 필요한 제품입니다. 메카솔루션에 전화 주시면 납땜해서 보내드립니다.

 

 

 

스테레오 M/M 케이블

 

 

인터넷에서 1000원정도의 가격에 구해보실 수 있습니다.

 

 

 

조립 하기!

 

 

 

반분도 안되서 완성해버릴 정도로 단순한 구조를 가지고있습니다!

 

(사실 이것이 아두이노와 쉴드들이 가지는 강점!)

 

조립이 끝낫으니 소프트웨어를 만들어보도록 하겠습니다.

 

 

 

소스코드

 

우선 라이브러리를 다운로드 해줍니다.

 

기본 라이브러리가 있었으나 사용이 불편해서 제가 다른 라이브러리를 가져와서 전용으로 수정하였습니다.

 

https://github.com/keepworking/MECHA_MSGEQ7_lib

 

위 링크에서 라이브러리를 다운로드 하실 수 있습니다.

 

라이브러리 추가하는 법 알아보기

 

02cd46d8a607ca14b01d10ead866e139_1458207 

 

링크로 들어가서 압축파일을 다운로드 합니다.

 

02cd46d8a607ca14b01d10ead866e139_1458207 

 

아두이노 상단 메뉴의 스케치->라이브러리 포함하기 -> .ZIP 라이브러리 추가... 를 클릭하여 줍니다.

 

그후, 다운로드 한 파일을 선택하여서 추가합니다.

 

02cd46d8a607ca14b01d10ead866e139_1458207 

스케치 -> 라이브러리 포함하기 -> 라이브러리 관리 를 통해 라이브러리 매니저를 실행합니다.

%B6%F3%C0%CC%BA%EA%B7%AF%B8%AE_%B8%C5%B4 adafruit neopixel 을 검색하여서 네오픽셀 라이브러리를 설차하도록 합니다.

 

소스코드

 

라이브러리를 확인하였으니 소스코드를 알아보도록 하겠습니다.

 

예제코드 neo_spectrum_gold_sapphire.ino

 

 #include <MSGEQ7.h>

#include <Adafruit_NeoPixel.h>

#define MIN_K_value 100

#define MAX_K_value 200

int K_value = 100;

MSGEQ7 eq;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(40, 6, NEO_GRB + NEO_KHZ800);

 

uint32_t color_map[40] =

{ //위치별 픽셀 색상설정. 마음에 드는 색조합을 맞추어보세요!

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af

}

;

 

void setup() {

  eq.init();//스펙트럼 쉴드를 사용하기 시작합니다.

  pixels.begin();//네오픽셀을 사용하기 시작합니다.

  pixels.clear();//네오픽셀을 사용하기 시작합니다.

}

int cnt = 0;

void loop() {

  eq.poll();//오디오 정보를 갱신합니다.

  int max_v = 0;

  pixels.clear();

  for(int i = 0;i < 7;i++){//입력받은 신호에 따라 네오픽셀을 제어합니다.

    int l = eq.getLValue(i);

    int r = eq.getRValue(i);

    int v = (l<r? r:l);

    max_v = (v>max_v? v:max_v);

    for(int j = 0;j < 5;j++){

      if(v > K_value*(5-j)){

        on_pixel(i+(8*j));

      }

    }

  }

  for(int j = 0;j < 5;j++){//최대음량을 마지막 줄에 표시합니다.

    if(max_v > K_value*(5-j)){

      on_pixel(7+(8*j));

    }

  }

  K_value = constrain(max_v/5,MIN_K_value,MAX_K_value);//5등분 분할의 기준을 음악의 최대값의 크기에 맞게 조절합니다.

  pixels.show();

  delay(100);

}

 

void on_pixel(int index){

   pixels.setPixelColor(index, color_map[index]);//각위치에 맞는 색상을 선택합니다.

}

 

샘플로 만든 컬러 스킨들입니다.

 

02cd46d8a607ca14b01d10ead866e139_1458207

red_blue
02cd46d8a607ca14b01d10ead866e139_1458207

green_purple
02cd46d8a607ca14b01d10ead866e139_1458207
 

gold_sapphire

(제가 이름짓고도 창피합니다..)

 

 

이외에도 소스코드의 다음부분을 수정하시면 원하시는 색상으로 맞출 수 있습니다.

 

0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af,

  0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x00efef00,0x005050af

 

구조를 확인해보면.

 

0xWWRRGGBB

 

의 형태를 가지고있습니다.

 

WW: WRGB를 지원하는 네오픽셀에서만 사용합니다. 일반 네오픽셀은 00으로 고정하도록 합니다.

 

RR: 적색 LED의 밝기를 설정합니다. 0~255의 범위로 16진법에 따라 00~FF로 선택해주시면 됩니다.

 

GG: 녹색 LED의 밝기를 설정합니다. 0~255의 범위로 16진법에 따라 00~FF로 선택해주시면 됩니다.

 

BB: 청색 LED의 밝기를 설정합니다. 0~255의 범위로 16진법에 따라 00~FF로 선택해주시면 됩니다.

 

 

사용법 알아보기

 

 

02cd46d8a607ca14b01d10ead866e139_1458207
 

 

위그림을 예로들자면, 컴퓨터 혹은 스마트폰에서 나오는 원음을 아두이노 쉴드의 입력 사운드에 연결해주도록하고, 출력 잭에 스피커나 헤드셋등을 연결해주신 다음, 전원을 연결해주시면 사용할 수 있습니다!!!

 

 

 

 

끝가지 읽어주셔서 감사합니다!!!

 

 

 

댓글목록

안드류님의 댓글

안드류 작성일

메카솔루션에 납떔을 어떤식으로 해달라고 해야되나요???


모바일 버전으로 보기