카테고리 없음

아두이노 활용 무선 조이스틱 만들기

abc0123 2017. 12. 10. 01:05
반응형

 

얼마 전부터 사물인터넷에 관심이 생기면서 '아두이노'를 갖고 놀기 시작했고... 각종 센서 및 액추에이터를 제어하는 예제를 만들어보면서 이 블로그에 정리를 했었다. 그리고 RC카와 RC 탱크 등을 블루투스로 연결해서 제어를 해봤는데 이제부터는 특정한& 대상에 각종 센서를 붙일 수 있는 만큼 하나씩 더해보려고 한다.

 

일단 DC 모터 두 개로 움직이는 작은 장난감 자동차를 대상으로 해볼 생각인데 조이스틱과 자동차를 RF 무선 통신으로 연결해서 제어하는 기본 과정부터 만들어보고 그 위에 올릴 수 있는 센서들은 다 올려서 업그레이드하는 방식으로 진행을 해보려고 한다.

 

무선자동차 준비물

 

▲ 먼저 오늘은 무선 컨트롤 기능만 만들어 보기로 하고 준비물을 살펴보자면 예전에 만들어서 블루투스로 제어를 했던 (RC카)인데 모터가 앞뒤로 붙어 있어서 전, 후, 좌, 우 모든 방향으로 제어가 가능한 녀석이며 가격은 1만 원을 주고 구입했었다. ㅎㅎ 구입할 때부터 아주 작은 조종기로 무선조종이 가능한 녀석이었지만 기존 부품들을 모두 제거하고 아두이노를 올려서 갖고 놀았는데 이 녀석을 이용해보기로 한다.

 

 

그리고 RF 통신을 위한 송수신 모듈 두 개는 개당 1,200원씩 줬다. 똑같은 것 두 개만 있으면 한쪽에서 데이터를 보내고 다른 쪽에서는 그 값을 받아서 사용할 수 있는데 가격도 상당히 저렴하며 장애물이 없다면 200미터 이상 통신이 가능하다고 하니 나중에 기회가 되면 야외에서 최대한 멀리 제어를 해봐야겠다.

 

중간에 있는 빨간 장치는 소형 모터 드라이버이다. 그리고 하프 사이즈의 빵 판 두 개 위에 아두이노 나노를 각각 올린 후 한쪽에는 조이스틱을 붙였다.

 

그런데 아쉽게도 조이스틱이 한 개밖에 없는 관계로 일단은 이거 하나로 모든 방향을 제어해볼 생각인데 뭔가 엉성하면 버튼 두 개를 따로 연결해서 앞. 뒤나 좌. 우 방향을 각각 담당하게 하면 될듯싶기도 하다. 일단 그 부분은 나중에 상황 봐서 진행하기로 하고 조이스틱부터 만들어보자.

 

조이스틱

 

▲ 이거 만드는 방법은 바로 앞글(조이스틱)에서 정리를 했으니 그 과정은 생략하기로 하고.... 시리얼 통신을 해서 값이 제대로 들어오는지 확인해보자.

 

시리얼 데이터

 

▲ 조이스틱의 방향에 다라서 X 값과 Y 값이 제대로 들어온다. 이 역시 지난 글에서 정리했던 내용이니까 이렇게 넘어가고 다음은 자동차의 본체에 아두이노와 RF 송수신 모듈 그리고 모터 드라이버를 가각 붙여서 연결을 해보자.

 

 

자동차 조립

 

▲ 앞에서 탱크에 연결했던 것처럼 RF 송수신 모듈과 모터 드라이버를 이용해서 두 개의 모터를 제어할 수 있도록 연결을 했다. 그리고 탱크에 사용했던 소스 코드를 모터 방향만 수정한 후 업로드해서 테스트를 해봤는데 조이스틱이 하나이다 보니 예상했던 것처럼 몇 가지 문제점이 발견된다.ㅠ.ㅠ

 

RF통신 모듈

 

일단 전진과 후진은 별문제가 없다. 그런데 좌, 우로 방향을 틀 때는 다른 조이스틱이 따로 없기 때문에 전진과 후진을 담당하는 뒤쪽 모터를 계속 돌리면서 추가로 방향을 조절하는 모터도 함께 돌도록 했다.

 

그랬더니 전진하면서 오른쪽, 왼쪽 방향으로는 잘 간다. 하지만 후진할 때는 방향 전환이 안되는 것이다. (무슨 소린지는 아래 영상에서 확인할 수 있음.^^;) 결국 방향을 전환하는 모터는 따로 제어를 해야할 거 같은데 조이스틱이 없으니 다음 글에서 버튼을 두 개 추가해서 제어해볼 계획이다.

 

그리고 또 하나의 문제점은 이 녀석이 멈추질 않는다. ㅎㅎ 소스 코드를 자세히 보면 어디에도 멈추도록 하는 코드가 없기 때문인데 역시 초보 티가 팍팍 난다. ㅎ....;; 그래서 다음과 같이 코드를 추가해줬다.

 

코드 수정

 

▲ 이처럼 조이스틱의 방향에 따라서 각각의 값을 전달하고 그 설정한 범위 내에 없을 때는 'STOP'라는 데이터를 전달하도록 했다. 즉, 조이스틱의 방향이 가운데쯤에 있을 때는 멈추도록 한 것이고 자동차 쪽에서도 이 값을 받도록 다음과 같이 수정했다.

 

 

데이터 받기

 

▲ 코드를 수정한 후 다시 업로드해서 테스트를 해본다.

 

 

▲ 코드를 수정했더니 영상처럼 조이스틱 방향이 앞, 뒤, 좌, 우로 완전히 꺾였을 때만 모터가 회전하고 그렇지 않으면 멈추는 걸 확인할 수 있다. 또 좌, 우로 방향을 틀면 전진하는 뒷바퀴 모터도 하께 돌면서 움직이는데... 앞으로 가면서는 어찌어찌 방향을 틀어본다고 해도 뒤쪽으로 이동하면서는 방향을 틀 수가 없다. ㅎㅎ

 

물론 조이스틱을 대각선 방향으로 꺾었을 때 전달되는 x, y 값을 이용해서 후진하면서도 방향을 틀 수는 있겠지만 항상 뒤쪽 바퀴가 동시에 돌면서 방향을 전환해야 하기 때문에 회전반경이 상당히 넓어진다. 실제 운전할 때처럼 바퀴의 방향을 먼저 최대한 돌려놓고 움직이면 그만큼 회전 반경이 작아질 텐데 뒷바퀴가 움직이면서 방향을 틀기 때문에 회전 반경이 클 수밖에 없다. 여하튼 조이스틱에서는 하나의 모터만 담당하고 버튼 두 개를 연결해서 다른 하나의 모터를 제어해보면 해결이 될 것 같기도 하니 다음 글에서 그 과정을 정리해보기로 하고 오늘은 여기서 마무리한다.

반응형