초음파 센서의 개요
초음파 센서는 초음파를 사용하여 물체와의 거리를 측정하는 장치입니다. 임베디드 시스템에서는 초음파 센서를 사용하여 로봇의 장애물 감지, 거리 측정, 자동화 시스템 등 다양한 응용 프로그램에서 활용됩니다. 오늘은 초음파 센서를 사용하는 방법을 학습하겠습니다.
1. 초음파 센서의 기본 개념
초음파 센서는 초음파 펄스를 방출하고, 반사된 초음파가 돌아오는 시간을 측정하여 거리를 계산합니다. 가장 많이 사용되는 초음파 센서는 HC-SR04입니다.
HC-SR04 초음파 센서
- Trig 핀: 초음파 펄스를 방출하는 트리거 신호를 입력받는 핀
- Echo 핀: 반사된 초음파의 시간을 출력하는 핀
- VCC: 5V 전원
- GND: 접지
거리 계산 공식
거리 = (초음파가 이동한 시간 x 음속) / 2
2. 하드웨어 연결
- HC-SR04 연결:
- VCC: 5V
- GND: GND
- Trig: 디지털 핀 (예: 9번 핀)
- Echo: 디지털 핀 (예: 10번 핀)
3. 초음파 센서 사용 예제
다음 예제는 HC-SR04 초음파 센서를 사용하여 거리를 측정하고, 시리얼 모니터에 출력하는 방법을 보여줍니다.
const int trigPin = 9; // Trig 핀
const int echoPin = 10; // Echo 핀
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration;
int distance;
// 초음파 펄스 방출
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Echo 핀에서 반사된 초음파 시간 측정
duration = pulseIn(echoPin, HIGH);
// 거리 계산 (cm 단위)
distance = duration * 0.034 / 2;
// 거리 출력
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500); // 0.5초 대기
}
위 코드에서는 digitalWrite
와 delayMicroseconds
함수를 사용하여 트리거 신호를 생성하고, pulseIn
함수를 사용하여 Echo 핀에서 반사된 초음파의 시간을 측정합니다. 측정된 시간을 통해 거리를 계산하고, 시리얼 모니터에 출력합니다.
4. 초음파 센서를 활용한 프로젝트
초음파 센서를 활용하여 간단한 장애물 감지 시스템을 구현할 수 있습니다. 예를 들어, 특정 거리 이내에 물체가 감지되면 LED를 켜는 시스템을 만들어보겠습니다.
하드웨어 연결
- LED 연결:
- LED의 + 단자: 디지털 핀 (예: 13번 핀)
- LED의 - 단자: GND
예제: 장애물 감지 시스템
다음 예제는 HC-SR04 초음파 센서를 사용하여 일정 거리 이내에 장애물이 감지되면 LED를 켜는 방법을 보여줍니다.
const int trigPin = 9; // Trig 핀
const int echoPin = 10; // Echo 핀
const int ledPin = 13; // LED 핀
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
long duration;
int distance;
// 초음파 펄스 방출
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Echo 핀에서 반사된 초음파 시간 측정
duration = pulseIn(echoPin, HIGH);
// 거리 계산 (cm 단위)
distance = duration * 0.034 / 2;
// 거리 출력
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 장애물 감지 시 LED 켜기
if (distance < 20) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(500); // 0.5초 대기
}
위 코드에서는 초음파 센서를 사용하여 거리를 측정하고, 측정된 거리가 20cm 이내일 때 LED를 켭니다. 거리가 20cm 이상이면 LED를 끕니다.
마무리
오늘은 초음파 센서를 사용하여 거리를 측정하고, 이를 활용한 장애물 감지 시스템을 구현하는 방법을 학습했습니다. 초음파 센서를 통해 물체와의 거리를 측정하고, 특정 조건에서 동작하는 간단한 시스템을 구현할 수 있었습니다. 다음 날에는 직렬 통신(UART)에 대해 더 깊이 알아보겠습니다.
질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요.
Day 15 예고
다음 날은 "직렬 통신 (UART)"에 대해 다룰 것입니다. UART를 사용하여 데이터 송수신 방법을 학습하고, 실습 예제를 통해 이해를 돕겠습니다.
'-----ETC----- > C++ 임베디드 시스템 프로그래밍 시리즈' 카테고리의 다른 글
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 18: CAN 통신 (0) | 2024.08.01 |
---|---|
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 16: I2C 통신 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 15: 직렬 통신 (UART) (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 12: 모터 제어 (PWM) (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 13: 서보 모터 제어 (0) | 2024.08.01 |