정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

블루투스 연결 이전의 제어방법에대해서..
민창식 | 2018-06-05

드론과 자동차를 융합하는 로봇을 만들고 있습니다.

 

보드는 opencm9.04를 이용해 제작중에 있는데,

 

블루투스를 이용해 제어하고 있습니다.

 

블루투스와 통신이 끊겨 있는 상태에서 전원(14V)이 인가되면

 

코드 안의 일부 명령이 동작하는 현상이 계속 발생됩니다.

 

블루투스와 연결되 있는 상태에서 전원(14V)을 인가할때엔 정상적으로 제어가 됩니다.

 

뭐가 문제인지 이러한 현상을 뭐라 부르는지 알수 있을까요?

 

2,3번핀에는 bldc가 연결되어있습니다. 파워 서플라이를 이용해 테스트할 때엔 안전하지만,

 

베터리를 연결하고 스위치를 키는 과정에서 이러한 일이 발생해 너무 위험할 뻔한 일들이 있어

 

글 남깁니다 ㅠ

 


#define DXL_BUS_SERIAL1 1  //Dynamixel on Serial1(USART1)  <-OpenCM9.04
#define DXL_BUS_SERIAL2 2  //Dynamixel on Serial2(USART2)  <-LN101,BT210
#define DXL_BUS_SERIAL3 3  //Dynamixel on Serial3(USART3)  <-OpenCM 485EXP
/* Dynamixel ID defines */
#define ID_1 1
#define ID_2 2


int mode = 0;
Dynamixel Dxl(DXL_BUS_SERIAL1);

void setup() {
  Serial2.begin(115200);
  Serial2.println("ChangSik, good job!");
  pinMode(BOARD_LED_PIN, OUTPUT);
  //Dynamixel 2.0 Baudrate -> 0: 9600, 1: 57600, 2: 115200, 3: 1Mbps
  Dxl.begin(3);
  Dxl.jointMode(ID_1); //jointMode() is to use position mode
  Dxl.jointMode(ID_2); //jointMode() is to use position mode
  pinMode(2, PWM);
  pinMode(3, PWM);
  Dxl.setPosition(ID_1,2048,300); 
  Dxl.setPosition(ID_2,2048,300);
  delay(500);
  analogWrite(2, 0);
  analogWrite(3, 0);
}

/***********************************************************/
//ID_1 : 0    1000   2000   3000   4000
//             back   up    front  down
//ID_2 : 0    1000   2000   3000   4000
//            front   up    back  down  

 

 

/***********************************************************/
void DY_UP(void)
{
  Dxl.setPosition(ID_1,2048,300); 
  Dxl.setPosition(ID_2,2048,300);
  delay(500);
}
void DY_DOWN(void)
{
  Dxl.setPosition(ID_1,4095,300);
  Dxl.setPosition(ID_2,1,300);
  delay(500);
}
void DY_FORWARD(void)
{
  Dxl.setPosition(ID_1,4095-1024,300);
  Dxl.setPosition(ID_2,1+1024,300);
  delay(500);
}
void DY_BACK(void)
{
  Dxl.setPosition(ID_1,4095-3072,300);
  Dxl.setPosition(ID_2,1+3072,300);
  delay(500);
}
void DY_STOPALL(void)
{
  Dxl.setPosition(ID_1,1024,300);
  Dxl.setPosition(ID_2,3072,300);
  delay(500);
}
void DY_TURN_ON_BLDC(void)
{
  if (mode==1)
  {
    analogWrite(3, 60000);
    analogWrite(2, 0);
  }
}
void DY_TURN_OFF_BLDC(void)
{
 
  analogWrite(2, 0);
  analogWrite(3, 0);
}
/*********************************************************/
//ID_1 : 0    1000   2000   3000   4000
//             back   up    front  down
//ID_2 : 0    1000   2000   3000   4000
//            front   up    back  down  
void DY_TEST0(void)
{
  Dxl.setPosition(ID_1,4095,300);
  Dxl.setPosition(ID_2,1,300);
  delay(500);
}
void DY_TEST1(void)
{
  Dxl.setPosition(ID_1,4095-100,300);
  Dxl.setPosition(ID_2,1+100,300);
  delay(500);
}
void DY_TEST2(void)
{
  Dxl.setPosition(ID_1,4095-200,300);
  Dxl.setPosition(ID_2,1+200,300);
  delay(500);
}
void DY_TEST3(void)
{
  Dxl.setPosition(ID_1,4095-300,300);
  Dxl.setPosition(ID_2,1+300,300);
  delay(500);
}
void DY_TEST4(void)
{
  Dxl.setPosition(ID_1,4095-400,300);
  Dxl.setPosition(ID_2,1+400,300);
  delay(500);
}
void DY_TEST5(void)
{
  Dxl.setPosition(ID_1,4095-500,300);
  Dxl.setPosition(ID_2,1+500,300);
  delay(500);
}
void DY_TEST6(void)
{
  Dxl.setPosition(ID_1,4095-600,300);
  Dxl.setPosition(ID_2,1+600,300);
  delay(500);
}
void DY_TEST7(void)
{
  Dxl.setPosition(ID_1,4095-700,300);
  Dxl.setPosition(ID_2,1+700,300);
  delay(500);
}
void DY_TEST8(void)
{
  Dxl.setPosition(ID_1,4095-800,300);
  Dxl.setPosition(ID_2,1+800,300);
  delay(500);
}
void ALL_STOP(void)
{
  Dxl.setPosition(ID_1,2048,300);
  Dxl.setPosition(ID_2,2048,300);
  analogWrite(3, 0);
  analogWrite(2, 0);
}
void loop() {
  char ch;
  if(Serial2.available())  {
    ch = Serial2.read();
    switch(ch) {
      case('f'):
      Serial2.println("Forward-");
      DY_FORWARD();
      break;
      case('s'):
      Serial2.println("Down-");
      DY_DOWN();
      break;
      case('u'):
      Serial2.println("Up-");
      DY_UP();
      break;
      case('b'):
      Serial2.println("Back-");
      DY_BACK();
      break;
      case('1'):
      Serial2.println("TEST1-");
      DY_TEST0();
      break;
      case('2'):
      Serial2.println("TEST2-");
      DY_TEST1();
      break;
      case('3'):
      Serial2.println("TEST3-");
      DY_TEST2();
      break;
      case('4'):
      Serial2.println("TEST4-");
      DY_TEST3();
      break;
      case('5'):
      Serial2.println("TEST5-");
      DY_TEST4();
      break;
      case('6'):
      Serial2.println("TEST6-");
      DY_TEST5();
      break;
      case('7'):
      Serial2.println("TEST7-");
      DY_TEST6();
      break;
      case('8'):
      Serial2.println("TEST8-");
      DY_TEST7();
      break;
      case('D'):
      Serial2.println("TEST6-");
      DY_TEST5();
      break;
      case('W'):
      Serial2.println("Turn On BLDC !!-");
      mode=1;
      DY_TURN_ON_BLDC();
      break;
      case('w'):
      Serial2.println("Tturn Off BLDC !!-");
      mode=0;
      DY_TURN_OFF_BLDC();
      break;
    default: 
      ALL_STOP(); 
      break;
    }
  }
}

 

 

이전글   |    LED 스트립을 이용한 조명을 만들려고 합니다.... 2018-06-04
다음글   |    무게센서 로드셀 HX711 - 1kg 관련 문의 2018-06-05