본문 바로가기

Hardware/Arduino and Friends

[아두이노 연재] 초음파 센서 사용해보기

지금 우리는 ~^^ 아두이노 연재 중 세 번째 글인 초음파 센서 다뤄보기 글을 보고 계십니다. 초음파 센서는 아두이노로 로봇을 만들때 가장 많이 사용하는 센서 중 하나입니다. 거리 측정용이면서 장애물 측정용이기도 하구요^^ 아무튼 꽤 쉽게 결과를 얻을 수 있지요^^

오늘의 준비물은 아두이노 보드와 초음파센서와 그리고 케이블입니다.^^

초음파 센서는 저렇게 생겼습니다. 알파펫 T가 보이시나요. 저기로 초음파를 쏘죠~ 그리고 알파벳 R이 보이시나요? R이 있는 쪽에서 반사된 초음파를 받습니다. 내가 쏘고~~~ 받고... ^^ 그리고 그 시간의 간격을 측정해서 거리를 알 수 있는 거죠...

초음파 센서는 이렇게 연결합니다. VCC에는 5V를 GND는 GND에~, 그리고 Trig 핀과 Echo 핀을 적절히 연결합니다. 여기서는 각각 13번과 12번에 연결했습니다. 주의할 것은 13번 핀인 Trig는 초음파를 쏘기 때문에 output으로, Echo인 12번핀은 input으로 pinMode를 설정해 주어야 합니다.

연결하면 저런 모습입니다. 응? 초음파만 달았는데, 그냥~ 월E 느낌이 확 나는군요^^ 이제 코드를 볼까요~^^

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#define trigPin 13 
#define echoPin 12

void setup() {
    // put your setup code here, to run once:
	Serial.begin (115200);
	pinMode(trigPin, OUTPUT);
	pinMode(echoPin, INPUT);
}

void loop() {
    // put your main code here, to run repeatedly:
	long duration, distance;
	digitalWrite(trigPin, LOW);       
	delayMicroseconds(2);                 
	digitalWrite(trigPin, HIGH);               
	delayMicroseconds(10);             
	digitalWrite(trigPin, LOW);          
	duration = pulseIn(echoPin, HIGH);

	distance = duration * 17 / 1000; 
	Serial.println(distance);

	delay(100);
}

조금 어렵나요? 라인바이라인으로 볼까요~~~ 

먼저 1번 2번은 define 문이라고 해서, 변수이름과 그 내용을 미리 정의해 두는 것입니다. #define이라고 하면, C/C++하시는 분들은 전처리라고 합니다. 그리고, setup문에서 시리얼통신 속도를 설정(6번행)해두고, 7번 8번행에서 초음파센서의 trigPin과 echoPin을 각각 출력/입력으로 설정해 두었습니다.

이제 loopdㅔ서 먼저 trigPin에 LOW를 쏩니다.(14번행), 그리고 2마이크로초를 기다리고(15번행), 그리고, HIGH를 다시 쏘죠(16번행), 그리고 10마이크로초를 기다리고, LOW로 떨어뜨립니다. 결국, trighPin으로 구형파 하나를 만들어서 쏜거죠. 그리고 echoPin에서 들어오는 pulse의 시간을 측정합니다.

그리고 21번 행이 거리를 구하는 공식인데여ㅛ. 초음파는 음속의 속도를 가져서 초당 340m를 움직인다고 합니다. 그럼 초당 34000cm를 움직인거죠. 그런데, pulseIn 함수의 출력의 단위는 마이크로초(1000000마이크로초 = 1초) 단위입니다. 그래서 거리는 pulseIn 함수의 결과를 저장한 duration 변수에 34000/1000000을 곱하면 됩니다. 그리고, 초음파가 가고/오고 두번 움직여서 2로 나누면 21번행의 결과가 나타납니다.

이제 코드를 업로드하고, 시리얼플로터를 실행합니다.

저렇게 초음파 센서앞에 노트나 손을 대고 움직여 봅니다.^^

그러면 이렇게 결과를 확인할 수 있답니다.

반응형