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밀리초) 동안 기다린 다음, 다시 측정을 반복합니다.
📈 전체 흐름 요약
- 트리거 핀으로 초음파 발사
- 에코 핀으로 반사된 초음파 수신
- 반사 시간(duration)을 측정
- **거리(cm, inch)**로 변환
- 결과를 시리얼 모니터에 출력
- 1초 간격으로 반복
📌 초음파 거리 측정 공식 정리
[ \text{거리(cm)} = \frac{\text{Duration(μs)} \times 0.034}{2} ]
[ \text{거리(inch)} = \text{거리(cm)} \times 0.393701 ]
✨ 추가 Tip
delayMicroseconds()
는 매우 짧은 시간(μs 단위) 대기할 때 사용합니다.pulseIn()
함수는 HIGH 또는 LOW 동안의 시간을 측정할 수 있습니다.- 초음파 거리 측정은 주변 온도나 습도에 따라 약간 오차가 발생할 수 있습니다.