무선 스피커 만들기는 2020년 1학기 어드벤처 디자인 작품 발표를 위한 프로젝트였다.
무선 스피커 만들기
무선 스피커를 만들게 된 계기는 유튜브에서 스피커 관련 동영상을 보고 감명을 받아서였다.
(출처 : https://youtu.be/77FliBh61_c)
처음에는 동영상에 나온 형태의 스피커를 만들어 보려고 했으나 예산 부족 등의 한계로 아래와 같은 형태의 스피커로 대체하여 진행하였다.
제작
주제 : 블루투스를 이용한 LED 사운드바
- 개요: 블루투스 스피커를 통해 재생되는 음악을 사운드 센서가 소리의 크기를 인식하여 여러 줄의 네오픽셀의 출력을 제어한다.
- 목적: 소리 크기에 따라 변화하는 빛을 이용하여 심미적인 만족감을 얻는다. 시각 효과로 더욱 입체적인 음악 감상을 돕는다.
- 필요한 부품
- 네오픽셀 250cm: 스피커의 모양을 반지름 5cm, 높이 10cm의 원통으로 제작할 때 여유분을 포함하여 필요한 길이 수치
- 사운드 센서: 아날로그 입력을 디지털 값으로 변환하는 역할
- 블루투스 오디오 수신 모듈: 사용자의 스마트폰과 블루투스로 연결하여 스피커를 통해 음악이 재생될 수 있게 도와줌
- 이외에 소형 스피커, 리튬배터리, 배터리 충전 모듈, 배터리 홀더 등이 사용되었다.
모델 외형
- 모델의 외형은 tinkercad를 이용하여 3D 모델링하였다.
작동원리
- 작동원리 1
우리가 구매한 네오픽셀은 길이가 한정되어 있기 때문에 네오픽셀을 여러 줄로 이어서 사용할 필요가 있었다.
네오픽셀의 각 픽셀은 0부터 시작하여 번호가 부여되는데, 이를 이용하여 이어 붙이는 네오픽셀의 LED 각각을 제어할 수 있다.
스피커 내부의 원통 기둥에는 네오픽셀 1줄에 10개의 LED가 들어가도록 잘라서 이어 붙였다.
- 작동원리 2
사운드 센서는 마이크에 소리가 입력될 때 소리의 세기에 따라 변하는 전압을 측정하여 소리의 크기를 구별하는 센서이다. 우리는 사운드 센서의 아날로그 핀을 이용하여 마이크로 입력이 되는 소리의 크기가 A0 단자를 통해 입력으로 들어오도록 하였다.
우노 보드로 들어오는 숫자의 값은 최대 1023이며, 실제 환경에서 들어오는 입력 값은 대략 500정도이다.
입력값이 들어왔을 때 수치에 따라 LED가 어디까지 켜질지를 정하여 코드를 구현하였다.
다행히 네오픽셀 관련 라이브러리가 있어서 코드를 간단히 구현할 수 있었다.
맨 처음에 사용하는 핀들을 정의하고, 들어오는 아날로그 값을 noise로 그리고 noise에 따라 색이 바뀌도록 하였다.
- 작동 코드
#include <Adafruit_NeoPixel.h>
#define MIC_PIN A0
#define LED_PIN 3
#define N_PIXELS 78
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
void loop() {
noise = noise + abs(analogRead(A0)+10);
Serial.println(noise);
updatePixels(noise, RED, GREEN, BLUE);
delay(20);
void updatePixels(int noise, int RED, int GREEN, int BLUE) {
if( noise>300){
RED = 1;
GREEN = 0;
BLUE = 255;
}
if( 250<noise&&noise<300){
RED = 0;
GREEN = 210;
BLUE = 202;
}
if (noise > 300) {
strip.setPixelColor(78,RED,GREEN,BLUE);
}
else {
strip.setPixelColor(78, 0, 0, 0);
if (noise > 297) {
strip.setPixelColor(77, RED,GREEN,BLUE);
}
else {
strip.setPixelColor(77, 0, 0, 0);
}
// 이후 생략
작동원리는 간단하며 이 부품들에 추가로 블루투스 오디오 수신 모듈과 소형 스피커만 연결하여도 충분히 시중에 파는 블루투스 스피커와 동일한 제품을 만들 수 있다.
제작과정
학교에서 기본적으로 제공하는 아두이노 키트다. 이것만으로는 작품을 제작하기 힘들어서 추가로 부품을 구매하였다.
별로 없는 것 같아도 저것만 해도 거의 10만원 가까이 들었던 것 같다.
그래도 시중에 파는 블루투스 LED 스피커가 대략 20만원이니 그것보다는 훨씬 싼 가격으로 만들 수 있었다.
구매한 네오픽셀이 잘 작동하는 지 확인하기 위해서 아두이노 보드에 간단한 코드를 저장한뒤 정격 전압을 가하고 네오픽셀을 연결하였다.
다행히 네오픽셀은 정상적으로 동작하였다.
학교 오픈랩에 있는 3D 프린터를 이용하여 3D 모델링한 것을 그대로 출력하였다.
처음에 외형이 만들어지고 꺼냈을 때 몹시 당황했다. 구멍이란 구멍은 다 막혀있었고 내부에 실타래 처럼 플라스틱이 늘여져 있었기 때문이다. 알고보니 3D 프린터는 한줄씩 쌓아 올리면서 모델을 제작하다 보니 어쩔 수 없이 빈공간 없이 쌓여 올라간다고 오픈랩 관리인분이 말했다..
그래서 저 빈공간과 튀어나온 부분들은 집에 가서 직접 칼로 모두 제거하였다.
우리가 만든 스피커는 충전이 가능해야 했으므로 리튬배터리에 충전 모듈을 연결하여 5핀 충전잭으로 충전이 가능하도록 하였다. 배터리가 무겁기 때문에 스피커가 안정적으로 중심을 잘 잡을 수 있도록 가장 하단부에 두었다.
배터리의 방전이 크게 일어나지 않도록 사용하지 않는 순간에는 전원이 꺼지도록 스위치를 연결하였다.
스위치는 집 근처의 공업사에서 구매했던 것으로 기억한다.
스마트폰과 블루투스로 연결되는 오디오 수신 모듈이다. 우리는 오디오 수신 모듈을 아두이노 보드에 연결하는 것이 아니라 오디오 수신 모듈을 통해 소형스피커로 소리를 내보내고 이 소리를 아두이노의 사운드센서에서 인식하여 네오픽셀을 제어하도록 설계하였다.
소형 스피커를 오디오 수신 모듈에 연결하였다. 지금으로도 블루투스 스피커가 완성된 것이지만 추가로 네오픽셀을 추가하여야 비로소 블루투스 "LED" 스피커가 된다.
네오픽셀과 우노보드, 사운드 센서를 최종적으로 연결하였다. 네오픽셀은 처음에 언급한 것처럼 기둥에 한 줄씩 감싸서 올라가는 형태로 제작하였다. 참고로 네오픽셀의 기둥은 집에 굴러다니는 소독약 통을 잘라서 사용하였다. 깜빡하고 3D 프린팅을 할 때 기둥을 제작하지 못한 탓이었다. 이러면 안되지만 이 순간만큼은 코로나한테 감사를 표할 수밖에 없었다.
우노보드가 납땜용이 아니었기 때문에 글루건을 이용하여 선이 개방되지 않도록 단단히 고정하였다.
최종 작품
이 좁은 모형에 모든 부품이 다 들어갈까 걱정했는데 다행히도 다 들어갔다.
3D 모델링 했던 그대로 작품을 제작할 수 있었다.
스마트폰의 음악의 크기에 따라 블루투스 스피커의 LED가 다르게 동작함을 확인하였다.
성공적으로 블루투스 LED 스피커를 제작하였다.
여태껏 한번도 임베디드 관련 활동을 해본 적이 없었는데 군대를 갔다오고 복학하니 이 수업이 생겨서 참여했고, 생각보다 훨씬 재미있고, 아두이노의 전반적인 작동원리와 코딩 등을 배울 수 있어 좋았다.