초음파 센서, 정말 정확할까? JSN-SR04T 아두이노 실측 데이터

⚠️ 실험 안내 (Safety Notice)

이 글에는 리튬이온 셀·배터리팩·전자부품을 활용한 실험 과정이 포함되어 있습니다. 이 기록은 Sensloop Lab의 통제된 환경에서 수행된 내용입니다.

안전한 실험을 위해 다음을 권장드립니다:

  • 절연 장비와 보호장구(장갑·보안경 등)를 착용하세요.
  • 작업 전 전압 확인과 절연 처리를 진행하세요.
  • 고전압 배터리팩 실험은 숙련자가 진행하는 것이 안전합니다.

연구원 여러분, 안녕하세요.
이번 실험에서는 JSN-SR04T 초음파 센서가 실제로 어느 정도의 거리 정확도를 보이는지 직접 측정해보았습니다.

JSN-SR04T는 방수형 초음파 센서로, 일반적인 HC-SR04보다 내구성과 측정 안정성이 높다고 알려져 있습니다.
하지만 실험 환경이나 반사체 조건에 따라 오차가 생긴다는 이야기도 많죠.

그래서 Sensloop Lab에서는 실제로 아두이노 메가(Mega 2560) 보드에 연결하고,
20cm부터 50cm까지 구간별로 직접 실측 데이터를 수집했습니다.


⚙️ 실험 구성

이번 실험은 Arduino Mega 2560JSN-SR04T 방수형 초음파 센서를 사용했습니다.
메가 보드는 다수의 디지털 핀을 제공해 안정적으로 센서를 제어할 수 있고,
JSN-SR04T는 HC-SR04보다 긴 감지 거리와 방수 설계를 갖추어
실내·실외 환경에서 모두 활용이 가능한 모듈입니다.

구분내용
사용 보드Arduino Mega 2560
센서 모듈JSN-SR04T (Waterproof Ultrasonic Sensor)
측정 구간20cm / 25cm / 30cm / 40cm / 50cm
반복 횟수구간별 10회 측정
출력 단위cm
테스트 환경실내, 평면 흰색 반사체, 직선 거리 기준

🔌 회로 연결

JSN-SR04T 모듈 핀을 아두이노 보드와 점퍼선으로 연결한 모습

초음파 센서 쪽은 왼쪽의 텍스트 방향으로 핀을 연결하였습니다.

  • GND : 검정
  • Echo : 흰색
  • Trig : 회색
  • VCC : 보라색

아두이노 메가 쪽도 동일하게 연결해야겠죠 ?

  • GND : 검정
  • D6 : 흰색
  • D7 : 회색
  • VCC : 보라색

💻 실험 코드

아래 코드는 JSN-SR04T의 펄스 기반 거리 측정 알고리즘을 사용했습니다.
TRIG 핀으로 10 µs 펄스를 송출하면, 센서가 반사음을 수신하고
ECHO 핀에 펄스 폭(duration)으로 시간을 반환합니다.
이 시간을 음속(약 343 m/s)으로 환산하면 거리(cm)가 계산됩니다.

#define TRIG_PIN 7
#define ECHO_PIN 6

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  Serial.println("=== JSN-SR04T Distance Test ===");
  Serial.println("측정을 시작합니다. (총 10회)");
}

float getDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  unsigned long duration = pulseIn(ECHO_PIN, HIGH, 38000UL);
  float distance = duration * 0.0343 / 2.0;
  return distance;
}

void loop() {
  for (int i = 1; i <= 10; i++) {
    float d = getDistance();
    Serial.print("측정 #");
    Serial.print(i);
    Serial.print(": ");
    Serial.print(d);
    Serial.println(" cm");
    delay(500);
  }
  Serial.println("=== 측정 완료 ===");
  while (1);
}

그대로 아두이노 IDE에 붙여넣기 하면 측정준비가 끝나겠죠 ?


📏 실험 환경 세팅

센서 전면을 평평한 흰색 박스에 정확히 수직으로 맞추고,
줄자를 이용해 반사면과의 거리를 일정하게 유지했습니다.
측정 간 간섭을 줄이기 위해 각 구간마다 센서를 완전히 정지한 상태로 데이터를 취득했습니다.


📊 측정 결과 요약

목표 거리평균 측정값편차(오차)
20cm20.1cm+0.1cm
25cm24.8cm-0.2cm
30cm28.9cm-1.1cm
40cm38.7cm-1.3cm
50cm48.7cm-1.3cm

20~25cm의 경우 오차는 거의 없었으며

이후 거리가 증가하니 약 1cm의 오차가 발생하였습니다.


🔍 분석

실측 결과를 보면,
20~25cm 구간에서는 거의 ±0.2cm 이내의 정확도를 보였으며,
30cm 이상부터는 약 -1cm 내외의 음의 오차가 꾸준히 발생했습니다.

실험 결과는 이론 거리 대비 약 −1 cm 수준의 오차를 보였지만,
간단한 보정값을 적용하면 전 구간이 ±1% 이내로 수렴했습니다.

아래와 같이 코드 내 거리 계산식에 +1.0 cm 오프셋 보정을 추가하면 됩니다.

float distance = duration * 0.0343 / 2.0 + 1.0; // +1 cm 보정

또는 온도 센서를 병행해 환경별로 자동 보정할 수도 있습니다.

float tempC = 23.0;  
float soundSpeed = 331.0 + 0.6 * tempC;  
float distance = duration * (soundSpeed / 10000.0) / 2.0;


🧠 연구원 코멘트

JSN-SR04T는 일반적인 실내 환경에서는 충분히 신뢰 가능한 거리 센서입니다.
다만 30cm 이상에서는 소폭의 오차가 누적되므로,
보정값을 추가하여 근접 감지·거리 경보용으로 사용하는 것이 적절합니다.

다음 실험에서는 이 데이터를 기반으로
3색 LED 신호등 모듈을 연동하여
거리 구간별 시각적 표시 실험을 진행할 예정입니다.


이런글도 있어요 !

초음파센서 포스팅. 다음글도 보고싶다면 ?

아두이노가 처음이라면 ?

댓글 남기기