메이킹 일지 (진행 중)/욘두 화살

욘두 화살 - 5. 코딩 작업 (마이크 관련 노이즈 코딩)

  • -

https://bker001.tistory.com/372

 

욘두 화살 - 4. 코딩 작업 (마이크 및 FFT관련)

https://bker001.tistory.com/359 욘두 화살 - 3. 코딩 작업 (자이로, 서보 모터) https://bker001.tistory.com/358 저번 글에 이어서 하드웨어가 거의 준비되어서 이제 코딩을 할 때가 왔습니다. 일단 이번에 사용해

bker001.tistory.com

 

저번과 이어서 코딩을 이어나가고 있습니다.

 

일단 음을 어떻게 받아들이는지 영상을 확인해주시는게 편할 것 같습니다

 

https://youtu.be/DUSCcqpACYU

 

 

문제점 1. 나는 분명히 주파수가 올라가는 음을 연주하였는데, 그래프가 내려간다.

문제점 2. 숨이 끊기는 부분에서 그래프 값이 순간적으로 확 내려가서 고정이 되어지지 않는다.

 

이 문제만 해결되면 확실히 저번처럼 map 함수를 이용하여 모터 제어가 가능할 것 같습니다.

 

 


 

문제점 1. 나는 분명히 주파수가 올라가는 음을 연주하였는데, 그래프가 내려간다.

그래서 이렇게 된 김에 그냥 확실한 주파수 음성을 마이크에 틀어서 결과를 확인해봤습니다.

 

https://youtu.be/EWnl359c4AI

 

 

주파수 영상으로 확인해보니까 확실히 문제를 확인가능했습니다.

주파수가 최대 값으로 정해놓은 1024보다 확연하게 위로 올라간 Hz를 가졌고, 이에 따라 위로 올라가는 주파수의 값은 다시 아래로 내려온 현상이 시작점이었습니다.

 

최고 주파수가 1024로 설정되어 있어서 이렇게 된 거라는 것을 볼 수 있었고, 바로 수정해줬습니다.

 

 

 

1/2로 최대값이 감소하니까 최대 값은 4098입니다.

 

 

https://youtu.be/h2NP3_Qaimw

 

 

이런 식으로 전개되서 일단 1번 문제를 해결할 수 있었습니다.

이후에는 음이 올라가도 이상하게 아래에서 발견되는 경우는 없겠네요

 


 

문제점 2. 숨이 끊기는 부분에서 그래프 값이 순간적으로 확 내려가서 고정이 되어지지 않는다.

 

이 문제는 사실 고민을 많이 했습니다. 

1. 주파수 평균값을 통해 어떻게든 값을 튀지 않게 조정할지, 아니면
2. 갑자기 주파수 값이 한 1000이상 차이나면 그 값을 인식하지 않게 할지

 

다양한 방법을 고민했습니다.

일단 주파수 값이 1000이상 차이 날때 값을 인식하고 무시하여 이전 값에 +1을 하여 표기하는 코딩을 진행해봤습니다.

 

 

정말 간단하게 구성해봤는데, 해당 식의 문제는.. peack 함수, 그러니까 Speak함수를 받아쓰는 함수가 void setup보다 위쪽에 존재한 int Speak = 1000; 값을 계속 받아서 인식을 해버립니다.

 

제가 원래 아는 방식은 void setup보다 위 쪽에 존재한 함수는 setup과 loop에서 씌워지는 줄 알았는데, 지금 그렇게 되는게 아니라 당황..  그래도 해당 식을 사용하면 초기 설정 주파수 1000에 항상 근접하려고 진행하는 식이 완성되기 때문에 일단 명령어에 포함시켜놨습니다.

 

그리고, Speak 주파수의 균형잡힌 값을 위해

 

 

 

매우매우 간단한 주파수 필터링 함수도 추가해주면서 일단 마쳤습니다.

한 번만 더 주파수 필터링을 진행해보려고 합니다. 만약 여기서도 안되면 그냥 토글 스위치를 추가해서, 토글 스위치를 누르는 동안은 Speak 함수가 0.몇 초 동안 지속되는 기능을 추가하려고 합니다. 그러면 잠깐 휘파람을 쉬는 동안은 마지막 Hz를 가지고 조종이 될 것 같습니다.

 

다음에는 앞에서 말하는 것처럼 필터링 함수, 토글 스위치등 추가하고 map 함수로 모터와 연결해보겠습니다.

반응형
Contents

포스팅 주소를 복사했습니다!

이 글이 도움이 되었다면 추천 부탁드립니다!