블루투스 보드(hc-06)를 이용한 자동차 제작
앞서 말한 바 있지만 장난감의 꽃은 자동차이다.
지난번에는 장애물을 비껴가는 자율 주행 자동차를 만들었다면, 이번에는 휴대폰으로 움직이는 블루투스 조종 자동차를 만들어 보자.
상당수의 코드는 자율 주행 자동차의 것을 그대로 차용해 오면 되고, 블루투스로 전진, 후퇴, 좌우 방향 전환, 멈춤, 클랙션 등의 기능을 조종하고, 차가 멈추면 브레이크 등이 켜지고, 전진할 때는 앞의 헤드라이트가 켜지는 식으로 기능을 추가해 보았다.
이번 장난감은 모든 코드를 하나하나 적어 넣고 설명하기보다는 블루투스를 이용하여 장난감을 만들 때 이용하면 좋은 도구와 방법에 대한 이야기를 주로 하려고 한다.
자동차의 모습은 아주 간단하다.
아두이노 나노, 블루투스 보드 , 모터 드라이버, 모터와 바퀴, 헤드라이트와 브레이크 등을 시뮬레이션하는 LED 등이 전체 부품이다. 포맥스 보드를 잘라 자동차 모양을 만들고 그 위에 모든 부품을 설치하였다.
완성된 모습은 아래와 같다. 조금 초라하다 ^^;;사진에 보이지는 않지만 앞바퀴는 낡은 회전의자의 바퀴 하나를 빼서 연결하였다.
붉은 원 안에 모터 드라이버를 붙이고, 브레드보드와 모터 드라이버 사이의 틈에 블루투스 보드를 설치하였다. (초록색 원)
LED 등은 차체 위에 보이게 설치하고 아래쪽에 배선을 하였다.
시간이 되시는 분들은 프레임 위에 멋진 자동차 모양을 공작하여 붙여도 좋을 것 같다.
각 부품의 연결 핀은 아래와 같다.
블루투스 보드 : TX -> 디지털 2 번핀
RX -> 디지털 3 번핀
모터 드라이버의 좌우 모터 : 디지털 5,6,9,10번
브레이크 등 : 디지털 11번
헤드라이트 : 디지털 12번
스피커 핀 : 4번
앞 서 이야기한 것처럼 이번 장난감을 만드는데 들어간 모든 코딩 및 이용 방법은 이미 앞에서 만들었던 여러 작품들에 적용이 된 것이므로 달라진 내용만 기술하도록 하겠다.
먼저 블루투스 자동차를 구동하기 위하여 휴대폰에 자동차 컨트롤용 앱을 설치해 보자.
설치할 앱은 Arduino Bluetooth controller이고, 비슷한 이름을 가진 여러 앱 중 아래의 앱을 사용하려 한다.
물론 비슷한 기능을 가진 다른 앱을 사용하여 컨트롤을 하여도 좋다.
엡을 실행하면 나오는 아래 좌측과 같은 화면에서, 원하는 블루투스 보드의 이름을 결정하고 붉은색으로 박스를 둘러놓은 controller mode를 선택하면 우측과 같은 화면이 나오게 된다. 화면의 모양을 척 보기만 해도, 게임 컨트롤러의 형태를 가지고 있음을 알 수 있다.
이 버튼 하나하나에 그 명령을 부여하고 이를 해석하는 것이 이번 작품 제작의 핵심이다.
우측의 초록 색 설정 버튼을 눌러보면 아래와 같은 화면이 나오는데 위의 그림에서 보여준 버튼 하나하나를 규정하기 위한 화면이다.
컨트롤을 위한 각 버튼을 위와 같이 lt, up, rt, dn 등의 명령으로 규정하는 화면이다. 이렇게 규정을 해두면 해당 버튼을 누를 경우 블루투스 통신을 통하여 아두이노에 해당 명령이 전달되게 된다.
블루투스 보드의 조정에 관련된 글(39. 스마트폰으로 블루투스 보드(HC-06) 연결, 조종)을 이미 읽으셨던 분이라면 전등을 켜고 끄기 위해 on, off라면 명령을 타이프 쳐서 전달했던 기억이 있을 것이다.
이때 타이프로 전달했던 명령을 이제는 버튼으로 전달하게 되는 것이다.
프로그램 코드에서 보면...
위와 같이 날아온 명령어가 cc인지 sq 인지 lt인지에 따라 각각의 명령 함수를 실행하도록 코드가 만들어져 있다.
이 함수의 코드들은 대부분 이미 내 글들 속에 있는 내용이므로 블루투스 명령을 어떻게 받을 것인가에 대한 부분의 설명만으로 이번 이야기는 마무리할 것이다.
(블루투스에 관한 2편의 글(38, 39번) , 자율주행 자동차에 관한 3편의 글(41, 42, 43번) 등을 참조하시면 된다.)
컨트롤러의 버튼을 눌러 작동하는 자동차의 모습은 아래의 영상과 같다.
실제로 주행하는 영상도 아래에 포함하였다.
이제 아두이노를 이용하여 만들어본 두 번째 자동차의 제작이 완료되었다.
지금까지 만든 자동차를 바탕으로 도로 위의 검은색 줄을 따라 움직이는 라인트레이싱 자동차나 자율 주행이 개선되어 신호등을 인지하고 자동으로 패러렐 파킹 등이 가능한 자동차를 만들 수도 있을 것이다.
아두이노 부품들을 가지고 자동차를 만들고 나면 정교하지 않은 부품들 때문에 자동차의 움직임이 마음에 들지 않는 경우가 많이 있다.
가장 중요하고 흔히 발생할 수 있는 문제는 동일한 모터를 좌우에 설치하였음에도 그 회전 속도가 다른 것이다. 이러한 문제의 원인은 조악한 모터의 품질에서 발생할 수도 있고, 모터 드라이버가 공급하는 전압의 차이에서 기인할 수도 있다. 자동차를 더 만들어가기 이전에 이러한 문제를 해결하는 방법에 대해서도 차후에 이야기해볼 예정이다. 그렇지 않다면 똑바로 진행해야 할 자동차가 좌우로 비뚤어진 진행을 보여줄 것이기 때문이다. 속도를 측정하고 측정된 속도의 차이를 보정하는 형태의 코딩 수정을 통하여 이러한 문제를 해결할 수 있다.