아두이노 소리센서 활용 - adu-ino solisenseo hwal-yong

이번에 아두이노 센서 몇 개를 구입했는데 아무 생각 없이 클릭해서 선택한 녀석들 중에 소리센서도 포함되어 있더라. 그런데 아쉽게도 소리의 크기를 측정할 수 있는 건 아니고 그저 소리가 있는지 없는지만 구분할 수 있는 단순한 센서이다. 물론 가변저항이 붙어 있어서 어느 크기의소리에 반응할지 조절할 수는 있지만 섬세하게 그 크기를 측정할 수 없는 아쉬움은 남는다.

여하튼 이 단순한 소리 센서를 이용해서 다음 영상과 같은 예제를 만들어보고자 한다. (실제로는 소리가 이렇게까지 크지 않은데...;; 녹화만 하면 시끄럽다. ㅎㅎ 영상을 실행하기 전에 혹시 컴퓨터 볼륨이 조금 크게 설정되어 있다면 살짝만 줄이고 실행하는 게 좋을 것 같다.)

1. 예제

▲ 예제처럼 일정 크기의 소리가 있을 때만 소리센서가 값을 읽어 들여서 LED를 켜도록 하는 예제를 만들어보고자 하는데 준비해야 할 것들은 아두이노, 소리센서, LED 등이다.

▲ 이게 이번에 구입한 소리센서인데 사진에서 보는 것처럼 가변저항이 붙어 있어서 어느 정도 소리에 반응할지 조절해줄 수 있으며 핀은 VCC와 GND 그리고 소리의 유무에 따라서 0과 1의 디지털 신호를보내는 녀석까지 세 개가있다.

2. 회로

▲ 회로는 다음과 같이 만들어봤는데 소리센서에서 출력되는 0또는 1의 값을 아두이노 디지털 2번 핀에서 받도록 했으며 3번 핀에서는 LED에 신호를 보내도록 연결했다.

▲ 이제 소리센서에서 ON 값이 들어오면 LED가 켜지도록 아두이노 스케치 코딩을 해보자.

3. 코딩

▲ 간단한 예제라서 소스 코드의 내용도 간단하다. 먼저 ① 디지털 2번 핀에서 들오는 0또는 1의 값을 저장하기 위해서 sound라는 int형 변수를 선언했으며 ② setup()에서는 값을 받아들일 핀(2)과 출력할 핀(3)을 각각 INPUT과 OUTPUT으로 초기화했다. 그리고 데이터가 들어오면 아두이노 시리얼 모니터에서 그 값을 확인하기 위해서 시리얼 통신을 준비했다.

③ loop() 함수에서는 sound 함수에 2번 핀의 디지털 신호를 저장하도록 했으며 만약 그 값이 1이면즉, 소리센서가 어떤 소리를 읽었다면 시리얼 모니터에 SOUND_ON이라는 문자열을 출력하도록 했으며 LED를 0.1초 동안 켰다가 끄도록 하고 있다.

이렇게 작성한 소스 코드를 아두이노에 업로드하고 테스트를 해보면서 앞에서 봤던 영상과 같은 단순한 결과를 얻을 수 있는데 좀 더 섬세하게 데이터를 읽어들일 수 있는 소리센서라면 다양하게 응용해서 사용할 수 있을 것 같다.

소리감지 센서는 마이크에 소리가 입력될 때 소리의 세기에 따라 변하는 전압 변화를 측정하여 소리의 크기를 판별하기 위한 센서이다

위와 같이 Out 단자가 하나인 모듈도 있고 아래와 같이 D0와 A0 즉 디지털 출력단자와 아날로그 출력단자 두개로 나누어져 있는 경우도 있다. 출력단자가 하나밖에 없거나 D0단자로는 소리가 일정 수준 이상이 되었을 때 한가지 동작을 할 수 있지만,  아날로그 출력단가 있는 경우에는 소리의 세기에 따라 각각 다른 동작을 할 수가 있다.( 예를 들어 소리의 크기에 따라 켜지는 LED의 숫자를 다르게 하는 사운드 레벨메터 등)  

구조 및 사양

 - VCC단자와 GND단자에 3~5V 전원을 공급하면 마이크에 입력되는 소리의 크기가 A0단자로 출력되고 일정 크기 이상되면 D0단자에 HIGH신호가 출력되고 감지표시 LED에 불이 들어 오게 된다.

- 어느 정도 크기 이상의 소리가 감지되면 D0 신호를 출력할 것인지 비율은 감도 조절 볼륨으로 조절할 수 있다.

아두이노와의 연결

위와 같이 디지털 출력 D0 단자를 아두이노 디지털 I/O핀에 연결하고 아날로그 출력단자(A0)는 아두이노 아날로그 입력 핀에 연결하면 된다. 

샘플프로그램

감지되는 사운드 크기를 표시하고, 일정 크기 이상이 되어 디지털감지 신호가 입력되면 이를 표시하는 프로그램

Toplist

최신 우편물

태그