Skip to content

아두이노 레오파드와 비교기가 달린 마이크를 이용하여 평면의 충격지점을 찾아 터치 스크린과 같은 효과를 구현(Using Arduino Leopard and microphone with comparator, find the impact point on the plane and achieve touchscreen-like effects)

Notifications You must be signed in to change notification settings

ijinse1993/GetPointOfImpact2D

Repository files navigation

이 코드의 기본 목적은 에어소프트건으로 BB탄을 쏴서 탄착지점을 PC에서 받기 위한 코드이지만 충격음만 난다면 다른 목적으로도 사용할 수 있습니다.
충격음을 마이크를 통해 인식하고 각 마이크별 충격음이 들어온 시간차를 이용하여 탄착점의 위치를 계산합니다.
다만 제대로 된 정확도를 얻기 위해선 온도 측정, 판의 재질, 충격음의 크기 및 종류 등 물리적인 조건이 매우 중요합니다.

현재 테스트 된 잘 동작되는 환경은 두 가지입니다.

  • PVC 필름을 소재로한 빔프로젝터 스크린을 탄착지점으로 사용 (큰 화면 사용가능, 외부 소음에 취약, 스크린 크기에 따라 마이크를 납땜을 통해 개조해야할 수 있음, 스크린이 흔들리지 않도록 단단히 고정하는 작업이 필요 )
  • 모니터에 PVC 필름을 고정시켜 탄착지점으로 사용 (밀폐를 잘 시키면 외부 소음의 영향을 어느정도 줄일수 있음)

책상, 아크릴판등 단단한 물체를 탄착지점으로 사용할 경우 불가능하진 않지만 정확도가 상당히 낮거나 완전히 이상하게 동작하는 경우가 많아 실패할 가능성이 매우 매우 큽니다.

제작 시 필요한 기술에 대해 아래가 가능하다면 제작에 도전해보실 수 있습니다.

  • DIY를 위한 인내심 및 시간
  • 전선을 이용하여 두 지점을 연결할 수 있다. (납땜 혹은 납땜없이 연결 가능한 커넥터를 이용)
  • 모니터에 양면테이프등을 활용하여 막대를 붙여 원하는 모양을 만들 수 있다. (프레임 제작)
  • 초등학교 수준의 전기 지식


1. 부품 구매
필요한 최소한의 재료는 아래와 같습니다.

  • 아두이노 레오나르도
  • 입력신호의 크기가 임계점 전후로 디지털 신호 high, low가 출력되는 마이크 4개
    • 모니터 기준 테스트 된 마이크: SZH-EK033(https://www.devicemart.co.kr/goods/view?no=1279095), 알리 익스프레스 검색명칭 (KY-038)
    • SZH-EK033 마이크 사용 시 약 80~90cm의 거리까지 인식이 가능한것을 확인하였으며 탄착음의 크기등에 따라 더 길어질수도 짧아질수도 있습니다.
    • 더 먼거리 인식이 가능하도록 다른 마이크를 사용하여 개조 작업을 진행했으며 이에 대해선 '마이크개조.docx' 파일내용을 참조하시기 바랍니다.
  • 마이크와 아두이노를 연결하고 전원을 공급할 전선
  • LM35D 온도 센서 (공기 온도가 정확도에 상당히 큰 영향을 주기 때문에 탄착판 근처에 설치되어야 함)
  • 마이크를 부착할 때 마이크가 부착지점에서 진동을 통해 들어올 수 있는 노이즈를 방지하기 위한 스펀지 혹은 성형이 쉬운 흡음재
  • 탄착판으로 사용될 2T 투명연질PVC필름
  • 필름과 마이크등을 원하는 지점에 고정시키기 위한 프레임 재료 (예시 : 알루미늄 프로파일, 플라스틱 막대, 양면테이프 등)


2. PC 환경 구축
PC에는 아두이노IDE가 설치되어야 하며 구글에 아두이노ide라고 검색하시면 받을 수 있는 페이지가 바로 나옵니다(https://www.arduino.cc/en/software). 오른쪽에 Windows Win10 and newer, 64bits 를 클릭 후 아래에 just download를 몇 번 눌러주시면 다운로드가 진행됩니다. 다운로드가 끝난 후 실행하여 설치해주시면 아두이노 코드를 아두이노에 올릴 수 있는 IDE환경이 마련됩니다.
절대좌표 입력을 위해 absmouse라는 라이브러리를 추가 설치가 필요하며 absmouse라이브러리는 아두이노 라이브러리 매니저에서 설치가능합니다.
설치된 프로그램에 Tools-Manage Libraries 메뉴를 클릭하시면 왼쪽에 창이 생기는데 검색란에 absmouse라고 치시고 install 버튼을 클릭해주시면 됩니다.
코드의 일부분을 본인 상황에 맞게 수정한 뒤 아두이노를 PC에 usb로 연결해주시고 상단의 Select Board에서 BOARDS는 Leonardo를 선택하시고 PORTS는 아두이노를 연결하면 생기는 포트를 선택해주시면 됩니다.
그리고 좌측 상단에 체크 표시 바로 오른쪽에 있는 우측방향을 가리키는 화살표를 클릭해주시면 컴파일과 함께 작성한 프로그램이 아두이노에 다운로드되며 이후 아두이노를 usb에 연결하면 자동으로 기능이 실행됩니다.


3. 코드 수정
코드를 다운로드 후 GetPointOfImpact2D_ForLeonardo.ino 파일을 더블클릭하시면 자동으로 아두이노 IDE로 실행되며 코드 상단에 아래 항목들만 수정해주시고 화살표를 눌러 다운로드를 해주시면 소프트웨어는 작업 끝입니다.
다중 모니터 환경에서는 기본 모니터를 기준으로 동작됩니다.
동작 전 필수로 변경되어야 하는 조건은 * 표시하였습니다.
mic_width : * 마이크가 놓인 직사각형의 너비 (mm단위)
mic_height : * 마이크가 놓인 직사각형의 높이 (mm단위)
MonitorWidth : * 주 모니터의 가로 해상도 (픽셀 단위)
MonitorHeight : * 주 모니터의 세로 해상도 (픽셀 단위)
Temperature : * 기온('C 단위). 온도 센서를 사용하지 않을 경우 적정한 온도를 작성해줘야 하며 온도센서를 사용하길 강력히 권장. 아래 USING_LM35D_TEMP_SENSOR옵션이 활성화되면 설치된 센서를 통해 실시간으로 온도값 받을 수 있게 설정가능
USING_LM35D_TEMP_SENSOR : * LM35D 온도 센서 사용 여부 설정
DelayForRemoveEcho : 충격음 인식 후 잔향이 사라질때까지 대기하는 시간 (millisecond 단위)
WaitAllInputDelay : 일부 마이크만 충격음을 인식할 경우 인식을 초기화시킬때까지 시간을 계산하기 위한 게인
MouseClickTime : 충격음 인식 시 마우스 클릭 후 뗄때까지 걸리는 시간 (millisecond 단위)
MouseClickTimeRandomAmplitude : 마우스 클릭 후 떼기까지 시간에 더해질 난수 시간 크기 (millisecond 단위)
MouseClickButton : 충격음 인식 시 클릭될 마우스 버튼 설정
TempSensorPin : LM35D 센서 사용시 센서가 연결된 아두이노 핀위치


4. 마이크 설치
마이크는 탄착지점을 감싸는 직사각형 모양으로 설치가 되어야 하며 마이크를 탄착지점 뒷면에 설치해도 잘 동작한다면 뒷면에 설치하는것이 사용자가 내는 소음에 덜 민감해집니다.
마이크는 탄착지점에 반드시 아래 순서로 아두이노에 연결되어야 합니다.
MIC1 - 모니터 좌상단에 부착
MIC2 - 모니터 우상단에 부착
MIC3 - 모니터 좌하단에 부착
MIC4 - 모니터 우하단에 부착


MIC1--------------------------MIC2
|               |
|               |
|      탄착지점     |
|               |
|               |
MIC3--------------------------MIC4

MIC1의 신호선(DO) 연결 위치 : 아두이노 3번핀
MIC2의 신호선(DO) 연결 위치 : 아두이노 2번핀
MIC3의 신호선(DO) 연결 위치 : 아두이노 0번핀
MIC4의 신호선(DO) 연결 위치 : 아두이노 1번핀


아래 설명은 제가 사용한 마이크 기준이며 다른 마이크를 사용하실 분들은 상황에 맞게 작업해주시면 됩니다.
마이크의 +단자에는 5V를 입력해주시면 되고 G단자에는 0V(그라운드)를 연결해주시면 됩니다. AO핀은 사용하지 않습니다.

마이크는 설치 후 마이크에 부착되어 있는 가변저항을 돌려 튜닝해야 하므로 튜닝전에는 탈부착 가능하도록 가볍게 고정하거나 가변저항과 확인용 LED를 외부에 노출시켜야 합니다.
각 마이크는 탄착판에 가까이 붙어있어야 하며 탄착판 평면으로부터 1cm이내의 거리에 있는것이 권장됩니다.
또한 탄착판이 BB탄에 맞을 때 진동이 공기중이 아닌 구조물을 통해 마이크로 들어가지 않아야 하므로 마이크를 직접 탄착판에 붙이는건 추천하지 않으며 프레임과 마이크 사이에 스펀지등의 흡음재가 필요합니다.
마이크가 탄착판의 BB탄이 부딪치는 면에 설치되는게 유리할 수 있으나 2T의 PVC필름을 사용하였을 때 필름 뒤에 설치하여도 충분한 정확도가 나오는것을 확인하였습니다. 다른 두께에 대해선 테스트가 되지 않았습니다. 장전음등의 외부 소음으로 인한 오작동을 줄이기 위해 마이크를 탄착판 뒤에 설치하고 밀봉하면 하는걸 권장합니다.

마이크 수음부가 바라보는 방향별 성능 또한 평가되지 않았으며 제 평가 조건은 각 마이크를 탄착판 중앙을 바라보도록 설치하였습니다.

5. 마이크 튜닝 (SZH-EK033 마이크 기준)
마이크 설치가 끝난 뒤에 마이크에 전원을 입력하면 마이크에 불이 들어오는데 상시로 켜지는 led를 제외한 다른 led가 조용한 상황에서는 켜지고 충격음에 짧게 꺼졌다 켜지도록 최대한 가변저항(파란색)을 정밀하게 조절해주시면 됩니다.
이때 짧게 꺼졌다 켜지는것은 눈깜짝할 사이정도로 짧아야 하며 꺼진 후 0.5초 이상 유지 후 켜지거나 반응이 느리면 마이크에 문제가 있는 상태이므로 교체해야합니다.
마이크 세팅을 조용한 상황에서는 led가 꺼지고 충격음이 들어온 시점에 led가 켜지도록 구성해도 비슷하게 잘 동작하는것을 확인했습니다. 이 편이 가시성이 좋으니 이렇게 하시는것도 괜찮습니다.
모든 마이크를 세팅한 후 충격음을 발생시켰을 때 아두이노의 LED가 반응하는지 확인하여 잘 동작하는지 확인할 수 있습니다. 모든 마이크가 적절하게 조절되어 충격음에만 반응하게 됐다면 충격음에 맞춰 아두이노 보드에서 led가 반짝이는것을 볼 수 있습니다. 이는 모든 마이크 신호를 인식하여 PC로 신호를 보내고 있다는 의미입니다.
주의하실 점으로 SZH-EK033마이크에 가변저항은 끝없이 돌아가므로 잘못된 방향이다 싶으면 반대방향으로 돌려야합니다. 다만 제대로 된 방향으로 돌리고 있어도 원하는 상태가 될때까지 상당히 많이 돌려야 해서 좀 피곤합니다..

About

아두이노 레오파드와 비교기가 달린 마이크를 이용하여 평면의 충격지점을 찾아 터치 스크린과 같은 효과를 구현(Using Arduino Leopard and microphone with comparator, find the impact point on the plane and achieve touchscreen-like effects)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages