아두이노로 RC 카 만들기 네 번째 - 무선 조정하기

3 minute read

아두이노로 RC카 만들기 네 번째이자 마지막 시간입니다! 지난 포스트에서 유선으로 조이스틱을 연결하여 차를 움직였는데 이번 포스트에서는 블루투스를 이용해서 조이스틱을 RC카와 연결하여 무선으로 차를 조종해보고자 합니다.

기본 구상

세 번째 포스트에서 유선으로 조정하는 차를 만들었는데, 무선으로 조정하게 하려면 이 차체를 어떻게 바꿔야 할지 고민해 보았습니다. 기본 구상은 차를 조정하는 조이스틱을 떼어내 조정기를 따로 만들고, 조정기와 차체를 무선으로 연결해서, 차체는 무선으로 들어온 신호를 조이스틱 신호로 해석해 모터를 제어하도록 하는 것이었습니다.

이렇게 하면 이전에 만들어 놓은 회로와 코드를 다시 쓸 수 있고 무선 모듈 부분만 추가하면 되기 때문에 효과적이라고 생각하였습니다. 아래 설명할 회로와 코드를 보면, 세 번째 포스트에서 설명한 조이스틱으로 조정하는 차체 스케치에서 조이스틱과 관련된 부분은 떼어내어 송신기 회로와 코드로 옮기고, 모터 제어와 관련된 부분은 묶어서 수신기 회로와 코드로 만들었다는 것을 알 수 있습니다.

HM-10 모듈

HM-10 모듈은 Bluetooth 4.0을 지원해서 아이폰에 쉽게 연결되어 휴대폰에 연결하여 조정하는 장치를 만들 수 있고, 무엇보다 양방향 시리얼 통신이 가능한 서비스를 제공해서 두 기기를 연결해 데이터를 주고 받기 편하기 때문에 이 프로젝트에서 사용하기로 하였습니다.

HM-10 모듈을 사용하는 방법은 Martyn Currey가 쓴 HM-10 Bluetooth 4 BLE Modules에 정말 자세하게 설명되어 있습니다. 한글로 된 설명은 메카솔루션의 블루투스 4.0 모듈 HM-10 사용법 알아보기를 참고하시면 좋아요.

무선 송수신기 만들기

HM-10 모듈 연결

HM-10 모듈을 송신기와 수신기에 같은 방식으로 연결하였습니다. 이렇게 하면 HM-10을 사용하는 코드를 송신기와 수신기에 동일하게 쓸 수 있어 편리하기 때문입니다. 아래 표에서 볼 수 있는 것처럼 D4를 아두이노의 RX로 생각하여 HM-10의 TX에 연결하였고, D5를 아두이노의 TX로 생각하여 HM-10의 RX에 연결하였습니다.

아두이노 HM-10 모듈
5V VCC
GND GND
D4 TX
D5 RX

수신기 회로도

조이스틱으로 조정하는 차체에서 조이스틱을 떼어내고 HM-10 모듈을 연결하였습니다. 모터 드라이버 등의 연결은 조이스틱으로 조정하는 차체와 동일합니다.

수신기 회로도

송신기 회로도

세 번째 포스트와 마찬가지로 조이스틱의 VRX는 A0에 VRY는 A1에 연결하였습니다.

송신기 회로도

조립된 모습

수신기 조립된 모습 1 수신기 조립된 모습 2 송신기 조립된 모습

HM-10 모듈 설정하기

HM-10 모듈 두 개가 통신하기 위해서 한 모듈은 central(또는 master) 모드로 동작해야 하고, 다른 모듈은 peripheral(또는 slave) 모드로 동작해야 합니다. RC 카를 핸드폰으로 조정하는 것도 생각하고 있었기 때문에, RC 카 차체의 HM-10 모듈을 peripheral로 설정하고, 조정기에 있는 HM-10 모듈을 centeral로 설정하기로 하였습니다.

HM-10 모듈은 기본 설정 상태에서 peripheral 모드로 설정되므로 차체는 설정을 따로 할 필요가 없습니다. 차체에는 수신기 스케치를 업로드하고 전원을 끈 상태로 둡니다.

송신기 설정을 master로 하는 방법을 알아보겠습니다. 다음 스케치를 송신기에 업로드 합니다.

HM-10 설정 코드

참고 자료에서 소개한 Martyn Currey의 포스트에 들어 있는 코드를 참고하여 AT 명령어로 HM-10 모듈 설정을 변경할 수 있는 프로그램을 아래와 같이 만들어 보았습니다.

Central 설정

Centeral 설정 화면

HM-10 모듈이 다른 장치와 연결되지 않은 상태에서 AT 명령으로 모듈을 설정할 수 있습니다. 위 코드로 HM-10을 설정하려면 화면 아래 파란색 사각형으로 보이듯 시리얼 모니터의 CR/LF를 모두 설정합니다.

Central 모드로 설정하는데 중요한 것은 AT+ROLE1 명령으로 central 모드를 활성화 하는 것입니다. 그전에 AT+IMME1으로 주변 모듈과 자동 연결을 막는 것이 필요합니다. 자동 연결을 활성화하면 정말 눈깜작할 사이에 모듈들이 서로 연결되는데, 모듈이 서로 연결된 상태에서는 AT 명령이 동작하지 않기 때문에 자동 연결을 비활성화 합니다. 다음으로 최신 펌 웨어가 아닌 경우 AT+ROLEn 후에 AT+RESET을 해야만 제대로 동작합니다.

이제 차체에 전원을 연결해서 차체에 있는 HM-10 모듈이 연결 준비 상태가 되도록 합니다.

AT+DISC?로 차체의 HM-10 모듈을 찾습니다. 화면에서 보는 것처럼 주소가 341513E4AED9인 모듈을 찾았습니다. 다른 모듈을 쓰는 경우에는 여기에 다른 주소가 나오겠죠. AT+CON 명령으로 이 장치와 연결합니다.

이제 송신기 모듈과 수신기 모듈이 연결되었습니다. 제대로 연결되었는지 확인해 보기 위해 숫자, 숫자 형식으로 조이스틱 입력값들을 수동으로 입력해 봅니다. 모터가 움직이면 제대로 연결된 것입니다.

제대로 연결되었다면 이제 차체 전원을 꺼서 송신기의 HM-10 모듈이 연결대기 상태가 되도록 합니다.

마지막으로 AT+IMME0로 자동 연결을 활성화 합니다. 다음부터는 송신기와 수신기가 자동으로 연결됩니다.

코드

송신기 코드와 수신기 코드를 보면 세 번째 포스트에서 설명한 조이스틱으로 조정하는 차체 스케치에서 조이스틱과 관련된 부분은 떼어내어 송신기 코드로 옮기고, 모터 제어와 관련된 부분은 묶어서 수신기 코드로 만들었다는 것을 알 수 있습니다. 송신기는 조이스틱에서 읽은 데이터를 HM-10 모듈로 전송하고, 수신기는 HM-10 모듈에 들어온 데이터를 조이스틱 데이터처럼 처리하는 것만 다르고, 조이스틱 데이터를 처리하는 것이나 모터를 움직이는 코드는 세 번째 포스트에서 사용한 것과 같습니다.

수신기 코드

송신기 코드

실행 결과

블루투스를 이용하여 아두이노로 만든 조정기로 아두이노로 만든 RC 카를 조정하는 데 성공하였습니다! 모터를 움직이는 것, 조이스틱 사용하는 방법과 무선 모듈로 통신하는 방법까지 정말 많은 것을 배울 수 있었습니다. 이것으로 아두이노로 RC카 만들기 프로젝트를 마치겠습니다! 읽어주셔서 감사해요.