안녕하세요.
작동을 안하네요.
MAX9814 를 첨부와 같이 연결하였습니다.
그림을 보시면 MAX9814 의
GND --> Ground
VDD --> 5V
Analog 0 --> Out
소스는 올려주신 소스를 약간 수정했습니다.
아래 부분에 있습니다.
저는 LED 를 연결하지 않고 값만 찍어 보았는데
소리를 전혀 인식하지 못하는 것으로 확신을 하게 되었는데
다음과 같은 테스트를 해 보았습니다.
1) 센서와의 거래 40cm 정도 되는 곳에서 박수를 쳐 보았습니다.
시리얼모니터에 아무것도 찍히지 않았습니다.
2) 센서와의 거래 40cm 정도 되는 곳에서 박수를 제가 칠수 있는 되대로 쳐 보았습니다.
시리얼모니터에 아무것도 찍히지 않았습니다.
3) 센서와의 거래 30cm 정도 되는 곳에서 박수를 쳐 보았습니다.
시리얼모니터에 아무것도 찍히지 않았습니다.
4) 센서와의 거래 30cm 정도 되는 곳에서 박수를 제가 칠수 있는 되대로 쳐 보았습니다.
시리얼모니터에 아무것도 찍히지 않았습니다.
5) 센서와의 거래 20cm 정도 되는 곳에서 박수를 쳐 보았습니다.
sound_value 의 값이 4, 5 를 왔다 갔다 하면서 찍는데, 5가 훨씬 많이 찍힙니다.
6) 센서와의 거래 20cm 정도 되는 곳에서 박수를 제가 칠수 있는 되대로 쳐 보았습니다.
sound_value 의 값이 4, 5 를 왔다 갔다 하면서 찍는데, 5가 훨씬 많이 찍힙니다.
드디어 찍히기 시작해서 5 와 6을 비교해 보았는데,
소리의 크기에는 영향이 없었습니다.
20cm 정도에 손이 있고, 아무 소리를 내지 않아도 4, 5가 찍힙니다.
7) 센서와의 거래 15cm 정도 되는 곳에서 박수를 쳐 보았습니다.
sound_value 의 값이 6, 7 를 왔다 갔다 하면서 찍는데, 7가 훨씬 많이 찍힙니다.
8) 센서와의 거래 15cm 정도 되는 곳에서 박수를 제가 칠수 있는 되대로 쳐 보았습니다.
sound_value 의 값이 4, 5 를 왔다 갔다 하면서 찍는데, 5가 훨씬 많이 찍힙니다.
7 와 8을 비교해 보았는데,
소리의 크기에는 영향이 없었습니다.
15cm 정도에 손이 있고, 아무 소리를 내지 않아도 6, 7가 찍힙니다.
그래서 MAX9814 센서를 빼버렸습니다.
그런 후 위의 테스트를 40cm, 30cm, 20cm, 15cm 으로 손을 가져가면서 테스트를 했더니
case 1, 2, 3, 4, 5, 6, 7 과 동일한 현상이 발생했습니다.
그래서 이번에는 연결선을 빼 보았습니다.
우노 보의에서 analog 0 번의 연결선을 빼보았습니다.
그랬더니 출력을 멈추었습니다.
그래서 우노보드 analog 0번에 선을 다시 꼽고
analog 0번에 연결되어 있고, 빵보드에 꼽혀 있던 반대편 쪽 연결선을 빼 보았습니다.
그런 후 위의 테스트를 40cm, 30cm, 20cm, 15cm 으로 손을 가져가면서 테스트를 했더니
case 1, 2, 3, 4, 5, 6, 7 과 동일한 현상이 발생했습니다.
제가 두 귀의 역할 테스트를 위해 센서를 두개 구매를 했었는데,
나머지 다른 센서를 가지고 똑같이 테스트 해보았는데,
그래도 마찬가지 였습니다.
왜 그런 엉뚱한 현상(소리는 감지 못하고, 손과 analog 선과 의 거리를 감지하는 현상)이 발생하는 걸까요?
제가 무엇을 잘 못한 것일까요?
테스트한 소스는 다음과 같습니다.
const int sampleWindow = 50; // 샘플링한 시간 50ms
unsigned int value0; // 소리 증폭 감지 센서 값 받는 변수
int led[8] = {2, 3, 4, 5, 6, 7, 8, 9 }; // led 8개의 핀 번호 2~9
int sound_value0 ;
void setup() {
Serial.begin(9600); // 시리얼 모니터 시작, 속도는 9600
}
void loop() {
unsigned long startMillis= millis(); // 샘플링 시작
unsigned int peakToPeak0 = 0; // 음성 신호의 진폭
unsigned int signalMax0 = 0; // 최대 크기를 초기에는 0으로 설정
unsigned int signalMin0 = 1024; // 최소 크기를 초기에는 1024로 설정
while (millis() - startMillis < sampleWindow){ // 데이터를 50ms마다 모으는 while문
value0 = analogRead(A0); // 소리 감지센서에더 데이터 받아오기
if (value0 < 1024){ // 받아온 데이터의 값이 1024 이하일 때
if (value0 > signalMax0) // 최대 크기 측정
signalMax0 = value0; // 최대 크기 signalMax에 저장
else if (value0 < signalMin0) // 최소 크기 측정
signalMin0 = value0; // 최소 크기 sigmalMin에 저장
}
}
peakToPeak0 = signalMax0 - signalMin0; // 최대- 최소 = 진폭값
double volts0 = (peakToPeak0 * 5.0) / 1024; // 전압 단위로 변환 = 소리 크기로 변환
int distance0 = volts0 / 4.883;
int i, j, k;
for(i = 0; i < 8; i++){ // 소리크리를 led로 출력하기 위해 계산
float cal = i;
if(cal*0.40 < volts0 && ((cal+1)*0.40) > volts0) // 소리 크기가 어느 led까지 켜지게 되는지 계산
sound_value0 = i;
}
if(sound_value0 > 0 ) {
Serial.print("value0:"); Serial.print(value0); Serial.print(", sound_value0:");Serial.print(sound_value0); Serial.print(", distance0:"); Serial.println(distance0);
delay(50);
}
}
유선상으로 답변드렸습니다.
감사합니다.