코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-05 16:35:54
초음파 거리센서는 초음파를 대상에게 발사하여 반사되어 오는 반사파를 받을 때까지의 시간을 확인하여 거리를 측정하는 센서 입니다.
사진 출처 : DangerousPrototypes
초음파 거리센서를 이용해 거리측정을 하여 물체가 가까이 있을 경우 진동이 울리는 시각장애인들을 위한 장갑을 만들 수도 있고,
사진 출처 : MCU on Eclipse
로봇에 부착하여 로봇이 물체에 충돌하지 않도록 움직임을 제어 할 수 있습니다.
이 컨텐츠에서는 초음파 거리 센서를 아두이노와 연결해 보고, 물체와의 거리를 측정 해보겠습니다.
- 초음파는 사람의 귀로 들을 수 없는 주파수가 20Khz 이상의 음을 말합니다.
- 초음파 거리 센서는 초음파를 보내고 받는 시간을 측정하여 거리를 재는 센서입니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지보드 | 1 | 아두이노 |
2 | 초음파 거리 센서 | 1 | 초음파 거리 센서 |
3 | 브레드보드 | 1 | 브레드보드 |
4 | 점퍼케이블 | 4 | 점퍼케이블 |
부품명 | 오렌지보드 | 초음파 거리 센서 | 브레드보드 | 점퍼케이블 |
파트 | x1 | x1 | x1 | x4 |
//초음파 센서의 핀번호를 설정한다.
int echoPin = 12;
int trigPin = 13;
void setup() {
Serial.begin(9600);
// trig를 출력모드로 설정, echo를 입력모드로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trig, LOW);
digitalWrite(echo, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
unsigned long duration = pulseIn(echoPin, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
float distance = ((float)(340 * duration) / 10000) / 2;
Serial.print(distance);
Serial.println("cm");
// 수정한 값을 출력
delay(500);
}
* 이 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다. distance = ((float)(340 * duration) / 10000) / 2; // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
위의 코드를 이해하기 위해서는 초음파 센서의 원리 알아야 합니다.
간단하게 설명하면 trig이 HIGH 가 되면 초음파를 보내게 됩니다. 초음파를 다 보내면 echo가 HIGH상태를 유지하면서 되돌아오는 초음파를 받을 준비를 합니다.
초음파가 앞에 물질에 부딪혀 다시 돌아오면 echo가 LOW 로 바뀌게 됩니다. HIGH 에서 LOW로 바뀔 동안의 시간을 측정하여 duration에 저장합니다.
(pulseIn(pin, state)은 어느 pin에서 어떤 상태(state)로 얼마나 유지되고 있는지를 구합니다.)
초음파는 340m/s의 속도로 날라갑니다.(온도가 25도 일 때)
이 때 속도와 센서가 보낸 시간을 이용하여 거리를 구합니다.(왕복해서 오는 것이므로 결과를 2로 나눠줘야 합니다)
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!