본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 KY-038 사운드 센서를 사용해서 심플 사운드 메터 만들어 보기

by 오마이엔지니어 2022. 4. 2.
반응형

Arduino Uno 로 KY-038 사운드 센서를 사용하는 방법을 확인해보고 간단하게 심플 사운드 메터 Simple Sound Meter를 만들어 보는 프로젝트 입니다

<KY-038 사운드 센서 (디지털&아날로그) 이미지>
KY-038 음성감지 사운드(Sound)센서 모듈은 음성, 소리 의 다양한 모니터링 과 데스트에  적합 합니다
동작전압 5V로 아두이노와 호환 가능하며 디지털 (DO) & 아날로그(AO) 출력이 가능 합니다
초경량 사이즈로 설치가 쉽고 가변저항으로 감도 조절이 가능 합니다

 

<10Segment 모듈 이미지>

10세그먼트 모듈은 10개의 LED를 하나의 하우징으로 구성해서 사용할수 있게끔 만든 모듈입니다
(적색, 파란색, 녹색, 노란색, 여러색상이 섞인 제품 등 다양한 모듈이 판매되고 있습니다)

10개의 LED를 바 그래프 처럼 활용해서 프로토타이핑 프로젝트등 여러가지로 활용이 가능합니다

BL-AR10Z2510

사용된 부품

Arduino Uno R3 (Italy)
KY-038 음성감지 사운드 센서모듈
10세그먼트 LED 바 그래프 - 적색
막대저항 220 Ohm - 10개

미니브래드보드

점퍼케이블(숫놈-숫놈)
점퍼케이블(숫놈-암놈)


구성 배선도 - 사운드 감지시 LED 점등시켜 보기 (디지털)

 

구성 배선도 - 사운드 감지시 시리얼 모니터로 출력값 변화 확인해 보기 (아날로그)

 

구성 배선도 - 사운드 감지시 10Segment 로 출력해 보기 (심플 라이트 메터 만들어 보기) 아날로그

 

사용된 예제소스

Digital Test.txt
0.00MB
Analog Test.txt
0.00MB
Sound Meter.txt
0.00MB


테스트 방법
별도의 라이브러리를 사용하지 않으므로 테스트 방법은 간단합니다

위 첨부된 예제 소스를 다운로드 해서 업로드 해주고 테스트 하면 됩니다

먼저 디지털 테스트 예제를 살펴보면
int led = 3;
int sensor = 2;
디지털 센서 입력핀이 2번, LED 출력핀이 3번입니다


void setup()
{
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
}
센서가 감지되면 LED가 HIGH로 점등 됩니다

아날로그 테스트 예제를 살펴보면
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
Serial.println(analogRead(A0));
delay(100);

센서 감지시 A0 아날로그 핀으로 연결해 시리얼통신 9600속도로
시리얼모니터로 출력값을 확인 가능합니다
사운드가 감지되면 전압이 낮아져서 출력값(아날로그 0~1024)이 줄어들게 됩니다

중요) 이때 시리얼 모니터를 확인하면서 사운드센서의 전위차계를 돌려서
동작 LED가 꺼지게 되는 임계값을 체크해 둡니다

심플 사운드 메터 테스트
예제를 살펴보면
int sensor_value = 0;
int threshold = 540; //Enter Your threshold value here
int abs_value = 0;
int ledCount = 10; //number of Bargraph LEDs
int bargraph[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // Bargraph pins
​임계값이 540인 것을 확인할 수 있습니다
아날로그 테스트를 하면서 체크한 임계값으로 예제코드를 수정한 다음 테스트 하면 됩니다
int threshold = 540; //Enter Your threshold value here

for (int i = 0; i <= 9; i++)
int ledLevel = map(abs_value, 0, (1024 - threshold), 0, ledCount);
아날로그 0~1024 수치로 0~9번핀에 연결된 세그먼트를 출력합니다

프로젝트 동영상 - 사운드 감지시 LED 점등시켜 보기 (디지털)


프로젝트 동영상 - 사운드 감지시 시리얼 모니터로 출력값 변화 확인해 보기 (아날로그)


프로젝트 동영상 - 사운드 감지시 10Segment 로 출력해 보기 (심플 라이트 메터 만들어 보기) 아날로그


이렇게 아두이노 음성감지 사운드센서와 10세그먼트를 사용해서 간단하게 사운드 메터를 만들어 볼수 있습니다
음성뿐만 아니라 스피커등을 가져다 대고 출력값 변화를 확인해 볼수 있습니다

이어서 MAX7219 8X8 매트릭스 모듈을 사용해서 사운드 메터를 만들어 보는 프로젝트입니다
MAX7219 (8X8) 도트 매트릭스 모듈을 사용합니다

구성 배선도 -사운드 감지시 8X8 Matrix로 출력해 보기 (심플 라이트 메터 만들어 보기) 아날로그

사용된 예제소스

Sound Meter Matrix.txt
0.00MB
Sound Meter Matrix_Line.txt
0.00MB
Sound Meter Matrix_Number.txt
0.00MB

사용된 라이브러리

LedControl-1.0.6.zip
0.01MB

LedControl 라이브러리를 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기포스팅을 참조해 주세요

Sound Meter Matrix 는 사운드 감지시 매트릭스에 파동으로 출력하는 예제입니다
Sound Meter Matrix_Line 는 사운드 감지시 매트릭스에 일열로 라인으로 출력하는 예제입니다
Sound Meter Matrix_Number 는 사운드 감지시 매트릭스에 숫자로 출력하는 예제입니다

예제코드를 살펴보면
#include <LedControl.h>
LedControl dot=LedControl(12,11,10,1);
LedControl 라이브러리를 사용하며
아두이노 12,11,10번핀에 연결 됩니다

byte levels[9][8]={
  {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},
  {B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},
  {B00000001,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000},
  {B00000001,B00000011,B00000111,B00000000,B00000000,B00000000,B00000000,B00000000},
  {B00000001,B00000011,B00000111,B00001111,B00000000,B00000000,B00000000,B00000000},
  {B00000001,B00000011,B00000111,B00001111,B00011111,B00000000,B00000000,B00000000},
  {B00000001,B00000011,B00000111,B00001111,B00011111,B00111111,B00000000,B00000000},
  {B00000001,B00000011,B00000111,B00001111,B00011111,B00111111,B01111111,B00000000},
  {B00000001,B00000011,B00000111,B00001111,B00011111,B00111111,B01111111,B11111111},
};
매트릭스 8칸에 출력되는 부분입니다 1을 추가하거나 0으로 만들어서 원하는대로 수정할수 있습니다

위 처럼 파동으로 출력 되도록 1이 하나씩 늘어나 매트릭스의 도트가 점등되도록 세팅되어 있습니다


#define POWER 7

#define BUTTON 8
#define SOUND analogRead(A0)
배선도에서 볼수 있듯이 버튼이 배선되어 8번핀에 풀업저항 1K Ohm과 같이 연결 됩니다
버튼을 눌러서 동작시키고 멈출 수 있습니다


  if(sts){
    if(SOUND<50)LEVEL=9;
    else if(SOUND<100)LEVEL=8;
    else if(SOUND<150)LEVEL=7;
    else if(SOUND<200)LEVEL=6;
    else if(SOUND<250)LEVEL=5;
    else if(SOUND<300)LEVEL=4;
    else if(SOUND<350)LEVEL=3;
    else if(SOUND<400)LEVEL=2;
    else LEVEL=1; // else if(SOUND<450)LEVEL=1;
아날로그 A0 사운드 전압에 따른 레벨값 세팅입니다
먼저 시리얼 모니터를 켜고 기본 임계값과 사운드 감지시 줄어드는 출력값을 확인한 다음
400~100 이 부분을 적당하게 수정해 준 다음 테스트 해야 합니다
(아래 테스트 동영상에서는 파동이 잘 표현되게 2번 450, 3번 425, 4번 400, 5번 375, 6번 350, 7번 325, 8번 300
이런식으로 수정해서 테스트 하였습니다)
KY-038 사운드센서는 위에서 언급했듯이 사운드 감지시 전압이 줄어 출력값이 줄어듭니다

프로젝트 동영상 - 사운드 감지시 8X8 Matrix 로 출력해 보기 (심플 라이트 메터 만들어 보기) 아날로그

 

반응형

댓글