정보나눔

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

서보모터 속도 관련 질문이 있습니다.
최장우 | 2018-07-04

1. 프로젝트 사용한 보드 종류

아두이노 UNO

 

2. 사용한 개발 프로그램명

아두이노 IDE

 

3. 사용한 모터 모델명

 SG-90

 

4. 연결한 회로 설명 (또는 이미지)

아두이노에 3,4,5 핀에 각각 서보모터의 핀을 연결해주고

전원은 외부전원을 따로 주고 있습니다. (아두이노와 그라운드 통일은 해주었습니다.)

 

 

5. 소스코드 (주석 필수)

 

#include<Servo.h> // 모터 헤더
Servo myservo1; //모터 선언
Servo myservo2; //모터 선언
Servo myservo3; //모터 선언

void setup() {
  myservo1.attach(3); // 모터에 각각의 핀 선언
  myservo2.attach(4);
  myservo3.attach(5);
}

void loop() {
  for (int i = 0; i < 160; i++) {
    myservo2.write(i);
    delay(15); // 속도제어로 알고있습니다.
    myservo3.write(i);
    delay(15);
  }

  
  for (int i = 160; i > 0; i--) {
    myservo2.write(i);
    delay(15);
    myservo3.write(i);
    delay(15);
  }
}

 

 

 

6. 문제점 및 에러 내용

 

for구문안의 delay()로 속도를 조절한다 알고있습니다. 서보모터로 부드러운 움직임을 만들고자 하고 있으며, 한개의 서보모터가 아닌 여러개의 서보모터를 쓰는 상황에서 자연스러운 움직임을 위해 각각의 서보모터가 서로 다른 속도로 움직였으면 합니다. 위와 같이 쓰게 될 경우 모터 회전각도의 값을 변환하더라도 모터가 결국 기다렸다가 같이 시작됩니다.

 

동시에 여러 서보모터가 다른 속도로 움직이려 한다면 어떻게 하면 좋을지 조언을 구해봅니다.

혹시 참고할만한 예가 있을까요? 잘 부탁드리겠습니다.

프로필사진

수박쨈 2018-07-09 17:10:25

아두이노의 경우 싱글쓰레드로 동작하기 때문에 쉽지 않습니다.

 

그렇기 때문에 free RTOS나 타이머를 이용한 편법이 있습니다.

 

아마 예제에 digital - withoutDelay를 참조하면 방법을 대충 이해하실 수 있으실텐데 그 부분을 구글에서 참고하는 편이 빠를듯 합니다.

 

간단한 코딩으로는 쉽게 구현되지 않을거 같아요.

프로필사진

최장우 2018-07-17 20:02:44

답변해주셔서 감사합니다. 

해당 부분에 대해서는 말씀해주신 부분 처럼

타이머를 이용한 방법으로 해결했습니다. 감사합니다 :-)

이전글   |    nodemcu wifi설정하는 방법좀 알려주세요. 2018-07-02
다음글   |    자물쇠 제어 및 단선 경보 2018-07-06