아두이노 오픈소스 밸런싱 로봇의 시스템 구성
아두이노 코딩이 익숙해짐에 따라 재미있는 프로젝트를 진행해보자. RC카와 드론이 있을 수 있는데 드론의 난이도가 훨씬 높은 편이다. RC카도 여러 종류가 있지만 처음 도전 단계에서는 DC 모터와 Adafruit 모터 쉴드를 이용한 RC카가 제격이다. 자체 코딩만으로 알아서 전진 멈춤 좌우회전을 하는 간단한 모델이 있을 수 있고 여기에다 블루투스 보드를 추가하게 되면 앱인벤터 코딩에 의해 스마트폰에서 키를 눌러 무선 조종이 가능해진다. 스마트폰 조종용 코드는 Play 스토어에서 다운받아 사용할 수도 있지만 아무래도 앱인벤터를 직접 배워 스스로 코딩해야 할 것이다. 키보드 터치에 의한 무선 조종도 가능하지만 음성인식에 의한 무선 조종까지도 가능하다. 하지만 DC 모터 RC카 모델은 모터에 감속기를 사용하지 않음으로 인해 속도가 생각보다 빨라 잦은 충돌이 일어난다.
그런 단점을 개선하기 위해서 DC 모터 대신 스테퍼 모터를 사용한 RC카 모델 제작을 추진해 보기로 한다. 스테퍼 모터는 아두이노 CNC 나 3D 프린터에서 구동모터로 사용되는 정밀한 모터로서 RC카를 구현할 정도의 토크와 회전을 제공하며 모터의 회전 각 위치를 정밀하게 제어할 수 있는 특징이 있다.
아울러 RC카에서 최고의 기술력이 요구되는 작품이 바로 밸런싱 로봇이다. 즉 수평으로 늬워 있던 차체를 직립으로 세운 후 차체의 상부 무게로 불안정한 상태에서 제어를 통해 안정을 유지하면서 주행하는 재미있는 차량이 바로 밸런싱 로봇이다.
인터넷에 밸런싱 로봇에 관한 오픈소스들이 많이 널려 있으나 여기서는 Brokking의 오픈 소스를 주목하기로 한다. Brokking 오픈소스 중의 아두이노 드론 AL 모델을 직접 리모델링 해 평가해 본 결과 뛰어난 궐리티를 보여주었다. 아울러 Brokking 유튜브 동영상 및 홈페이지의 오픈소스 정보를 참조해 보면 드론 외에 CNC 시제작을 거쳐 밸런싱 로봇을 소개하고 있어 많은 흥미를 끌고 있다. 특히 밸런싱 로봇은 아두이노 드론 AL 모델의 코드 내용의 많은 부분을 참조하고 있다.
아두이노 드론 리모델링 제작에서도 그랬지만 오픈소스가 있다고 해도 그대로 따라 하기란 정말 용이하지 않다. 아무리 인터넷 구매가 발달했다고 해도 당장 검색해보면 가격 문제에서부터 조달까지 리드 타임 문제라든지 넘어야 할 장애가 산처럼 많다는 것을 알게 된다.
1 Brokking의 밸런싱 로봇 구성
지난번의 밸런싱 로봇 골판지 차체 공작에 이어 시스템 제작을 진행해 보자.
아래는 브로킹의 벨런싱 로봇 사진과 필요한 구성품들이다. 브로킹 홈페이지에 각 부품들에 대한 구매 정보까지 상세하게 하이퍼 링크로 처리되어 있으나 일부 부품들에 한해서는 가격 문제를 포함하여 국내에서 구매가 용이하지 않은 부품들이 있다.
Brokking의 오픈소스에 따른 밸런싱 로봇을 어떻게 만들어 볼 것인지 첫 구상부터 제작 및 성능 시험까지 단계별로 알아보자. 사진은 왼쪽에 완성품 모양과 오른 쪽은 Brokking의 배선도에서 배선을 지우고 부품만 남겨 두었다.
각 부품의 기능에 대해서 알아보기로 하자.
⓵ 레귤레이터: 전원 보드로서 드론용 3셀 리튬폴리머전지의 DC전압 12.6V를 받아들여 DC5V 전압을 생성 아두이노 보드에 공급한다. 아두이노 우노보드에는 DC 어댑터 잭이 있지만 Brokking은 레귤레이터가 배제된 아두이노 프로 미니 보드를 사용하기 때문에 별도로 레귤레이터 보드가 필요하다.
⓶ 블루투스 보드: 2.4G Wireless Serial Transparent Transceiver Module for Arduino 로 명명된 이 보드는 뭔가하고 곰곰이 따져보니 블루투스 보드를 의미하는 것으로 파악했다.
그 증거로 Brokking 의 코드를 보니 Serial.available() 과 Serial.read()를 사용하는 점으로 미루어 보아 HC-06을 사용하는 블루투스로 변경이 가능해 보인다. 코드를 분석해 보니 4개의 if 제어문이 나오는 바 아마도 전진 후진 좌회전 우회전으로 추측된다. 따라서 보유하고 있는 HC-06을 사용할 계획이다.
⓷MPU 6050 보드는 자이로와 가속도센서를 모두 포함한다. 자이로 센서란 X,Y,Z 3축을 회전축으로 한 각속도 측정이 가능하며 동시에 X,Y,Z 3축 방향으로 선형 가속도 측정이 가능하다. 이미 블로그에 MPU 6050 센서 사용법을 여러 번 포스팅했으며 이번 제작에서는 드론용으로 제작했던 아두이노 우노 쉴드형 PCB가 있어 약간의 배선을 줄이기 위해 사용해 보았다. 유니버셜 아두이노 PCB를 구매해서 I2C 및 전원 배선을 하면 배선이 많이 줄어든다.
⓸아두이노 프로 미니 보드: 5V 16MHz 번전과 3.3V 8MHz 버전이 있는데 Brokking은 코드 실행 속도를 감안하여 클럭 속도가 2배 빠른 5V 버전을 사용한다고 본다. 그런데 사이트에 아두이노 보드 인식과 관련된 FTDI 보드 얘기는 있는데 배선도에서는 마이크로 USB 커넥터가 보이질 않아 이상(weird)하다. 하지만 아두이노 우노 보드로 대체하여 사용할 예정이므로 별 문제는 없다.
⓹⓺ 스테퍼 모터 드라이버는 Geeetech StepStick DRV8825 Stepper Motor Driver Carrier - Black 모델을 사용한다. 듀티 입력을 주어 스테퍼 모터의 아마츄어를 일정한 각도가지 회전시키는 역할을 하며 다소 전류가 많이 흐르는 듯 방열판도 붙일 정도다.
⓻⓼ 스테퍼 모터는 Brokking 자신이 NEMA 14 대각선 길이 35mm 로 설계하였으나 물건을 구하지 못해 NEMA 17 대각선 길이 42mm 로 변경하였다고 하는데 국내에서도 구매 사정이 마찬가지이다.
⓽ 리튬 폴리머 배터리 20C 1500mA 드론용으로 사용하던 것을 잠시 빌려 쓰기로 하였으며 차체 위에 얹어 보니 차체 폭 사이즈에 딱 맞는다. 무게감이 있어 불안정성 발생해야 밸런싱 로봇 제어하는 의미가 있을 것이다.
⓾ 리튬 폴리머 배터리 충전기는 아주 저가용도 있으나 아무래도 빨리 충전해서 드론 날리려면 급속 충전이 가능한 IMAX 제품이 사용해 보니 괜찮았다. 1.5A 충전 전류면 1시간 30분 충전전류 2A면 30분에 충전이 완료되는데 빨리할수록 수명이 줄어들 가능성이 있다.
처음 검토해야 할 사항은 회로 배선도 구성 검토와 리드 타임 이내에 단연 적정가격의 부품 구매 조달 가능성이다. 아울러 오픈소스인 코드도 검토해야 하나 Brokking의 코딩 능력이 워낙 출중한 관계로 사소한 수정을 제외하고는 그대로 사용해야 한다. 하지만 회로 검토 결과와 부품 조달 가능성 문제를 감안하여 Brokking 의 밸런싱 로봇 알고리듬에 전혀 손상을 가하지 않는 범위 내에서 사용 부품 수 축소 및 아주 간단한 방법으로 차체 제작 과정의 아이디어를 제공하고자 한다.
아직 시작하기 전에 Brokking 이 보여주는 PCB 납땜을 참조해 보자.
앞면은 깨끗한 편이고 뒷면도 깨끗하기는 하지만 배선 가닥수가 상당히 많아 심리적으로 엄두를 내기가 어렵다. 즉 납땜 배선을 많이 줄일 수 있고 드론을 충분히 다루어 보아 리튬폴리머 배터리의 안전한 사용이 능숙하면 그다지 문제 될 게 없어 보인다.
Brokking의 밸런싱 로봇을 커스터마이즈 하자
밸런싱 로봇 블루투스 무선 조종을 감안하면 아두이노에서 가장 많이 사용되는 HC-06 과 앱 인벤터 코딩과는 다소 거리가 있어 이 점을 감안하여 브로킹의 오픈소스가 손상되지 않는 범위 내에서 부품수도 줄일 겸 다소 변경이 이루어졌다.
소형이면서 값이 싼 아두이노 프로미니 대신 아두이노 우노를 사용하기로 한다. 우노 사용시 장점은 FTDI 보드, 레귤레이터 보드가 필요 없으며 유니버셜 아두이노PCB 보드를 사용하여 쉴드를 제작하기가 쉽다. 쉴드를 사용하면 납땜 전기배선 양을 줄일 수 있다.
Brokking 이 사용했던 2.4 GHz wireless serial transparent tranceiver modeule for Arduio 보드는 블루투스 보드인데 그다지 익숙치 않은 보드이므로 주변에서 흔하게 구할 수 있는 HC-06 블루투스 보드를 사용하기로 한다.
아울러 Brokking 은 밸런싱 로봇을 제어하기 위해서 Wii Nunchuck을 tranceiver module과 아두이노 우노를 결합하여 사용하는데 이 부분을 HC-06 과 스마트폰을 사용하여 해결하기로 한다. 적용해본 결과 loop()에서 Serial.begin(57600) 한 줄을 // 코멘트 처리하면 통신속도 baudrate이 9600으로 맞춰진다.
다음 번에 쉴드 PCB 디자인 및 제작 결과를 올릴 예정이며 앱인벤터 코드도 별도로 올리도록 할 계획이다.