9주차_참고 : 실습1 코드설명 - dhryu60/SmartDevice_2025-1 GitHub Wiki


📜 코드 전체 설명


🔹 상수 및 변수 선언

const int trigPin = 12;  // 초음파 센서의 트리거 핀
const int echoPin = 14;  // 초음파 센서의 에코 핀
  • trigPin은 초음파를 발사하는 신호를 보내는 핀입니다. (D12)
  • echoPin반사되어 돌아온 초음파를 수신하는 핀입니다. (D14)
long duration;          // 초음파가 물체에 반사되어 돌아오는 데 걸린 시간 (단위: 마이크로초)
float distanceCm;       // 측정된 거리 (단위: 센티미터)
float distanceInch;     // 측정된 거리 (단위: 인치)
  • 초음파의 이동 시간을 저장하고, 그 시간을 거리로 환산할 변수들을 선언합니다.

🔹 setup() 함수

void setup() {
  Serial.begin(115200); // 시리얼 통신 시작 (컴퓨터와 ESP32 간의 통신속도 설정)
  pinMode(trigPin, OUTPUT);  // 트리거 핀을 출력 모드로 설정
  pinMode(echoPin, INPUT);   // 에코 핀을 입력 모드로 설정
}
  • Serial.begin(115200): PC와 ESP32가 데이터를 주고받기 위해 115200bps 속도로 시리얼 통신을 시작합니다.
  • pinMode(trigPin, OUTPUT): 트리거 핀은 신호를 보내는 역할이기 때문에 OUTPUT으로 설정합니다.
  • pinMode(echoPin, INPUT): 에코 핀은 신호를 받는 역할이기 때문에 INPUT으로 설정합니다.

🔹 loop() 함수 (반복 실행)

digitalWrite(trigPin, LOW);           // 먼저 트리거 핀을 LOW로 초기화
delayMicroseconds(2);                 // 2마이크로초 동안 대기
  • 초음파를 정확하게 발사하기 위해, 초기 상태를 LOW로 만들어 잠시 대기합니다.
digitalWrite(trigPin, HIGH);          // 트리거 핀을 HIGH로 설정하여 초음파 발사
delayMicroseconds(10);                // HIGH 상태를 10마이크로초 동안 유지
digitalWrite(trigPin, LOW);           // 초음파 발사를 마치고 다시 LOW로 설정
  • 트리거 핀을 HIGH로 짧게(10μs) 주는 순간 초음파가 센서에서 발사됩니다.
  • 이 초음파는 물체에 닿은 후 반사되어 돌아옵니다.
duration = pulseIn(echoPin, HIGH);     // echo 핀에서 HIGH 신호가 유지되는 시간 측정
  • pulseIn() 함수는 HIGH 신호가 유지된 시간(마이크로초) 을 측정합니다.
  • 이 시간은 초음파가 왕복하는 데 걸린 시간입니다.
distanceCm = duration * 0.034/2; 
  • 초음파의 속도는 약 340m/s, 즉 0.034cm/μs입니다.
  • 왕복 거리를 측정했기 때문에, 2로 나누어 실제 물체까지의 거리(cm)를 구합니다.

거리(cm) = (왕복 시간 × 음속(cm/μs)) ÷ 2

distanceInch = distanceCm * 0.393701; 
  • 1cm = 0.393701인치 이므로, cm를 inch로 변환합니다.

🔹 측정 결과 출력

Serial.print("Distance: ");
Serial.print(distanceCm);
Serial.print("(cm)  ");
Serial.print(distanceInch);
Serial.println("(inch)");
  • 거리 측정 결과를 시리얼 모니터에 출력합니다.
  • 예를 들어:
    Distance: 25.67(cm)  10.10(inch)
    

🔹 다음 측정까지 1초 대기

delay(1000);
  • 1초(1000밀리초) 동안 기다린 다음, 다시 측정을 반복합니다.

📈 전체 흐름 요약

  1. 트리거 핀으로 초음파 발사
  2. 에코 핀으로 반사된 초음파 수신
  3. 반사 시간(duration)을 측정
  4. **거리(cm, inch)**로 변환
  5. 결과를 시리얼 모니터에 출력
  6. 1초 간격으로 반복

📌 초음파 거리 측정 공식 정리

[ \text{거리(cm)} = \frac{\text{Duration(μs)} \times 0.034}{2} ]

[ \text{거리(inch)} = \text{거리(cm)} \times 0.393701 ]


✨ 추가 Tip

  • delayMicroseconds()는 매우 짧은 시간(μs 단위) 대기할 때 사용합니다.
  • pulseIn() 함수는 HIGH 또는 LOW 동안의 시간을 측정할 수 있습니다.
  • 초음파 거리 측정은 주변 온도습도에 따라 약간 오차가 발생할 수 있습니다.