반응형

 

 

 

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(Internet) 사용법과 웹서버(Web server) 만드느라 많은 시간을 보냈는데요 ^^ 오늘은 재미있는 센서를 하나 소개드리려고 합니다. 

 

바로 초음파(ultrasound(s), ultrasonic wave) 센서입니다. 인터넷에 찾아보면 거리 센서라고 많이 검색되는데 초음파를 쏴서 돌아오는 시간을 계산해서 거리를 측정할 수 있는 예제가 많이 알려져서 그런 것 같습니다 ^^ 이번 포스팅에서는 초음파 센서 사용방법과 프로그램 코딩에 대해 알아보겠습니다.


  • HC-SR04 초음파 센서

온라인에서 '초음파 센서'를 검색하면 아두이노용으로 많이 사용하는 모델은 'HC-SR04' 모듈입니다. 생긴건 마치 스피커처럼 생겼는데요 ㅎㅎ 아두이노 작품들 중에 로봇류는 대부분 이 HC-SR04 센서로 눈처럼 꾸며서 사용하는걸 많이 보았습니다. 

 

아두이노 HC-SR04 초음파 센서

"초음파(超音波, 영어: ultrasound(s), ultrasonic wave)는 인간이 들을 수 있는 가청 최대 한계 범위를 넘어서는 주파수를 갖는 주기적인 '음압'(音壓, sound pressure)을 의미한다." (출처: 위키피디아) 즉, 사람이 들을 수 없는 고주파수 영역대의 음파를 말합니다. 건강하고 젊은 사람이 대략 20KHz의 영역을 들을 수 있고 사람이 들을 수 있는 이상의 영역이 초음파 영역이라고 생각하시면 됩니다.

 

아두이노에서 사용할 HC-SR04 초음파 센서는 대락 40KHz 영역대의 초음파를 방출합니다. 송신기와 수신기인 두개의 초음파 트랜스 듀서(Ultrasonic transducer)가 있고, 수신기(Chirp: 주파수 변조 방식을 사용하는 펄스 압축의 하나)에서 방출된 초음파가 물체에 반사되어 수신기(Echo)에 돌아온 시간을 통해서 거리를 계산하는 방법을 사용합니다.

 

초음파 센서(ultrasounds sensor) 작동원리

동작 전압 5V DC
동작 전류 15mA
발생 초음파 약 40kHz
effectual angle <15도
측정 범위 2 ~ 400 cm
오차 0.3 cm
초음파 속도 340 m/s

 


 

  • HC-SR04 초음파 센서 연결방법

HC-SR04 초음파 센서는 5V 구동입니다. 모듈의 VCC 핀을 아두이노의 5V에 연결하고 GND는 GND에 연결합니다. 위에서 설명한 송신부인 Chirp는 모듈에서 Trig 핀이며 아두이노 12번 Pin에 연결하고, 수신부 Echo 핀을 8번 Pin에 연결합니다. Trig와 Echo 핀이 연결된 아두이노의 디지털 핀(DIGITAL Pin)은 프로그램상으로 변경 가능하니 원하시는 데로 임의로 연결하셔도 됩니다. 

 

아두이노(Arduino) HC-SR04 초음파 센서 사용방법: 연결 배선

 

 

  • HC-SR04 초음파 센서 프로그램 코딩 방법

HC-SR04 초음파 센서는 따로 '라이브러리(Library)'가 없어도 됩니다. 앞서 아두이노 프로그램 코딩 초급편에서 다루었던 'pinMode''digitalWrite' 명령어를 주로 사용하고 추가로 'pulseIn' 명령어를 사용하여 거리를 측정하는 프로그램을 코딩하도록 하겠습니다. 'pinMode'와 'digitalWrite' 명령어에 대한 내용과 간단한 예제는 아래 링크 참조 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com

 

명령어 기능 사용법
pinMode I/O 핀의 입출력 설정 pinMode(pin#, mode);
digitalWrite 디지털 핀에 High, Low 값 출력  digitalWrite(pin#, HIGH); or digitalWrite(pin#, LOW);
pulseIn 아두이노 핀으로 입력되는 펄스의 시간을 측정하는 함수 pulseIn(pin#, High); or pulseIn(pin#, Low);
int echo = 8;
int trig = 12;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  float cycletime;
  float distance;
  
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  
  cycletime = pulseIn(echo, HIGH); 
  
  distance = ((340 * cycletime) / 10000) / 2;  

  Serial.print("Distance:");
  Serial.print(distance);
  Serial.println("cm");
  delay(500);
}

 

 

HC-SR04 모듈을 아두이노에 연결한대로 trig = 12, echo = 8로 지정해주고 pinMode를 통해 trig는 Output(송신), echo는 Input(수신)으로 설정하였습니다. 그리고 cycletime(시간), distance(거리)를 실수(float)로 변수 지정을 하고, digitalWrite를 통해 trig에서 초음파가 송신하도록 'High' 명령을 주고 10 msec delay 후 'Low'로 신호를 끕니다. 그럼 송신된 초음파가 물체에 반사되어 echo에 수신 (신호가 High로 전환)될 때까지의 시간을 pulseIn 명령어를 통해 distance 변수에 저장합니다. 마지막으로 초음파가 물체를 맞고 돌아온 시간과 초음파의 속도 340 m/s를 이용하여 cm 단위로 거리를 계산합니다. 왕복거리라 마지막에 나누기 2가 들어갑니다. ^^

 

프로그램 코딩 완료 후 스케치(Sketch)를 통해 아두이노에 업로드 후 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 거리를 계속 센싱하여 출력해서 보여줍니다. 통신속도(Baudrate) 맞추는 건 이제 기본으로 하시죠? ㅎㅎ

 

아두이노(Arduino) HC-SR04 초음파 센서 사용방법: 거리 측정 값 시리얼 모니터 출력


여기까지 아두이노(Arduino)로 HC-SR04 초음파 센서(ultrasounds sensor) 사용방법 과 거리를 측정하는 간단한 프로그램을 코딩해보았습니다. 정말 재미있는 센서인 거 같습니다. ^^ 조만간 초음파 센서를 이용하여 거리를 측정하는 것뿐만 아니라 적외선 센서처럼 물건이나 사람을 감지할 수도 있으니 사람을 감지하여 외부기기를 동작하거나 멈추는 간단한 프로젝트를 진행해 보도록 하겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 질문이나 추가적으로 필요하신 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

 

 

 

반응형

+ Recent posts