소리센서는 소리를 감지하는 사운드센서 혹은 음향센서로 부른다.
사운드 센서란 주변에서 흔히 볼 수 있는 마이크를 생각하면 된다. 소리가 발생할 경우 소리 센서는 소리의 크기와 지속시간에 따른 아날로그 신호를 출력한다. 소리로 전등을 켜고 끄거나 또는 주차 중인 차 안에 설치하여 주변에 소리가 발생할 경우 카메라가 동작하는 기능들은 사운드 센서를 사용해서 구현할 수 있는 기능들이다.
라즈베리파이 스마트 홈 실습 과정 전체 포스팅 리스트
라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8
주변에서 여러 가지 응용범위가 많은 사운드 센서를 실습하기로 한다. 아래는 사운드 센서의 모양과 핀 맵을 보여준다. 사운드 센서도 마찬가지로 출력은 4핀으로 되어 있다. 전원과 GND과 센서의 출력을 Analog로 출력하는 Aout과 HIGH, LOW로 출력하는 Digital 출력핀이 그것이다. 아래는 사운드 센서의 외관과 핀 맵을 나타낸다.
사운드 센서 사양과 전기적 특성
사양 | 특징 |
크기 | 32mm*17mm*15mm( length*width*height) |
Chip | LM393, 전기 콘덴서 마이크 |
작동 전압 | DC 3-6v |
출력 | 아날로그/디지털 |
LED | Power LED, Sensor Indicator LED |
여기서 사운드 센서 테스트는 아날로그 입력을 받아 아날로그 값을 출력하는 것을 테스트한다. 스마트 홈 보드의 U4인 MCP3208 IC는 SPI인터페이스를 사용한다. 이종 컴퓨터 간의 데이터 통신을 위해 사용되는 것으로 센서, ADC, 다른 MCU와의 통신에 많이 사용되며, 마스터 및 슬레이브로 나누어 상호 간의 통신을 할 수 있다. 라즈베리파이와 8-Channel 12-Bit A/D Converters 인 MCP3208을 SPI 기능을 통하여 통신하여, MCP3208를 이용하여 센서 값을 받아오는 테스트를 해보도록 하겠다. 아래는 대표적인 SPI 인터페이스회로이다.
위와 같이 연결되어 SPI 인터페이스로 사운드 센서의 데이터를 획득할 수 있다. 아날로그 데이터를 얻기 위해 연결된 모양을 아래 그림에 나타내었다.
센서 캘리브레이션 (Calibration, 보정)
다른 센서와 마찬가지로 사운드 센서도 보정을 거친 후 사용해야 한다. 방법은 전원을 연결하면 센서모듈 중앙의 두 개의 LED 중 한 개 전원 LED에 불이 들어온다. 이때 다른 LED 도 켜져 있다면 항상 신호가 들어오는 것이므로 가변저항을 돌려 약간만 시계, 반시계 방향으로 돌려도 신호 출력 LED 가 꺼지는 상태까지 보정해 주면 된다.
사운드 센서 테스트 소스코드 home-sound.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#define CS_MCP3208 8 //GPIO 8
#define SPI_CHANNEL 0
#define SPI_SPEED 1000000 //1Mhz
// spi communication with Rpi and get sensor data
int read_mcp3208_adc(unsigned char adcChannel)
{
unsigned char buff[3];
int adcValue = 0;
buff[0] = 0x06 | ((adcChannel & 0x07) >> 2);
buff[1] = ((adcChannel & 0x07) << 6);
buff[2] = 0x00;
digitalWrite(CS_MCP3208, 0);
wiringPiSPIDataRW(SPI_CHANNEL, buff, 3);
buff[1] = 0x0f & buff[1];
adcValue = (buff[1] << 8 ) | buff[2];
digitalWrite(CS_MCP3208, 1);
return adcValue;
}
int main(void) {
unsigned char adcChannel_sound = 2;
int adcValue_sound = 0;
printf("start");
if(wiringPiSetupGpio() == -1)
{
fprintf(stdout, "Unable to start wiringPi :%s\n", strerror(errno));
return 1;
}
if(wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1)
{
fprintf(stdout, "wiringPiSPISetup Failed :%s\n", strerror(errno));
return 1;
}
pinMode(CS_MCP3208, OUTPUT);
while(1)
{
adcValue_sound = read_mcp3208_adc(adcChannel_sound);
printf("sound = %u\n", adcValue_sound);
delay(100);
}
return 0;
}
컴파일 명령
$gcc –o home-sound home-sound.c -lwiringPi
실행 명령
$ sudo ./home-sound
혹은
./home-sound
모든 센서들의 출력은 아날로그 출력을 기본적으로 가지고 있다. 정밀한 센서값과 필요할 때 언제든지 센서값을 읽어 처리가 가능하다는 면에서 아날로그 출력을 사용하는 장점이 있다. 사용상의 어려움으로 디지털 출력을 선호하고, 디지털 출력을 혼합하여 나오는 센서들이 대부분이다. 아날로그 출력을 얻기 위해서는 위의 방법을 사용한다.
테스트 결과
$ sudo ./home-sound
startsound = 2126
sound = 2125
sound = 2126
sound = 2128
sound = 2127
sound = 2126
sound = 2128
sound = 2127
sound = 2128
sound = 2128
sound = 2127
여기까지 욕보셨습니다. 다음 센서로 넘어갑니다. ^^
'개발자 > 라즈베리파이4' 카테고리의 다른 글
라즈베리파이4 스마트홈 인체감지 모션센서 코드 7 (0) | 2023.05.16 |
---|---|
라즈베리파이4 스마트홈 온도 습도센서 코드 6 (0) | 2023.05.15 |
스마트홈 서버 프로그램 데이터 베이스 에러 해결 (1) | 2023.05.12 |
라즈베리파이4 스마트홈 조도센서 코드 5 (0) | 2023.05.12 |
라즈베리파이4 스마트홈 가스센서 코드 3 (4) | 2023.05.10 |
라즈베리파이4 스마트홈 불꽃 센서 코드 2 (1) | 2023.05.09 |
라즈베리파이4 스마트홈 제품 특징 1 (1) | 2023.05.09 |
Raspberry Pi 4 기구 도면 (0) | 2023.04.07 |
더욱 좋은 정보를 제공하겠습니다.~ ^^