정보나눔

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

서보모터 제어 질문이요!!!
jessi | 2015-11-18

안녕하세요~ 블루투스로 조종하는 서보모터 제어에 대해 궁금한 것이 있습니다.

제가 원하는 서보모터 제어는

예를 들어, 오른쪽 버튼을 누를때마다 10도씩 계속 움직이는 제어를 하고 싶습니다.

보통 인터넷에 오픈되어 있는 소스는 블루투스 통해 주어지는 값에 지정된 각도로 모터가 움직인 뒤 더이상 움직이지가 않더라고요....

제가 원하는 제어를 하기 위해서는 어떤 식으로 코딩을 하여야 할까요??

아래는 코코아팹에서 본 서보모터 제어 소스 입니다.

 

#include  <SoftwareSerial.h>
#include  <Servo.h>

SoftwareSerial BTSerial(6, 7);
byte buffer[1024];
int bufferPosition;

Servo servo;

int motorAngle = 0;
int servoVal = 0;
int servoAngle = 90;

void setup () {
  servo.attach(10);

  BTSerial.begin(9600);
  Serial.begin(9600);
  bufferPosition = 0;
}

void loop () {
  if (BTSerial.available()) {
    byte data = BTSerial.read();
    buffer[bufferPosition++] = data;

    Serial.println(data);


    switch(data){     
    case '1':
      angleWrite(45);
      break;

    case '2':
      angleWrite(180);
      break;

    case '\n':
      bufferPosition = 0;
      break;
    }
  }
}

void angleSet(boolean flag){
  if(buffer[0] != 10){
    if (bufferPosition == 4) {
      motorAngle = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48);
    }
    else if (bufferPosition == 3) {
      motorAngle = (buffer[0]-48)*10 + (buffer[1]-48);
    }
    else if (bufferPosition == 2) {
      motorAngle = buffer[0] - 48;
    }

    if(flag){
      motorAngle *= -1;
    }

    Serial.print("motorAngle = ");
    Serial.println(motorAngle);

    motorAngle = map(motorAngle, 150, -150, 30, 150);
    servo.write(motorAngle);
  }
}

void angleWrite(int angle){
  servo.write(angle);
}

프로필사진

제트기류 2015-11-18 23:07:09

void loop문 안에 case 로 1일 경우 45도, 2일 경우 180도로 angleWrite 되어있는걸 

변수를 하나 새로 선언해서 조건문 빠질 때 마다 변수 += 10; 해주시면 됩니다. 

프로필사진

수박쨈 2015-11-19 09:16:19

위 소스에서는 

servo.write(motorAngle); 이 명령문안의 motorAngle의 값이 서보모터의 각도입니다.

motorAngle이라는 값의 변화에 따라 서보모터의 각도가 변하게 되는데

 

여기서 오른쪽 버튼이 눌릴때마다 10씩 각도가 증가하게 하고 싶다면

아래와 같이 짜면 될 거 같네요.

if(오른쪽 버튼이 눌렸을 경우) {

  motorAngle += 10;

  servo.write(motorAngle);

}

이전글   |    밑에 DC랑 서보모터 블루투스로 조정하려고 글올렸었는데요... 2015-11-18
다음글   |    아두이노 블루투스 앱인벤터 센서값 송수신 코드 질문드립니다!... 2015-11-19