April 28, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[41호]프릭스봇 Freaks Bot 만능 메인보드 Review

Cap 2017-05-30 17-03-15-395

프릭스봇 Freaks Bot 만능 메인보드 Review

글 | 금강초롱 blog.naver.com/crucian2k3

나만의 독창적인 선풍기를 하나 만들어 보고픈 꿈이 있다고 가정해 봅니다. 단순화시켜서 생각해 보면 모터에 날개만 달면 바람을 일으키는 무언가는 쉽게 만들 수 있을 것 같습니다. 좀 더 그럴싸한 물건으로 탄생되기를 원한다면 리모컨으로 바람의 세기나 방향을 조절하는 기능을 넣을 수도 있을 것입니다.

이번엔 생각을 조금 더 확장시켜 간혹 선풍기에 아이들이 손가락이나 연필 같은 것을 집어넣어 다치거나 하는 등 사고가 나기도 하는데, 이런 문제를 극복해 보기위해 바람이 나오는 것은 충실하되 날개를 본체 아래에 살짝 감춰 봅니다. 이 정도면 모터에 바람개비가 붙어 있는 단순한 선풍기에 비해 꽤나 진보적인 선풍기가 될 것입니다.

그렇습니다. 이미 나와 있는 기술들을 결합하고 자신만의 독창성을 부여시킨다면 좀 더 이색적이고 인류생활에 보탬을 줄 수 있는 그런 물건이 만들어 질 수 있을 것입니다. 어찌보면 인류의 삶 그 자체가 이러한 노력의 과정이자 진행형일 수도 있겠다고 생각해 봅니다. 오늘 소개해 드리는 프릭스봇은 움직이는 뭔가를 조종해 보는데 필요한 어지간한 것들을 몽땅 쑤셔 넣은 마치 ‘스위스 밀리터리 나이프’ 같은 보드라고 봅니다.

Cap 2017-05-30 13-07-26-615

사실 아두이노 우노 보드 한장 달랑 들고는 무엇인가를 해보려 할 때 상당한 실망감을 느낄 수도 있습니다. 이는 베이스가 되는 보드 그 이상도 이하도 아니기에 좀 더 그럴싸한 실험을 해보고자 한다면 필연적으로 쉴드 보드를 필요로 합니다.

일전에 필자는 2휠 밸런싱 로봇을 만들기 위해 ‘아두이노 M0’ + ‘스테빌라이저 쉴드’ + ‘블루투스 모듈’을 결합하여 시도해 본 일이 있었습니다. 스테빌라이저 쉴드 보드는 DC 모터 드라이브 회로와 MPU6050 등 6축 자세제어용 칩이 부가된 보드로 상당한 기능집약이 이뤄진 보드에 속합니다. 이렇듯 아무리 사용하기 편리한 아두이노 보드라 하더라도 뭔가를 제작해 보려 하면 쉴드보드를 겹겹이 쌓거나 포트에 주렁주렁 매달아야 하는 것은 자명합니다. 오늘 소개코자 하는 프릭스봇(FreaksBot) 메인보드는 상당히 여러 가지의 센서류, 입출력 장치들을 내장하고 있어 마음먹은 바를 매우 빠르게 실현할 수 있도록 지원을 해주고 있습니다. Freaks를 한국말로 뭐라고 해야 할지 궁리하다가 ‘만능’이라는 이름을 붙여 봤습니다만 다소간의 어색함을 느낍니다.
이번 리뷰는 (주)엔티렉스의 지원을 받아 작성하게 되었습니다.

1. 개봉기
프릭스봇을 제작한 ElecFreaks사가 어떤 곳인지 궁금하여 홈페이지를 둘러보았습니다. 중국판 실리콘밸리라고도 일컷는 심천에 소재한 회사로 여러 가지 측면에서 상당히 흥미로움을 주는 곳 같습니다. 우선 홈페이지(http://www.elecfreaks.com)가 다소 독특하여 리사이즈를 하면 일반홈페이지 스타일로 보여주나 화면사이즈를 변경하면 모바일이나 테블릿에서 볼 때도 어색치 않은 타입으로 자동변형이 일어나도록 만들어져 있는 것을 알 수 있습니다.

Cap 2017-05-30 13-07-42-316

이것이 뭐 그리 대단한 기술은 아니지만 소소한 부분까지 사용자를 배려해 놓은 세심함에 대해서는 좋은 점수를 주고 싶습니다.
이 회사는 우리나라 같으면 벤처회사 같은 곳으로 보여지며 자신들을 오픈 디자인 하우스라고 부릅니다. 신속한 프로토타이핑 제품을 개발해 주거나 소량 다품종을 제조하는 일을 한다고 하니 벤처회사들을 지원하는 더 세분화된 벤처회사 같은 인상을 줍니다. 암튼 고리타분, 군살, 비대한 조직 등과는 거리가 먼 특성 있는 곳으로 보여지는 회사답게 회사이름도 Freak(~쟁이, ~꾼)라는 단어를 사용하였고 이

회사에서 발매중인 대표적인 제품중 하나인 이 보드가 아래와 같이 마치 붕어빵봉지를 연상시키는 봉지에 덩그러니 담겨져 있음을 알 수 있습니다.
홈페이지에 올려진 제품 홍보자료도 마치 건빵포대에 인쇄를 한 듯한 형태로써 회사이름에서부터 설명 자료까지 모든 것이 파격의 연속인 그런 회사의 제품입니다.
보드는 4개의 바퀴를 가진 제품과 어울리는 형상을 갖고 있습니다. 일부러 보드사이즈를 키워 다루기 편하도록 디자인 한 것으로 보여집니다.

Cap 2017-05-30 13-07-55-899

Cap 2017-05-30 13-08-04-916

2. 특징과 용도
일반적으로 아두이노 기반으로 4바퀴를 독립적으로 제어하고자 하는 목적에 최적화된 보드임을 금방 알 수 있습니다.
4바퀴를 독립적으로 제어할 수 있으므로 옴니휠을 사용해 자동차의 조향을 회전속도와 방향 컨트롤을 통해 제어할 수 있으며, 꽃게처럼 옆으로 이동하는 차량로봇도 손쉽게 만들어 볼 수 있습니다. 또한, 4개의 독립된 모터를 제어하는 것이 가능하므로 잘 응용하면 쿼드콥터 같은 비행물체도 어렵지 않게 제작이 가능할 것으로 생각됩니다.

Cap 2017-05-30 13-10-20-882

3. 제품 스펙 살펴보기

41 sr 추가05
보드 레이아웃 : http://www.elecfreaks.com/wiki/index.php?title=FreaksBot

Cap 2017-05-30 13-10-36-318

4. 회로 살펴보기

4.1. USB to Serial 부문

오리지널 아두이노 메가 2560에서는 ATmega16U2를 사용하여 컴퓨터와 인터페이싱을 한 후 재차 ATmega2560과 TTL로 연결되는 방식으로 설계가 되어 있습니다만, 프릭스 봇에서는 매우 독특한 방식으로 이 부분을 처리한 것을 알 수 있습니다.

한마디로 1타2피 전법을 사용하고 있는데요, 바로 블루투스 4.0을 커버하는 TI의 CC2540 칩셋에게 USB to Serial 기능까지 부여시킨 것입니다. 이는 최소의 비용으로 최대효과를 내려하는 노력의 산물이 아닌가 합니다. 회로상으로는 블루투스를 통한 업로드도 충분히 가능할 것으로 보입니다.

41 sr 추가06

4.2. LED 주변부

A15에 WS2812 2개를 직렬로 연결하여 상태를 표시를 할 수 있도록 설계를 해 놓았습니다. 이는 RGB로 표현될 수 있으므로 재미있는 상태표시가 가능할 것으로 보입니다. U6은 EEPROM으로 생각됩니다만, 품번 식별이 어렵습니다.

41 sr 추가07

4.3. 전원부

전형적인 Step-down형 전원부 회로이며 외부 입력전원은 VIN으로써 최소 7V는 되어야 안정적으로 5V 생성이 가능합니다. 전원 효율성과 큰 돌입 전류, 노이즈 등이 우려되는바 이러한 상황에서도 안정적으로 전원을 공급하기위해 노력한 흔적들이 보입니다.
USB-B 커넥트를 통해 인입되는 5V와 외부전원에 의해 인가되는 5V 사이에서 안정적인 전원 공급을 위해 컴퍼레이터와 MOSFET을 사용하여 일단 VIN, 즉 외부전원이 우선시 되도록 설계가 되어 있음을 알 수 있습니다.

41 sr 추가08

4.4. 모션센서부

모션센서는 너무도 유명한 MPU6050칩을 사용하고 있습니다.
D21/SCL과 D20/SDA핀을 이용하여 자이로센서와 가속도센서 정보를 얻어오게 됩니다. (ADDR : 0×68, AD0 : Low)
경험에 의하면 이러한 모션센서는 가능한 한 바퀴축과 수평을 이루는 지점에 설치하여야 가장 안정된 신호를 입수할 수 있었습니다.
프릭스봇은 사이즈 특성상 최하단부에 Base로 배치함이 바람직해 보입니다.

41 sr 추가09

4.5. 모터제어부
TB6612칩은 DC모터 2개를 동시에 컨트롤할 수 있습니다.
VIN은 최대 15V까지 받을 수 있으나, 12V이내에서 동작시킬 것을 권장합니다. 출력전류는 평균 1.2A까지 흘릴 수 있으며 피크전류는 최대 3.2A입니다. 외부에서 인가되는 전원을 PWM 신호에 의해 드라이빙하는 회로로 통상 모터드라이버라고 부릅니다.

41 sr 추가10

5. 보드 활용 실전
이 제품은 초심자를 위한 제품으로는 보여지지 않는바, 예제 역시도 아두이노 개발환경에 대해 어느 정도의 이해는 갖추고 있다는 전제하에 어떻게 쓸지는 전적으로 개인이 알아서 할 것을 암시하는 듯하게 리소스페이지가 만들어져 있습니다.
ELECFreaks사에서 예제로 3가지 형태를 제시하고 있으며 각각의 프로그램을 설치해보고 화면상으로 테스트가 가능한 부분에 대해서는 하는데까지 접해 보고자 합니다.

5.1. 메카넘차량
이 데모는 메카넘이라고 하는 독특한 형상의 바퀴를 장착한 후 4바퀴의 방향을 적절히 통제함으로써 전진, 후진, 좌, 우, 동북, 북서, 남서, 남동, 시계 방향 및 반 시계 방향으로 차량을 이동 시킬 수 있게 됩니다.
곁들여 자이로센서와 가속도센서를 이용하거나 블루투스 앱으로 차량을 제어할 수도 있을 것으로 봅니다.

41 sr 추가11

■ 테스트코드 돌려보기
우선 아래 주소에서 zip 파일을 다운받은 후 아두이노 IDE가 설치된 폴더의 libraries 폴더에 복사해 넣습니다.

http://www.elecfreaks.com/estore/download/FreaksMeca_SourceCode.zip

41 sr 추가12

디렉토리의 *.c, *.h파일이 서로 종속적인 관계에 있으므로 위 폴더중 하나라도 누락되면 에러를 일으키게 됩니다.

Cap 2017-05-30 13-11-18-549

일단 위와 같은 실험을 해보기 위해서는 매카넘 휠세트가 필요하나 여러 여건상 어려움이 있어 다른 예제인 2휠 균형제어 로봇을 실험해 보기로 합니다.

이 메카넘 데모는 4바퀴의 회전방향을 통제함으로써 전진, 후진뿐만 아니라 좌우 양방향으로도 이동이 되는 재미나는 이동체를 만들어 볼 수 있습니다.

5.2. 2휠 균형제어로봇
흔히 밸런싱 로봇이라고도 부르며, 최근의 드론이 출현하기 전까지만 하더라도 많은 전자공학도들에게 호기심을 불러 일으키는 주제 중 하나였습니다.
균형제어 로봇은 세그웨이라는 제품명으로 유명한 두 바퀴로 균형도 잡고 방향도 전환하는 이동수단의 일종이라고 볼 수 있겠습니다.
프릭스봇 메인보드에는 균형제어로봇을 실험해 보는데 필요한 센서, 구동부를 모두 포함하고 있기에 외부에 모터와 전원부만 연결하면 금방 테스트가 가능합니다.

5.2.1. 프레임 등 기구부 준비
기구부는 전자실험을 진행할 때 늘상 고민거리를 안겨주는 대표적인 부분에 해당합니다.
필자는 디바이스마트에서 발매하는 「Self-Balancing Car Starter Kit」를 구입하여 바퀴, 모터, 프레임 등 기본적인 요소를 완성할 수 있었습니다. 이 키트의 핵심은 DC모터라고 생각합니다.

Cap 2017-05-30 13-12-52-981

이 키트에 포함된 JGA25-26CPR DC모터는 DC12V가 정격입력전압이며 1:34의 감속기어가 들어가 있습니다.
무부하 시 126RPM이 나오나 실험을 해본 결과 너무 감속비가 크다는 사실을 확인하여 좀 더 낮은 감속비를 가진 모터를 물색하였습니다.
이렇게 물색하여 마땅한 모터를 발견하였습니다.
이전 모터와 변경한 모터의 스펙을 비교해 보면 아래와 같습니다.

Cap 2017-05-30 13-13-00-830

■ 변경한 모터외관

이 스펙 비교표에서 눈여겨 볼 부분이 기어감속비와 무부하 회전속도입니다. 이는 얼마나 빠릿하게 균형을 잡을 수 있는가와 직결된 부분으로 반응속도가 빠르면 빠를수록 균형을 잡는데 유리합니다. 너무 감속비가 작으면 힘이 없게 됩니다.
아래 사진은 프레임에 프릿스봇 메인보드를 안착한 것입니다.

Cap 2017-05-30 13-13-09-366
M3커넥터를 좌측편모터로 연결하고 M2커넥터를 우측편모터로 연결하면 됩니다.
아래는 모터와 프릭스봇 메인보드간을 연결하는 케이블 결선도입니다.

Cap 2017-05-30 13-13-19-813

3번 핀과 5번 핀에서는 홀센서 출력이 나오며 각 펄스의 상승엣지와 하강엣지를 모두 사용할 때 최고의 각도 분해능을 얻게 됩니다.

41 sr 추가16

엔코더는 1회전당 48Count가 얻어지고 기어비가 20.1이 되므로 48*21 = 979.2개의 펄스가 얻어지게 됩니다. 다음으로 배터리를 수납할 받침대를 보드 위쪽에 위치시킵니다.
할 수만 있다면 배터리를 무게중심이 낮은 곳에 배치하는 것이 좋다고 봅니다.

41 sr 추가17

배터리 팩은 18650타입의 2600mAh 리튬폴리머배터리 3개를 직렬로 연결하여 3.7v*3 = 11.1V 전원공급기를 만들었습니다.
배터리 극성 단자에 스폿용접이 되어 있는 배터리를 사용하면 매우 쉽게 배터리 팩을 만들 수 있습니다. 프릭스봇 VIN단자로 외부전원을 공급할 예정이므로 3.5mm DC 아답터잭을 연결해 두었습니다.

41 sr 추가18

이렇게 하여 조립된 완성본의 외관입니다.
원본 소스코드에 단 한 줄도 변경을 가하지 않았는데도 바로 균형을 잡아냅니다.
필자도 사실은 잘 동작이 될 것인지 반신반의 하였습니다만 밸런싱로봇 예제프로그램과 pololu사 20.4:1 Metal Gear motor가 궁합이 잘 맞은 것 같습니다.

41 sr 추가20

5.2.2. 프로그램
개발환경은 Microsoft Visual Studio상에서 vMicro라고 하는 아두이노 개발환경을 이용하였습니다. 여러개의 파일이 복잡하게 엮이는 프로젝트인 경우 아두이노 오리지널 개발환경은 불편하기 짝이 없습니다.
아래와 같은 환경을 만드는 방법은 필자의 블로그에 올려져 있으므로 참고 바랍니다.

41 sr 프릭스봇 (8)

프릭스봇 밸런싱로봇 프로그램은 크게 3개의 *.ino 파일로 구성되어 있습니다.
여러개의 ino 파일을 한 디렉토리에 모아놓고 컴파일하면 자동으로 소스통합 컴파일이 일어납니다.

■ 파일목록

Cap 2017-05-30 13-18-51-031

■ BlancdCar.ino

/***************************************************************
*
* FREAKS BOT MAIN 보드를 활용한 균형제어로봇
*
****************************************************************
* ProjectName: BlanceCAR
*
* Dependencies: Arduino1.6.9
*
* Processor: ATmega2560
*
****************************************************************/
#include <avr/io.h>
#include <EEPROM.h>
#include “config.h”
#include “def.h”
#include “ElecfreaksCar.h”

static uint32_t currentTime = 0;
static uint16_t previousTime = 0;

// us(마이크로초) 단위의 숫자로 루프시간을 의미하며 PID측 루틴에서 조절됨
static uint16_t cycleTime = 0;
// 캘리브레이션은 메인루프쪽에서 수행되며 매싸이클마다 0으로 내려가면서 보정이 이뤄짐
uint16_t calibratingA = 0;
uint16_t calibratingG = 0;

// 1G 가속도 측정모드
static uint16_t acc_1G;

static uint16_t acc_25deg;
static int16_t gyroADC[3],accADC[3],accSmooth[3],magADC[3];
int16_t heading; // [-180;+180] static uint16_t i2c_errors_count = 0;
static ElecfreaksCar elecfreaksCar;
USE_LED;

static struct {
uint8_t currentSet;
int16_t accZero[3];
int16_t magZero[3];
uint8_t checksum; // MUST BE ON LAST POSITION OF STRUCTURE !
} global_conf;

uint8_t SMALL_ANGLES_25 = 0;
uint8_t CALIBRATE_MAG = 0;
int16_t angleTrim[2]={30, 0};

// **************
// gyro+acc IMU
// **************
int16_t gyroData[3] = {0,0,0};
int16_t gyroZero[3] = {0,0,0};
int16_t angle[2] = {0,0}; // absolute angle inclination in multiple of 0.1 degree 180 deg = 1800

void setup() {
Serial.begin(115200);
// pinMode(13, OUTPUT);
// LED_OFF;
initSensors();
previousTime = micros();

// this speeds up analogRead without loosing too much resolution:
// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11
ADCSRA |= _BV(ADPS2);
ADCSRA &= ~_BV(ADPS1);
ADCSRA &= ~_BV(ADPS0);

int val = 0;
for(int i=0; i<sizeof(global_conf); i++){
val = EEPROM.read(i);
*(((uint8_t *)&global_conf)+i) = (uint8_t)val;
}
}

// ******** Main Loop *********
void loop () {
static uint32_t rcTime = 0;
// static unsigned char rcBuf[64];

// uint16_t rcLen = 0;
// if((rcLen = Serial.available()) > 0){
// Serial.readBytes(rcBuf, rcLen);
// elecfreaksCar.recievedData(rcBuf, rcLen);
// }
if (currentTime > rcTime ) { // 50Hz
rcTime = currentTime + 20000;
} else { // not in rc loop
static uint8_t taskOrder=0; // never call all functions in the same loop, to avoid high delay spikes

if(taskOrder>4) taskOrder-=5;

switch (taskOrder) {
case 0:
taskOrder++;
#if MAG
if (Mag_getADC()) break; // max 350 (HMC5883) // only break when we actually did something
#endif
case 1:
taskOrder++;
#if BARO
if (Baro_update() != 0 ) break;
#endif
case 2:
taskOrder++;
case 3:
taskOrder++;
case 4:
taskOrder++;
#if SONAR
Sonar_update();
#endif
break;
}

//Serial.println(taskOrder); //debug
}

computeIMU();
// Measure loop rate just afer reading the sensors
currentTime = micros();
cycleTime = currentTime – previousTime;
previousTime = currentTime;

// 매3초마다 방향정보를 반영한다.
if(currentTime > 3000 && currentTime < 3100){
elecfreaksCar.setHeading(heading);
}

elecfreaksCar.balance((float)cycleTime/1000.0f);
}

6. 총평
이번에 소개한 프릭스봇 메인보드는 4개의 모터를 구동시키는 장치를 제작하는데 매우 적합토록 만들어진 제품임에 부족함이 없을 듯합니다. 원격제어에 유용하게 적용할 수 있도록 블루투스 모듈과 적외선 수신센서까지 실장된 것을 보면 고심한 흔적이 역력합니다.

아쉬움이라고 한다면 첫 번째로 기술문서가 충분히 지원이 되지 않고 있는 점입니다. 제조사의 공식 홈페이지, 위키싸이트 어느 곳에서도 메인보드에 대한 자세한 설명을 찾기가 힘들었습니다.
두 번째로는 튜토리얼이 매우 부족하다는 점입니다.

보드상의 Fullcolor LED, 스피커, 적외선 센서, 블루투스 모듈 등 여러 디바이스들에 대해서 확인해 볼 수 있는 API를 제공하고 이를 통해 진단기능을 수행하는 등의 예제 정도는 충분히 제공도 할 것 같습니다만 2017. 3월초 현재 이러한 정보는 찾을 수가 없습니다. 아마도 출시된 지 얼마 되지 않은 제품임에 따라 아직 충분한 자료를 제공하고 있지 않은 것으로 여겨지며 약간의 시간이 지나면 다양한 예제들이 제시될 것으로 예상해 봅니다.

그러함에도 매우 간편하게 모터로 구동되는 제어장치를 완성할 수 있기에 프로토타이핑 성격의 RC카에 도전코자 한다면 충분히 가치있는 선택이 된다고 봅니다.
이번 리뷰를 작성하며 예제가 충분치 않아 원제조사 측에 도움까지 청해가며 작성을 해보기도 하였고 덩그러니 보드만 설명하자니 아무래도 아쉬움이 많아 실제로 동작되는 2휠 밸런싱로봇까지 제작을 해봤습니다.

원격조정로봇이나 밸런싱로봇 등에 관심이 있는 독자라면 프릿스봇 메인보드는 한번쯤 다뤄 볼 만한 괜찮은 아이템이 아닌가 여겨지며 특히, 학생들을 위한 2휠 균형로봇 제작실험 목적으로 상당히 유용성이 돋보이는 제품이라고 생각해봅니다.
감사합니다.

■ 참고자료
1. 프릭스봇 공식 홈페이지
http://www.elecfreaks.com/estore/freaksbot.html

2. 프릭스봇 위키페이지(기술문서제공)
http://www.elecfreaks.com/wiki/index.php?title=FreaksBot

3. 2휠 균형로봇 관련 예제파일
http://www.elecfreaks.com/wiki/index.php?title=FreaksRobo_-_EN

4. 셀프 밸런싱카 스터터 킷 발매사
http://www.devicemart.co.kr/1272033

5. Pololu DC Motor 홈페이지
https://www.pololu.com/product/3215

 

 

38 sr 금강초롱 (33)

 

 

 

 

 

Leave A Comment

*