초음파 센서는 약 20kHz이상의 높음 주파수의 음파가 물체에 부딪힌 다음 반사파가 되어 돌아오는 시간을 측정하여 물체까지의 거리를 계산합니다.
▶초음파센서 원리
초음파 센서에는 4개의 핀이 있는데 왼쪽부터 VCC, Trig, Echo, GND가 있습니다. Trig는 VCC에 신호가 들어오면 초음파을 발신합니다. 발신된 초음파가 장애물이나 벽에 부딪혀 다시 돌아오게 됩니다. 이 신호를 Echo가 받아들입니다. Trig를 통해 초음파는 340m/s의 속도로 발신됩니다.
triger 핀에 10us 정도의 High 신호를 주면 초음파센서는 40khz 펄스를 자동적으로 8번을 발생시킵니다. 펄스를 발생시킨 직후에 echo 핀은 high 되고 반사된 초음파가 감지 되었을때 echo 핀이 low 가 됩니다. 이 echo 핀이 high 였다가 low 가 되는데 걸리는 시간을 측정하여서 그 시간을 초음파의 속도/2(즉 58)로 나누면 거리가 나옵니다.
[부품목록]
▶ 아두이노 보드: 1개
▶ 브레드보드: 1개
▶ 점프선
▶ 초음파 거리 측정 센서: 1개 (HC-SR04)
(http://www.icbanq.com/P008113531)
▶ CLCD: 1개
▶아두이노
초음파 센서로 들어온 신호 값을 단위 변환 공식을 적용하여 cm단위로 LCD에 표시하는 예제입니다. 초음파를 거리로 변환하는 방법은 거리 = 속력 X 시간 공식을 사용합니다.
▶아두이노 예제
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 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <LiquidCrystal.h> float duration; float distance; //LCD 객체 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup( ) { //LCD의 열수와 행수를 설정 lcd.begin(16, 2); //trig 출력으로 설정 pinMode(8, INPUT); //echo 입력으로 설정 pinMode(9, OUTPUT); lcd.print("DISTANCE"); } void loop( ) { //trig 5V 출력한다 digitalWrite(9, HIGH); delay(10); //trig 0V 출력한다 digitalWrite(9, LOW); //pulseIn함수의 단위는 ms(마이크로 세컨드) duration = pulseIn(8, HIGH); distance = ((34000*duration)/1000000)/2; lcd.Cursor(0,1); lcd.print(distance ); delay(100); } | cs |
▶코드 해석
pulsIn함수는 pulsIn(핀번호, 핀상태)의 형태로 이루어져 있으며 핀 상태가 바뀌면 그때까지 경과한 시간을 ms(마이크로 세컨드)단위로 반환시켜줍니다.
초음파 센서에서는 echo핀이 HIGH였다고 초음파를 받으면서 LOW로 바뀌기 때문에 pulsIn함수를 이용해서 초음파가 날아온 시간을 측정할 수 있습니다.
위 코드를 해석한 후 요약하면 아래와 같이 진행됩니다.
trig(HIGH) - 초음파 발사 - trig(LOW) - 발사중지 - 물체에 맞고 돌아온 초음파를 echo(HIGH)핀으로 받음 - echo(LOW) - 거리계산 - 반복
distance = ((34000*duration)/1000000)/2;
거리를 cm단위로 측정하기 위해서 소리의 속도(340m/s)와 초음파가 돌아온 시간(마이크로세컨드)를 계산한 식 입니다. 그리고 초음파가 발사되서 돌아오는 시간에 나누기 2를 해주어서 편도 거리를 계산합니다.
'아두이노로 장난하기' 카테고리의 다른 글
아두이노로 구부러짐 측정하기 (0) | 2018.03.15 |
---|---|
아두이노로 압력을 측정하기 (1) | 2018.03.13 |
아두이노로 온도(LM35D)를 측정하기 (0) | 2018.03.13 |
아두이노로 빛의 밝기를 측정하기 (0) | 2018.03.13 |
아두이노로 텍스트 LCD 표시하기 (0) | 2018.03.12 |