[아두이노기초-4] 초음파 센서로 거리 측정하기
◆ 이번 시간에는 초음파 센서를 이용하여 거리를 구하는 방법을 알아보자
◆ 실생활 사용 예 : 거리측정기, 자동차 전/후방센서
<초음파센서 원리>
- 초음파 발신부에서 초음파를 쏴서 물체에 반사되어 돌아오는 시간을 측정하면 거리=속도X시간으로 거리측정이 가능
- 초음파는 사방으로 퍼지는 특성 때문에 거리가 멀어지면 반사되어 되돌아 오는 초음파의 양도 급속히 적어지게 됨
- 굴곡진 지형이거나 중간에 물체가 있을 경우는 정면에 보이는 물체외의 직진 거리가 아니고 중간에서 반사되어 오는 거리를 측정하게 되어 부정확한 거리측정이 된다. (정밀한 거리 측정을 위해서는 레이저처럼 직진성 빛을 사용하는 거리측정 방식 필요)
- 왕복이므로 거리 = (시간 X 속도) ÷ 2를 해줘야 한다.
<회로도>
- VCC : (+)극 5V 전원 연결
- Trig : 입력단자. 2번핀(D2)에 연결
- Echo : 출력단자. 3번핀(D3)에 연결
- GND : (-)극 GND에 연결
<소스코드>
int trig = 2;
int echo = 3;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // 시리얼포트 통신속도 9600 설정
pinMode(trig, OUTPUT); // trigger(발신부)를 출력모드로 설정
pinMode(echo, INPUT); // echo(수신부)를 입력모드로 설정
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trig, HIGH); // trig핀(2)에 1입력
delayMicroseconds(10); // 10us 대기
digitalWrite(trig, LOW); // trig핀(2)에 0입력
int distance = pulseIn(echo, HIGH)*340 / 2 / 10000;
// 거리=시간X속도/2(왕복이므로)
Serial.print(distance); // 거리 출력
Serial.println("cm"); // "cm" 출력
delay(100); // 100ms=0.1s 지연
}
◆ 코드 설명
Serial.begin(9600) : 시리얼 통신의 통신속도는 300~115200으로 설정가능하지만, 보통 9600으로 설정함
pinMode(trig, OUTPUT) : 보드에서 사용할 디지털핀의 모드(입력, 출력) 설정.
2번 핀을 출력을 위한 모드로 설정 (trigger, 초음파 발신부)
pinMode(echo, INPUT) : 보드에서 사용할 디지털핀의 모드(입력, 출력) 설정.
3번 핀을 입력을 위한 모드로 설정 (echo, 초음파 수신부)
digitalWrite(trig, HIGH) : trig(2) 핀에 HIGH(1, ON)값을 부여 (10ms간 초음파 발신 ON)
delayMicroseconds(10) : 10ms 대기
digitalWrite(trig, LOW) : trig(2) 핀에 LOW(0, OFF)값을 부여 (초음파 발신 OFF)
pulseIn(echo, HIGH) : 설정신호(echo)인 수신부가 다시 입력받을때까지 걸리는 시간을 측정
반환값 - 설정 신호가입력될때까지의 시간을 반환, 신호 없으면 0 반환
[단위 : us(마이크로초)]
거리 = 시간 X 속도 ÷ 2
= (pulseIn(echo,HIGH) X 340) ÷ 2
※ cm = 1[us] X [m/s] / 10000이므로 10000을 나눠줘야 한다.
Serial.print(distance) : 변수 distance 값을 출력, 한 줄 띄어쓰기 하지 않음
Serial.println("cm") : 문자열 cm 값을 출력, 한 줄 띄어쓰기 함
delay(100) : 100ms = 0.1초 후 다음 loop를 실행
'IT > 아두이노' 카테고리의 다른 글
[아두이노] 키보드 라이브러리 사용하기 (0) | 2022.01.08 |
---|---|
[아두이노] 라이브러리 추가하기 (1) | 2022.01.08 |
[아두이노기초-3] 적외선 센서로 움직임 감지하기 (0) | 2021.12.26 |
[아두이노기초-2] 문자열 / 정수 출력, LED 제어하기 (0) | 2021.12.26 |
[아두이노기초-1] 시작 전 필수로 알아야 할 사항 (0) | 2021.12.25 |