코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2018-11-30 14:30:44
1)초음파 센서란 무엇인가?
인간의 들을 수 있는 소리의 영역(가청영역)은 약 20~20000Hz 사이 이며, 이 가청영역의 주파수보다 더 높은 음을 초음파(Ultrasonic)라고 합니다.
강아지의 가청영역은 15~50000Hz이며, 돌고래의 경우 150~150,000Hz이니 인간이 듣지 못하는 소리를 동물들은 들을 수 있습니다.
초음파의 속도는 일반 공기중에서 약 340m/s이며, 파동의 성질인 확산, 흡수, 산란 등에 의해 감쇠하는 성질을 가지고 있습니다.
초음파 센서는 이미 로봇 청소기 같은 가전제품에서부터 자동차의 감지 센서, 초음파 탐지기 등 의료용, 산업용에 이르기까지 매우 다양한 분야에서 활용되고 있습니다.
이 예제에서 사용된 초음파 센서는 약 40KHz 정도의 주파수를 생성하며, 최대 4~5m정도까지의 거리를 측정할 수 있습니다.
거리측정을 위한 초음파 센서는 송신부와 수신부로 나뉘어져 있으며, 송신부에서 일정한 시간의 간격을 둔 짧은, 초음파 펄스를 방사하고, 대상물에 부딪혀 돌아온 에코 신호를 수신부에서 받아, 이에 대한 시간차를 기반으로 거리를 산출합니다.
이를 통해 장애물의 유무, 물체의 거리 또는 속도 등을 측정할 수 있습니다.
초음파를 발생시키는 원리는 피에조 부저가 소리나는 원리인 피에조효과(압전효과)와 같습니다.
2)초음파 센서 사용 방법
초음파 센서의 송신부(Trig)에서 일정한 시간의 간격을 둔 짧은, 초음파 펄스를 방사하고, 대상물에 부딪혀 돌아온 에코 신호를 수신부(Echo)에서 받아, 이에 대한 시간차를 기반으로 거리를 산출합니다.
1cm를 이동하는데 걸리는 시간은 다음과 같이 구할 수 있습니다.
따라서, t = 2 * 0.01 / 340 = 58.824µs 로, 초음파가 1cm를 이동하는데 걸리는 시간은 약 29µs가 걸리며, 초음파가 반사된 물체와의 거리는 다음과 같이 구할 수 있습니다.
거리(cm) = duration (왕복에 걸린시간) / 29 / 2 (왕복)
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | |
2 | 초음파 센서 | 1 | HC-SR04 |
3 | LED | 1 | LED(RED) |
4 | 330Ω 저항 | 1 | |
5 | 브레드 보드 | 1 | |
6 | 점퍼 케이블 | 8 |
부품명 | 오렌지 보드 | 초음파 센서 | LED |
파트 |
부품명 | 330Ω 저항 | 브레드 보드 | 점퍼 케이블 |
파트 |
1. 초음파센서를 그림과 같이 세로로 꽂습니다.
2. 초음파센서의 맨 위 쪽 핀을(VCC) 오렌지보드 5V핀에 연결합니다.
3. 초음파센서의 맨 아래쪽 핀을(GND) 오렌지보드 GND핀에 연결합니다.
4. 초음파센서의 두번째 핀을(Echo) 오렌지보드 D9번핀에 연결합니다.
5. 초음파센서의 세번째 핀을(Trig) 오렌지보드 D8번핀에 연결합니다.
6. LED의 긴 다리가(+극) 아래쪽을 향하도록 꽂습니다.
7, LED의 긴 다리에 330Ω 저항을 연결합니다.
8. 저항의 반대쪽을 오렌지보드 D3번핀에 연결합니다.
9. LED의 짧은 다리를(-극) 오렌지보드 GND핀에 연결합니다.
아래 코드는 초음파센서에서 거리가 10cm이하로 감지가 되면 LED가 켜지는 코드 입니다.
8번, 9번 핀에 연결된 초음파 센서 값을 측정 후 10cm보다 가까워지면 디지털 3번 핀에 연결된 LED의 불을 키고, 10cm 보다 멀어지면 LED의 불을 끕니다.
이를 계속 반복해줌으로써 초음파센서를 이용하여 LED의 On/Off 제어를 하게 됩니다.
/*
제목 : 초음파센서로 거리 측정하기
내용 : 초음파센서로부터 10cm 이내로 물체가 감지되었을때 LED가 켜지도록 만들어 봅시다.
*/
// 초음파센서의 송신부를 8번핀으로 선언하고 수신부는 9번핀으로 선언합니다.
int trig = 8;
int echo = 9;
// LED를 A0핀으로 설정합니다.
int led = 3;
// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
// 초음파센서의 동작 상태를 확인하기 위하여 시리얼 통신을 설정합니다. (전송속도 9600bps)
Serial.begin(9600);
//초음파 송신부-> OUTPUT, 초음파 수신부 -> INPUT, LED핀 -> OUTPUT
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
}
// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
digitalWrite(trig, LOW);
digitalWrite(echo, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
unsigned long duration = pulseIn(echo, HIGH);
// 초음파의 속도는 초당 340미터를 이동하거나, 29마이크로초 당 1센치를 이동합니다.
// 따라서, 초음파의 이동 거리 = duration(왕복에 걸린시간) / 29 / 2 입니다.
float distance = duration / 29.0 / 2.0;
// 측정된 거리 값를 시리얼 모니터에 출력합니다.
Serial.print(distance);
Serial.println("cm");
// 측정된 거리가 10cm 이하라면, 아래의 블록을 실행합니다.
if (distance < 10) {
// LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(led, HIGH);
}
// 측정된 거리가 10cm 이상이라면, 아래의 블록을 실행합니다.
else {
// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(led, LOW);
}
// 0.2초 동안 대기합니다.
delay(200);
}
|
cs |
<오렌지보드 초음파센서로 LED On/Off 제어하기 코드>
trig핀과 echo핀
초음파센서에서는 2가지의 신호 제어핀이 있습니다. 바로 trig핀과 echo핀인데요.
두 역할을 확실히 이해한다면 코드를 읽기 좀 더 수월합니다.
trig핀은 초음파를 쏘는 역할을 하기 때문에 아두이노 입장에서는 출력의 역할을 하는 핀이고 그렇기 때문에 pinMode(trig,OUTPUT);을 선언합니다.
반대로 echo핀은 초음파를 받아들이는 역할이므로 pinMode(echo,INPUT);이 됩니다.
loop()에서는 처음에 trig, echo핀 모두 LOW신호를 줌으로써 아무 동작도 하지않는 초기화상태를 만듭니다.
그 후에 trig핀에 신호를 10us만큼 주게 되는데 이 신호는 초음파를 발사하는 신호가 아닙니다.
데이터시트를 확인하게 되면 trig핀에 10us만큼 신호가 들어가게 되면 그 다음에 8번의 초음파가 발사됩니다.
초음파를 쏘기 위한 사전 신호로 보시면 됩니다.
그 후에는 pulseIn()함수를 통해 초음파가 장애물에 부딪혀서 돌아온 왕복 시간을 측정하게 됩니다.
pulseIn()함수
pulseIn()함수는 특정 시간을 측정하기 위해 사용하는 함수 입니다.
pulseIn(3,HIGH)라면 3번핀이 HIGH신호를 유지하고 있는 동안의 시간을 측정하게됩니다.
LOW->HIGH로 바뀔때 시간측정을 시작하고 HIGH->LOW로 바뀌는 순간 시간 측정을 중지합니다.
위 코드에서는 unsigned long duration = pulseIn(echo, HIGH); 이기 때문에
echo핀이 HIGH신호를 유지하고 있는 동안의 시간을 측정하게 됩니다.
코드 실행
위 코드를 실행시키면 초음파로 거리를 측정하고 측정된 거리에 따라 10cm를 기준으로 10cm보다 적을 경우 LED를 켜고
10cm보다 멀면 LED를 끕니다.
초음파센서는 전방에 있는 장애물을 감지하여 거리값을 반환하는데 이 특성을 이용하여
손을 인식하면 자동으로 열리는 스마트 휴지통을 만들었습니다.
휴지통에 만지면서 열고 닫고가 찜찜할 때 초음파센서를 부착하면 자동으로 열리게 됩니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!