검색하다가 찾은 이런 저런 자료

in #krlast month

https://www.newsworks.co.kr/news/articleView.html?idxno=556530

차량설치용 '저격수탐지장비'(SODA :Sniper Observation & Detection Apparatus)는 2010년 12월부터 2014년 3월까지 약 23억원을 투입해 국방과학연구소 민군겸용과제로 개발됐다.

차량에 설치되어 저격수를 탐지할수 있는 장비라고 하네요

미군이 쓰는건 들어봤는데 우리나라도 이런걸 도입해왔군요

저걸 보다가 문득....

소리로 찾는거라면...

저런거로 메미찾기나 모기찾기는 못하나?

이런 생각이 들었는데요

AI에게 물어봤죠


정말 흥미로운 프로젝트입니다!
“저격수탐지장비(SODA)”처럼 두 개의 마이크 모듈로 소리의 시간차(Time Difference of Arrival, TDOA)를 측정해 음원의 방향을 추정하고,
모기의 날갯짓 소리(주파수 400~700Hz)를 감지하는 모기 탐지기를 아두이노로 구현할 수 있습니다.


아두이노 듀얼 마이크 기반 모기 방향 탐지기

1. 준비물

  • 아두이노(UNO, Nano 등)
  • 아날로그 마이크 모듈 2개 (예: MAX9814, KY-037 등)
  • 10kΩ 저항 2개 (마이크 bias용)
  • 점퍼선

2. 기본 원리

  1. 두 마이크를 일정 거리(예: 10cm)로 평행하게 배치
  2. 마이크 A, B에서 동시에 소리를 샘플링
  3. 모기 소리(특정 주파수 대역) 감지
  4. 두 마이크 신호의 도달 시간 차이(TDOA) 측정 → 방향 추정
    • A가 먼저 감지하면 소리가 A쪽에서 옴
    • B가 먼저 감지하면 소리가 B쪽에서 옴
    • 거의 동시에 감지되면 정면

3. 회로 연결

  • 마이크 A: VCC, GND, OUT → 아두이노 A0
  • 마이크 B: VCC, GND, OUT → 아두이노 A1

4. 소스 코드 예시

아래 코드는 간단한 방향 탐지모기 소리 주파수 대역 필터링(FFT 대체, 단순화)을 구현합니다.

#define MIC_A A0
#define MIC_B A1

const int threshold = 50; // 소리 감지 임계값 (조정 필요)
const int sampleWindow = 50; // 샘플링 윈도우(ms)
const unsigned long micDistance = 10; // 마이크 간 거리(cm)
const float soundSpeed = 34300.0; // 소리 속도 (cm/s)

void setup() {
  Serial.begin(115200);
}

void loop() {
  unsigned long startMillis = millis();
  int peakA = 0, peakB = 0;
  unsigned long timeA = 0, timeB = 0;
  bool detectedA = false, detectedB = false;

  // 샘플링 윈도우 동안 두 마이크 신호를 읽음
  while (millis() - startMillis  threshold) {
      detectedA = true;
      timeA = micros();
      peakA = valA;
    }
    if (!detectedB && valB > threshold) {
      detectedB = true;
      timeB = micros();
      peakB = valB;
    }
  }

  // 둘 다 감지했다면 방향 계산
  if (detectedA && detectedB) {
    long deltaT = (long)timeA - (long)timeB; // us 단위
    float deltaT_sec = abs(deltaT) / 1000000.0; // s 단위

    // 거리 추정 (간단화, 실제로는 방향만 사용)
    float distance = deltaT_sec * soundSpeed / 2.0; // cm

    // 방향 출력
    if (abs(deltaT)  0) {
      Serial.println("A쪽(왼쪽)에서 소리 발생!");
    } else {
      Serial.println("B쪽(오른쪽)에서 소리 발생!");
    }
    Serial.print("시간차(us): "); Serial.println(deltaT);
    Serial.print("거리 추정(cm): "); Serial.println(distance);
  }

  delay(100); // 다음 측정까지 대기
}

5. 모기 소리 필터링 (고급)

  • 위 코드는 단순히 소리의 임계값만 감지합니다.
  • 모기 소리(400~700Hz)만 탐지하려면,
    • ArduinoFFT 라이브러리로 주파수 분석을 추가할 수 있습니다.
    • FFT로 400~700Hz 대역에 에너지가 집중될 때만 방향 계산을 실행하면 됩니다.

6. 한계와 팁

  • 정확한 거리 추정은 어렵고, 방향 추정이 주 목적입니다.
  • 마이크 간 거리가 너무 가까우면 시간차가 작아 정확도↓, 너무 멀면 음량 차이↑
  • 실내 잡음, 반향 등 환경 영향이 큼
  • 정확한 시간차 측정은 고속 샘플링(ADC, 인터럽트 등)과 신호 전처리 필요

7. 결론

  • 위 코드는 간단한 방향 탐지거리 추정(참고용)을 구현합니다.
  • 정확한 모기 소리 필터링을 원하면 FFT 라이브러리로 주파수 분석을 추가하세요.
  • 실험적으로 마이크 간 거리, 임계값, 샘플링 윈도우를 조정하며 테스트해 보세요!

그런데 방향은 알수 있지만 거리까지는 모른다고 해서...

더 물어봤죠


마이크의 개수를 늘리거나, 마이크 간 거리를 늘리면 방향 추정의 정확도는 높아질 수 있지만, 음원(모기)의 "거리"를 직접적으로 정확하게 측정하는 것은 여전히 어렵습니다.
그 이유와 대안을 아래에 정리합니다.


1. 마이크 개수/간격 증가의 효과

  • 방향 추정(각도, 방위각) 정확도 향상
    마이크가 2개일 때는 1차원(좌/우) 방향만 알 수 있지만,
    3개 이상 삼각형 형태로 배치하면 2차원(평면상 각도) 추정이 가능합니다.
  • 마이크 간 거리를 늘리면
    동일한 시간차(Δt)에서 더 큰 각도 변화를 감지할 수 있어 방향 추정이 더 정밀해집니다.

2. "거리" 추정의 한계

  • 음원의 "거리"를 직접 측정하려면
    소리의 "절대 도달 시간" 또는 "음압(크기)"을 이용해야 합니다.
  • 두 마이크로는 시간차(TDOA)만 알 수 있고,
    이 값은 방향(각도)만 알려줍니다.
    (예: 소리가 왼쪽에서 왔는지, 오른쪽에서 왔는지)
  • 음압(소리 크기)로 거리를 추정하려면
    소리의 원래 크기를 정확히 알아야 하고,
    실내 반사, 감쇠 등 환경 변수 때문에 신뢰도가 매우 낮습니다.

3. 거리 측정이 필요한 경우 필요한 것

  • 초음파 거리 센서(초음파 송신/수신)나
  • 적외선/레이저 거리 센서
  • 또는 마이크 3개 이상을 삼각측량(TDOA 기반)으로 배치하고,
    매우 정밀한 시간 동기화 및 고속 샘플링(수십 kHz 이상)이 필요합니다[2].

4. 실제 상용 모기 탐지기 사례

  • 실제 상용 모기 탐지기(Bzigo 등)는
    적외선 카메라AI 비전을 활용해 모기의 위치(방향+거리)를 추적합니다[1].
  • 소리 기반 방식은 주로 방향만 빠르게 파악하고,
    거리는 카메라/레이저/초음파 등 다른 센서로 보완합니다.

5. 결론

  • 마이크 2개로는 방향(각도)만 신뢰성 있게 추정할 수 있습니다.
  • 마이크 3개 이상, 또는 다른 거리 센서(초음파, 적외선 등)와의 융합이 필요합니다.
  • 정확한 거리 측정을 원한다면,
    소리만으로는 한계가 있으니
    비전(카메라) 또는 초음파/레이저 거리 측정 센서를 병행하는 것이 현실적입니다[1][2].

요약

  • 마이크 개수/간격 증가 → 방향 추정은 정밀해짐
  • 거리 측정은 별도의 센서(초음파, 카메라 등) 필요
  • 소리만으로 거리 측정은 환경 변수 때문에 신뢰도 낮음

우선 마이크 개수와 간격을 늘리면

도움이 되지만....

거리 측정은 보통 다른 센서를 쓴다고 하는군요

그래서 다른 방법이 없나 물어보니 삼각측량을

알려주네요


삼각 측량(triangulation) 방식으로 소리(예: 모기)까지의 거리를 구하려면 다음과 같은 조건과 장비, 신호처리 과정이 필요합니다:


1. 필수 하드웨어 구성

  • 3개 이상의 마이크
    두 개로는 방향(각도)만 알 수 있고, 세 개 이상 삼각형 형태로 배치해야 2차원 평면상 위치(거리 포함)를 산출할 수 있습니다[6][2][3].
  • 마이크 간 정확한 거리(기준선 길이) 측정
    마이크 간의 물리적 거리를 정확히 알아야 삼각 측량이 가능합니다[3][4].
  • 고속 ADC(아날로그-디지털 변환기)
    마이크 신호의 시간차(수십~수백 마이크로초 단위)를 정확히 측정하려면 고속 샘플링이 필요합니다.

2. 신호 처리 및 삼각 측량 원리

  • TDOA(Time Difference of Arrival, 도달 시간차) 측정
    소리가 각 마이크에 도달하는 시간차를 측정합니다.
    예: 모기 소리가 마이크1, 마이크2, 마이크3에 각각 도달한 시간 기록[6].

  • 삼각 측량 공식 적용
    마이크의 위치와 각 마이크에 소리가 도달한 시간차, 그리고 소리의 속도(약 343 m/s)를 이용해
    음원(모기)의 2D 위치(좌표)를 계산할 수 있습니다[3][6].

    예시 공식(두 마이크 기준):
    $$
    d = \ell \cdot \frac{\sin \alpha \sin \beta}{\sin(\alpha + \beta)}
    $$
    여기서

    • $$ \ell $$: 마이크 간 거리
    • $$ \alpha, \beta $$: 각 마이크에서 측정한 음원 방향 각도
    • $$ d $$: 음원까지의 거리[3]

    TDOA 방식에서는,

    • 시간차 $$ \Delta t $$ = (거리차) / (소리속도)
    • 여러 마이크의 시간차를 조합해 삼각형의 교점(음원 위치)을 산출

3. 정확한 거리 산출을 위한 추가 조건

  • 정확한 시간 동기화
    모든 마이크의 시간 기준이 일치해야 미세한 시간차를 신뢰할 수 있습니다.
  • 노이즈 필터링
    실내 반향, 주변 소음 등 환경 요인을 제거해야 합니다.
  • 신호의 주파수 대역 필터링
    모기 소리(400~700Hz 등)만 골라내는 전처리(FFT 등)가 필요합니다.

4. 실제 구현 예시

  • UWB(초광대역) 위치추적 시스템
    UWB 송수신기 3개 이상, TDOA 방식으로 2D/3D 위치 산출[6].
  • 음향 삼각측량
    마이크 3개 이상, 도달 시간차 측정, 삼각 측량 공식 적용[1][2][6].

5. 정리: 삼각 측량 거리 측정을 위해 필요한 것

  • 3개 이상의 마이크(삼각형 형태로 배치)
  • 마이크 간 정확한 거리 측정
  • 고속/동기화된 샘플링(시간차 측정)
  • 소리의 속도(온도에 따라 약간 변함)
  • 신호처리(필터링, FFT 등)
  • 삼각 측량 공식 혹은 TDOA 알고리즘 적용

참고:

  • 마이크 2개로는 방향(각도)만,
  • 마이크 3개+삼각측량 알고리즘+고속샘플링이 있어야 2D 위치(거리 포함)가 가능합니다[3][6].
  • 실내 환경에서는 반향, 노이즈 등으로 인해 정확도에 한계가 있습니다.

ESP32-S3는 상당히 빠른 ADC(아날로그-디지털 변환기) 샘플링 성능을 제공합니다.
삼각측량 기반의 소리 위치 추정(예: 모기 탐지)에서 필요한 고속 샘플링이 가능한지 아래와 같이 정리할 수 있습니다.


ESP32-S3의 ADC 샘플링 속도

  • 최대 샘플링 속도(이론):
    • 공식 문서 기준, 최대 83,333Hz(83kHz)[3][4]
    • 실사용 환경에서는 1채널 기준 100kHz(100,000 samples/sec) 내외[5]
    • 일부 포럼/실험에서는 I2S 연동, DMA 사용 시 2MHz(2,000,000 samples/sec)까지 가능하다고 보고됨[6][8]
  • 여러 채널 동시 샘플링 시:
    • 총 샘플링 속도를 채널 수로 나눔
    • 예: 2채널이면 각 채널당 83,333/2 ≈ 41,666Hz

삼각측량(음원 위치 추정)에서 요구되는 샘플링 속도

  • 음파(소리)의 시간차 측정(TDOA) 정확도가 핵심
  • 예를 들어, 마이크 간 거리 10cm, 소리 속도 343m/s → 도달 시간차 약 292μs
  • 샘플링 속도가 높을수록(수만~수십만 Hz) 시간차를 더 미세하게 측정 가능
    (예: 100kHz 샘플링이면 1샘플=10μs 해상도)

결론: ESP32-S3로 고속 샘플링 가능한가?

  • 예, ESP32-S3는 삼각측량용 소리 시간차 측정에 충분한 고속 샘플링이 가능합니다.
  • 2채널 기준 각 채널당 40kHz 이상의 샘플링이 가능하므로,
    일반적인 오디오 신호(모기 날개 소리 등) 및 위치 추정용으로 충분히 쓸 수 있습니다[3][4][5].
  • 더 빠른 샘플링(수백 kHz~MHz)이 필요하다면 I2S+DMA 연동을 고려해야 합니다[6][8].

참고

  • 정확한 시간차 측정을 위해서는
    • ADC 샘플링 속도 최대한 높이기
    • 마이크 신호 전처리(노이즈 필터링, 동기화)
    • 여러 채널의 ADC 읽기를 최대한 빠르게 구현
    • I2S/DMA 등 고속 데이터 취득 방법 사용
  • WiFi 사용 시 ADC2는 불안정하므로 ADC1 채널만 사용하는 것이 좋습니다[2].


아두이노보다는 좀더 고성능인 기기를 필요로한다고 하는군요

하여간.... 여기부터는 좀더 심오한 기술의 세계같네요

마이크를 이용해서 여러개를 붙이고 좀더 간격도 좀더 주면

모기 탐지기 혹은 메미 탐지기 같은거도 가능하다는 이야기네요

뭐..... 음향은 빔 포밍기술이란것도 있어서 특정 위치에만

소리가 중첩되게 하는 기능도 있다고 하던데....

(음향무기로 쓴다고 하기도 하더라구요)

하여간....

아직 모기 퇴치기는 ..... 저런 방식은 아직 없네요

Sort:  
Loading...