카테고리 없음

초음파 레이더 만들기

abc0123 2017. 11. 10. 13:55
반응형

 

제목으로 마땅히 정할게 없어서 '초음파 레이더 만들기'라고 해봤는데 허접한 글의 내용에 비해서 뭔가 너무 거창한 거 같다.ㅎㅎ 여하튼 이번 글에서는 'HC-SRO4 초음파 센서'와 '서보모터' 및 'LED', '피에조 스피커'를 활용해서 초음파 레이더 비스름한 예제를 하나를 만들어보려고 한다.

 

예제의 내용은.... 아무 일 없을 때는 계속 180도 좌우로 왔다 갔다 하면서 초음파로 앞에 물체가 있는지 탐지하다가 특정한 거리 안에 물체가 나타나면 조명을 켜면서 경고음을 울리게 하는 내용이다. 카메라까지 있다면 사진도 찍게 할 수 있을 텐데 그 내용은 다음에 첨부해보기로 하고... 이번에는 단순하게 CCTV 방범 시스템을 생각해보자. 특별한 일이 없으면 하루 종일 좌우로 왔다 갔다 하다가 범죄자가 나타나면 멈춰서 그를 주시하고 조명도 켜고 경고음도 울리는 그림을 영화 같은 곳에서 많이 봤을 것이다. 나도 그걸 생각하면서 만들어본 예제인데 어떤 건지 영상에서 먼저 대충 확인해보자.

 

 

 

▲ 이번에는 그냥 MG995 서보모터를 사용했는데 내가 갖고 있는 녀석의 상태가 썩 좋지 못한 관계로 비실비실하다. ㅎㅎ 그래도 그 역할은 다하니 만드는 과정을 정리해놓자.

 

일단 준비해야할 건 초음파 센서와 서보모터, 그리고 피에조 스피커와 LED다. 아 참... 당연히 아두이노 보드는 있어야 한다. ㅎ

 

회로

 

▲ 전체적인 회로는 디지털 7번 핀에서 피에조 스피커로 신호를 보내고 있으며 8번은 서보모터를 제어하고 9번과 10번은 각각 초음파 센서의 TRIG와 ECHO에 연결이 되어 있다. 그리고 마지막으로 13번은 LED에 연결되어 있으며 나머지는 5V와 GND 케이블이다.

 

회로 만들기

 

아두이노

 

▲ 아두이노 센서와 액추에이터에 대해서 기본 개념만 갖고 있다면 쉽게 이해할 수 있을 정도의 기본 구조이다.

 

HC-SRO4

 

▲ 그런데 이 HC_SRO4 센서의 상태도 썩 좋지 않아서 서보모터가 최대한 왼쪽 또는 오른쪽으로 갔을 때 한 번씩 0의 데이터를 보내더라 그래서 소스 코드에서 해당 내용은 제어를 했는데 잘 돌다가 중간에 힘이 빠지는 이유는 정확히 모르겠다. ㅠ.ㅠ 영상에서도 확인할 수 있듯이 이 녀석이 중간쯤 돌다가 잠깐 힘이 빠져서 회전 속도가 떨어지는데 왜 그러지?ㅎ 아마 서보모터의 상태도 좋지 못한듯하니 참고하고 아두이노 스케치 프로그램에서 이 녀석을 제어할 소스 코드를 작성해보자.

 

 

 아두이노 코딩하기

 

setup

 

▲ 먼저 ① 서보모터를 사용하기 위해서 라이브러리를 추가했으며 초음파센서의 TRIG, ECHO 그리고 LED가 연결된 디지털 핀들을 상수로 만들고 Servo 클래스의 객체 servo를 만들었다. 마지막으로 int a는 서보모터의 회전 각도를 저장할 변수이다.

 

setup() 함수에서는 ② 초음파 센서의 값을 시리얼 모니터에서 확인해보기 위해서 Serial 통신을 준비하고 있으며 TRIG, LED 핀은 OUTPUT으로 ECHO는 INPUT으로 초기화 한 후 서보모터를 8번 핀에 할당했다. 그리고 시작과 함께 모터의 방향을 가장 왼쪽으로 돌려놓기 위해서 초기 각도 값을 a 값인 0으로 설정하고 있는 모습이다.

 

loop

 

▲ 그리고 loop()에서는 ③ for 문을 이용해서 서보모터를 왼쪽(0도)에서 오른쪽 끝(180도)까지 회전을 시키면서 초음파 센서를 껐다가 켜기를 반복해서 새로운 값을 받아오도록 하고 있으며 받아 들인 값을 pulsenIn 함수를 이용해 Cm로 변환 한 후 long형 dis 변수에 저장하고 그 값을 시리얼 모니터에 출력하도록 하고 있다. 그러다가 ④만약에 dis 값이 0이 아니면서 10 미만일 때는 피에조 스피커에서 소리를 출력하면서 LED를 켜도록 하고 있다. 또한 이런 상황이 됐을 때는 a 값 즉, 모터의 각도를 증가시키지 않고 그대로 멈춰있도록 하기 위해서 a 값을 하나 줄여줬다.

 

 

loop2

 

▲ 그렇게 별일 없이 모터가 ⑤오른쪽 끝(180도)까지 회전을 했다면 회전 방향을 반대로 해야 하기에 코드를 반대로 작성했으며 이때도 역시 초음파 센서의 값을 Cm로 변환하고 시리얼 모니터에 그 값을 출력하게 한 후 ⑥ 만약 그 값이 0이 아닌 10 이하가 될 때는 역시 스피커에서 소리를 출력하고 LED를 켜도록 했으며 모터가 왼쪽으로 움직이지 못하도록 a 값을 1 증가시켜줬다.

 

  결과 확인

 

이제 이 소스 코드를 아두이노에 업로드 한 후 센서에서 읽어들인 값을 시리얼 모니터에서 확인하다가 물체를 가까이 가져갔을 때 제대로 소리와 LED가 켜지는지 확인해보자.

 

 

▲ 역시 싼 게 비지떡인 거 같다. ㅎㅎ 센서 및 모터가 저렴한 것들이라서 정밀한 제어와 데이터 값을 원하는 건 무리인 거 같다. ㅎㅎ 그래도 내가 의도한 대로.... 아무것도 없을 때는 좌우로 180도 왕복 회전을 하다가 앞에 물체가 나타나서 그 거리가 10cm 미만일 때는 LED를 켜고 스피커에서 소리를 출력하는 건 확인할 수 있으니 이걸로 만족하고 좀 더 성능이 좋은 센서와 액추에이터 구입을 생각해봐야겠다.^^

 

이렇게 해서 나름대로(?) 초음파 레이더를 만들어봤는데 이 녀석도 여기저기 붙여서 활용할 부분이 많을 것 같으니 잘 정리해놨다가 응용을 해보기로 하고 이번 글은 여기서 마무리하자.


반응형