티스토리 뷰

혼자서도 잘해요

아두이노 RC카 제작하기


자율주행 RC카를 만들어 보자

<코딩편>




아두이노 자율주행 RC카 제작하기

<준비편>


▼보러가기▼

http://blog.kepco.co.kr/1121




 

지난 기사에서 아두이노 RC카를 제작하기 전 준비할 것들에 대해 소개해드렸습니다. 오늘은 소프트웨어로 코딩해 자율주행 RC카를 완성해보도록 하겠습니다. 스마트폰 블루투스를 RC카에 연결하고, 이를 주행시켜 볼 예정이에요! (다소 어려울 수 있지만 천천히 따라해 봅시다.)


 

1. 모터부 제어하기

 

▲일단은 조립된 RC카...하지만 이제부터 시작입니다.

 

지난 기사에는 RC카를 조립하는 과정까지 진행했습니다. 저는 우선 RC카에 문제가 없었는지 확인해 보았는데요. 아래 동영상의 모니터에 나오는 숫자는 초음파 센서가 장애물과의 거리를 계산해 디스플레이 해주는 값입니다.


 



 





아래에 코딩 파일을 첨부합니다!


▼▼▼


Test.ino



 

위와 같은 코딩을 컴파일(고급언어로 작성된 프로그램을 기계언어로 번역)하여 RC카에 업로드하면 서브모터 및 LED, 모터부 등 전체적인 테스트가 진행됩니다. 하지만 저는 여기에서 큰 문제와 맞닥뜨렸습니다. 한쪽 바퀴 모터의 LED 불이 들어오지 않았던 것이죠. 결론은 모터 쉴드 불량이었는데요. 결선 과정 중에서의 실수로 전선부가 연결되지 않았던 겁니다. 여러분도 결선 과정에서 실수 없도록 주의하세요.


 

▲결선 과정에서 실수가 있어서 고생했습니다.


 

결국 새로운 모터쉴드를 구입했습니다. 다행히 다시 테스트 했을 때는 문제가 발생하지 않았습니다. 그 다음 기본적인 모터 구동을 위해 코딩을 진행했습니다. 먼저 바퀴의 전후진 및 좌우회전에 대한 코딩을 했습니다.











 

다음과 같이 DIRA, PWMA에 핀 번호를 할당하고 방향 조절 및 속도 조절에 필요한 값을 넣었습니다. DIR(X)는 방향 , PWM(X)는 속력이라고 보면 됩니다. digitalWrite(DIRA,LOW)의 경우 DIRA라는 변수에 LOW(0) Digital input을 입력해 초기값을 나타내며 0이므로 뒷 방향을 나타냅니다. 이 값이 1일 경우에 바퀴의 방향이 앞으로 구동이 되게 되는 것이죠. PWM의 값은 analogWrite를 통해 값을 기입해 모터의 속력를 조절하는 역할을 하게 됩니다.


 

2. 케이블을 이용한 Serial remote Test

 

다음은 아두이노 스케치를 이용해 사용자 입력을 RC카가 잘 받아들이는지 확인해 보았습니다. 이 과정은 꼭 필요합니다. 블루투스를 이용한 통신신호가 RC카에 정상적으로 받아들여져야만 스마트폰으로 RC카를 제어할 수 있기 때문입니다.










아래에 코딩 파일을 첨부합니다!


▼▼▼


_05serial_remote_test.ino



 

위와 같이 코딩을 합니다.

 

위의 두 번째 사진과 같이 hello라고 입력하면 Serial 통신창에 hello가 그대로 나타나게 됩니다. 이는 컴퓨터와 RC카가 잘 연결되어 있다는 뜻입니다. 안심하고 다음 코딩을 진행하면 됩니다.

 

이제 Serial 통신을 통해 모터부를 제어해 보겠습니다. 코딩 부분이 상당히 길어서, 핵심만 설명해 보겠습니다. 먼저 enum이라는 상수 집합을 만듭니다. 각각의 상수에는 대응하는 상수가 존재합니다. 예를 들어 enum{GOFORWARD = ‘f’,}; 와 같은 방식을 이용해 통신에서 간단히 ‘f’만 입력하면 GOFORWARD를 불러낼 수 있게 만들 수 있습니다.

 

이제 간단한 문자를 입력하면 중간 input의 상태가 변해 GOFORWARD에 해당하는 함수를 불러오게 됩니다. 이를 통해 RC카는 앞으로운전하게 되죠. 간단한 알고리즘은 위와 같으며, 해당 코딩 부분은 아래 RC_1 파일에 따로 첨부하겠습니다.


 


여기서 팁 하나! RC카는 배터리를 전원으로 삼아 동작하는 것이 아니라 컴퓨터의 통신을 이용해 구동하는 상태입니다모터에 공급되는 전력이 매우 낮은 상태이기 때문에 동영상에서처럼 바퀴가 매우 느리게 동작하거나, 손으로 조작하지 않는 이상 돌아가지 않는 경우도 있습니다



 

이럴 때는 '모터쉴드'와 '모터가 연결돼 있는 부분'을 꼭 살펴봐야 합니다위 사진의 노란색 박스 처리된 부분에 불이 들어와 있으면, 저전력이어도 사용자의 제어에 따라 모터부가 동작되고 있다는 뜻입니다. 모터가 느리게 움직인다고 다시 분해 조립하시는 일 없길 바랍니다.


 

3. 블루투스를 이용해 원격 제어 기능을 추가하자!

  

시리얼 통신을 이용해 RC카에 입력을 넣으면, 출력이 정상적으로 나온다는 걸 확인했습니다. 이제 입력을 한 번 더 변환해 블루투스 기능을 탑재해 보겠습니다. 이 작업은 코딩부분에서 블루투스의 입력을 변환해 기존 코딩에 대입해 주는 작업만 하면 됩니다. 예를 들어 스마트폰에 전진’ 부분을 누르면 블루투스에선 ‘a’라는 신호를 RC카에 보내고, RC카는 이 a를 해석해 ‘b’라는 전진 구동을 진행하게 됩니다. 이 부분의 코딩은 RC카 모터제어 코딩에 몇 가지 구문만 추가하면 가능합니다. 첨부된 RC_1 파일을 참고하시기 바랍니다.





아래 코딩 파일을 첨부합니다!

(전체 완성본)


▼▼▼


RC_1.ino



 

이론상으로는 쉽지만, 사실 저도 이 부분에서 코딩을 이해하는데 다소 시간이 걸렸습니다. 또한 이 기능을 추가하려면 블루투스 센서를 별도 구매해 RC카에 탑재해야 하기 때문에 추가적인 비용이 발생할 수 있습니다.



▲앱을 실행시킨 모습



안드로이드 마켓에서 RC car Bluetooth Controller라는 앱을 검색해 다운받으신 후 실행시킵니다. Settings에 들어가서 RC카와 페어링(블루투스 기기를 연결하여 동작할 수 있도록 하는 과정)하면 간단하게 연결할 수 있습니다. RC_1 파일을 RC카에 컴파일한 후 블루투스와 페어링 하면 다음과 같이 스마트폰으로 조작이 가능한 RC카가 완성됩니다.


 

▲RC카가 혼자 주행 중 중간에 스마트폰으로 조종이 가능합니다.



이렇게 스마트폰으로 조작이 가능한 나만의 RC카를 만들어 보았습니다. 아두이노가 친숙하지 않거나 코딩을 처음 접해 보시는 분들에게는 RC카 제작 기사만으로는 이해가 다소 어렵거나 애매할 지도 모르겠습니다. 아두이노 관련 도서나 웹사이트를 참고하면서 천천히 따라해 보시면 생각보다 빨리 이해할 수 있을 거예요. 혼자서도 충분히 만들 수 있는 나만의 RC, 여러분도 꼭 도전해보세요. 코딩의 재미도 느낄 수 있을 겁니다.



댓글쓰기 폼
  • 2018.01.19 12:01
    ㅎㅎㅎㅎ 잘했네오 신준철군
  • 아직도겨울 2018.01.22 09:23
    요즘은 초등학생도 코딩을 배운다고 하던데.. 저는 너무 어렵네요.ㅠㅠ
  • 형근 2018.01.23 12:57
    집에 가서 한번 시도해 봐야겠네요
  • ㅇㅇ 2019.07.31 13:49
    결론은 자율주행을 하는게 아니고 블루투스통신으로 제어하는 RC카인가요?

한국전력 블로그 굿모닝 KEPCO!