아두이노 HC-SR04 초음파센서 튜토리얼
아두이노에는 여러기지 센서들이 존재한다. 그 중 우리는 아두이노 HC-SR04 초음파센서를 알아볼 것이다. HC-SR04는 초음파를 이용하여 거리를 측정할 수 있다. 약 2~400cm 범위를 측정할 수 있지만, 거리가 멀거나 날씨, 장애물의 재질 등 환경적인 요건에 의해 오차가 발생한다. 초음파를 발사하고, 장애물에 닿은 후 다시 튕겨져 돌아오는 초음파를 센싱하여 거리 값을 측정한다.
회로도
샘플 코드
#define OutputPin 7
#define InputPin 8
void setup()
{
Serial.begin (9600);
pinMode(OutputPin, OUTPUT);
pinMode(InputPin, INPUT);
}
void loop()
{
long lengthen, centimeter;
digitalWrite(OutputPin, LOW);
delayMicroseconds(2);
digitalWrite(OutputPin, HIGH);
delayMicroseconds(10);
digitalWrite(OutputPin, LOW);
lengthen = pulseIn(InputPin, HIGH);
centimeter = lengthen * 17 / 1000;
if (centimeter >= 200 || centimeter <= 0)
{
Serial.println("거리가 측정이 불가함");
}
else
{
Serial.print(centimeter);
Serial.println("cm");
}
delay(500);
}
코드 해설
*이 초음파 센서에는 trig와 echo가 있는데, trig는 초음파를 쏘는 것이고, echo는 물체에서 튕겨져나온 초음파를 수신하는 것 이다.
*19~31줄에 있는 코드내용 해석
OutputPin핀에서 초음파를 발사하고 그 초음파가 다시 돌아 올 때까지 기다린다. 벽이나 장애물에 닿아서 다시 InputPin으로 돌아오면 걸린 시간을 centimeter에 저장한다.
*34번 줄에 있는 코드 centimeter = lengthen * 17 / 1000; 코드
거리는 시간 X 속도이다. 음속은 340m/s이므로 시간 X 340m이고 cm로 바꾸기 위해서 34000cm로 바꾼다. 시간 값이 저장된 duration은 마이크로초 단위로 저장되어있기 때문에, 변환하기 위해 1000000을 나누어 준다. 그럼 시간 X 34000 / 1000000이라는 값이 나오고, 약분하여 시간 X 34 / 1000이 된다. 하지만 장애물에 닿고 돌아오기까지 총 2번의 시간(가는 시간, 오는 시간)이 걸렸으므로 2를 나누어 준다. 그럼, 시간 X 17/1000이라는 공식이 나오면서 코드에 그렇게 쓰이게 된 것이다.
동영상