프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

움직이는 자동차 1

2015-12-13 00:36:35

Bluno Nano 라는 보드로 처음 만들어 본 자동차입니다.
RC 카라고 하기엔 너무나 허접하지만, DC 모터제어와 BLE 통신을 시험해 보기 위해서 만들었습니다.

바퀴, 본체, DC 모터(2개) 등은 Smart car Chassis 를 구매하면 되고, 타미야에서 파는 버기카 샤시를 구입해도 됩니다.
가격은 만원에서 2만원 정도면 충분할 것 같구요...

 

<기본 동작 확인>

 

DC 모터

DC 모터 제어를 위해서는 https://learn.adafruit.com/assets/2346 에 방문하면 됩니다.
기본 원리는 PWM 으로 0에서 255까지 값을 보내면, 해당 값에 맞도록 DC motor RPM 을 조절하는 것입니다.
좌,우 두개 DC 모터를 제어해야 하므로, Transistor, diode, 저항을 두 개씩 해서 연결하면 됩니다.

Bluno Nano (BLE + 아두이노)

http://www.dfrobot.com/index.php?route=product/product&product_id=1122#.VmwyPdWLSM8
위 사이트에서 구매도 가능하지만, 국내에서도 구매가 가능합니다. Nano 타입이나 microUSB 가 있는 것은 아주 훌륭합니다.

Bluno Nano 는 BLE 통신을 Serial 포트로 하면 됩니다. (오렌지 BLE 와는 다른데, 그냥 Serial 을 쓰면 됩니다)
사이트에서 제공하는 예제는 아래와 같습니다. 아두이노 Serail monitor 에서 글자를 입력하고 엔터를 치면 바로 루프백 되는 예입니다.

void setup() {
  Serial.begin(115200);  //initial the Serial
}

void loop() {
  if (Serial.available())  {
    Serial.write(Serial.read());//send what has been received
    Serial.println();   //print line feed character
  }
}

 

안드로이드 코드는 https://github.com/DFRobot/BlunoBasicDemo 에서 소스코드를 받으셔도 되고,
그 안에 있는 apk 를 직접 설치해도 됩니다. (소스코드는 Android Studio 용으로 되어있지 않지만,
Android Studio 에서도 소스파일을 잘 갖다가 넣으면 잘 동작합니다.)
기타 iOS 용도 있으니 아이폰 개발자들은 참고하시면 될 듯 합니다.

 

<부품 리스트>

 

NO PART QTY ETC
1 Bluno nano 1 http://www.dfrobot.com/
2 미니 브레드 보드 2  
3 Smart Car Chassis 1 Banggood 또는 aliexpress 에서 구입
4 배터리 1  
5 PN2222 Transistor 2  
6 1N4001 diode 2  
7 270 옴 저항 2  

 

 

<아두이노 코드>

 

왼쪽 모터 PWM 핀을 5번 오른쪽은 9번으로 설정했습니다.
안드로이드에서는 L l R r 을 보내서 좌우 모터의 속력을 조절합니다.
DC 모터가 PWM 값에 따라 리니어하게 변하진 않지만, 일단 +10, -10 으로 설정해 보았습니다.

 

 

int motorPin1 = 5;
int motorPin2 = 9;
 
void setup()
{
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  Serial.begin(115200);
}
 
int speedLeft = 0;
int speedRight = 0;
 
void loop() {
  if (Serial.available())
  {
    int val = Serial.read();
    if (val == 'L') {
      inc(&speedLeft);
      analogWrite(motorPin1, speedLeft);
    }
    else if (val == 'l') {
      dec(&speedLeft);
      analogWrite(motorPin1, speedLeft);
    }
    else if (val == 'R') {
      inc(&speedRight);
      analogWrite(motorPin2, speedRight);
    }
    else if (val == 'r') {
      dec(&speedRight);
      analogWrite(motorPin2, speedRight);
    }
    printBuf(speedLeft, speedRight);
  }
}
 
void inc(int *speed) {
  if (*speed < 250)
    *speed += 10;
}
 
void dec(int *speed) {
  if (*speed > 0 )
    *speed -= 10;
}
 
void printBuf(int s1, int s2) {
    char buf[10];
    Serial.write(itoa(s1, buf, 10));
    Serial.write(",");
    Serial.write(itoa(s2, buf, 10));
    Serial.write(" ");
}

 

기본적인 UI 는 Bluno Basic Demo 와 동일하며, Left RIght speed up down 버튼만 추가하였습니다.안드로이드 쪽 화면입니다.
좌 우 현재 스피드를 알려주는 레이블도 추가하였습니다.

   

 

 

<문제점>

 

 

같은 PWM 값에 따라 DC모터 2개 속도가 일정하지 않습니다.
이와 같은 이유로 좌 우 방향 전환을 하려고 하는데 잘 되지 않습니다.
바퀴 동기화는 크랭크를 이용해서 하나의 모터로 하는 것이 아닌가 생각됩니다.

방향 전환은 서보 모터로 해야 하는데, 기구적인 설계를 먼저 해야할 것 같군요... :)

 

강두진