본문 바로가기
Arduino/Arduinio기초 실습

10장. 초음파 센서 모듈 실습

by sinki 2022. 4. 8.

실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다. 

 

< 준비물 >

아두이노 우노 : 1개

USB 케이블  : 1개 

점퍼 케이블(숫숫) : 6개가량

브레드 보드 : 1개, 830홀 사용

초음파 센서 모듈 : 1개

초음파 센서를 이용하여 피사체와의 거리를 출력하는 실습입니다. 초음파 센서의 동작원리 및 거리 계산 방법에 대하여 알아보겠습니다.

팅커 캐드 링크입니다 : https://www.tinkercad.com/things/5K63uOE43lO

 

 

< 참고 지식 >

⦿ 초음파 센서(ultrasonic Sensor, HC-SR04)

초음파란 인간이 들을 수 있는  소리가 가지는 진동수, 곧 가청진동수(20 ~ 20,000 Hz) 보다 높은 진동수를 갖는 소리를 초음파라 합니다. 초음파는 파장이 작고 지향성이 강하고 물질의 반사되어 돌아오는 성질이 있습니다. 이를 이용한 센서가 초음파 센서(HC-SR04)입니다.

초음파 센서는 송신부와 수신부로 구성됩니다. 송신부에서 초음 파을 쏘아 벽 혹은 기타 물체에 반사되어 오는 초음파를 수신부에서 인식합니다. 이때 반사되어 돌아오는 시간을 가지고 거리를 계산할 수 있습니다.

ITead Studio사 제공 자료

사용 전원 : DC 5V

대기 전류 : 2mA 이하

유효각 : 15º 이하

사정거리 :  2 ~ 500cm

해상도 :  3mm

ITead Studio사 제공 자료

 구동원리는 송신부(Trig)에서 10uS 길이의 신호를 입력하면 초음파가 발사되고 물체에 반사되어 돌아오는 초음파의 시간을 계산하여 수신부(Echo)에서 신호를 전달해줍니다.

Sequence chart를 보면 10uS의 Trig 펄스가 입력되면 모듈 내부에서 40KHz를 가진 8개의 펄스가 발생되고 Echo 부는  Low에서 High로 상승 신호를 출력됩니다. 이때 모듈에서 발생된 초음파가 물체에 반사되어 초음파 센서 모듈 수신부에 입력되면 Echo는 High에서 Low로 신호가 변경됩니다. 즉 초음파 센서 모듈과 물체 사이의 거리는 Echo의 출력이 High로 유지되는 시간에 의해서 계산됩니다. 반대로 물체가 없다면 Echo는 38mS동안 High 신호 후 Low 신호로 변경되는 동작을 반복합니다.

 

< 실습 코드 >

#define echo 6        // 에코 핀 선언
#define trig 7          // 트리거 핀 선언
void setup()
{
  Serial.begin(9600);           // 시리얼 통신 속도 설정
  pinMode(trig, OUTPUT);  // 트리거 출력 핀 선언

  pinMode(echo, INPUT);   // 에코 입력 핀 선언
}

void loop()
{
  Serial.print(" Check the value ! ");
  Serial.println(read_ultrasonic());  //초음파 센서 모듈 거리 계산 함수 실행
  delay(500);                                    // 0.5초 지연
}
int read_ultrasonic(void)             // 초음파 센서 모듈 거리 계산 함수 
{
  float return_time, howlong;          // 시간 값과 거리 값을 저장하는 변수 선언
  digitalWrite(trig, HIGH);              //  초음파 발사 
  delay(5);                                      // 0.05초간 지연
  digitalWrite(trig, LOW);             // 초음파 발사 정지
  return_time = pulseIn(echo, HIGH);    // 돌아오는 시간
  howlong = ((float)(340 * return_time) / 10000) /2; //시간을 거리로 계산 음파의 속도 340M를 편도 계산을 위해 나누기 2 함
  return howlong;  // 거리 값 리턴
}