'Stepper.h'는 아두이노에서 스태핑모터를 다룰때 기본적으로 사용하는 라이브러리입니다.

 

예전부터 뭔가 이상하다 했는데.....

'Stepper.h'의 '.step()'를 호출하면 모터의 동작이 끝나기전에 다음 코드가 동작하지 않는다는 것을 느꼈습니다.

 

 

1. 테스트 해보기

테스트는 간단합니다.

'.step()'의 앞뒤로 LED를 끄고 켜 봅시다.

 

결선은 이전에 썼던 'ULN2004'을 이용한 스텝모터 구성에 led만 추가 합니다.

(참고 : [Arduino] ULN2004(ULN2003)칩을 이용한 스테핑 모터(stepping motor) 제어)

 

코드는 다음과 같이 심플하게 만듭니다.

 

#include <Stepper.h>

#define LED 13

Stepper stepper(200, 8, 9, 10, 11);


void setup()
{
  Serial.begin(9600);
  stepper.setSpeed(30);
  
  pinMode(LED, OUTPUT);
}

void loop()
{
  if (Serial.available())
  {
    Serial.read();
    digitalWrite(LED, HIGH);
    stepper.step(200);
    digitalWrite(LED, LOW);
    
  }
}

 

 

단순히 코드만 보면 신호만 들어오면 LED는 켜졌는지도 모르게 꺼저야 합니다.

하지만...

 

 

잘 보시면 아시겠지만 LED가 모터 동작이 끝나기 전에는 꺼지지 않습니다.

 

2. 이런 동작의 이유

이거 이유를 모르고 별생각 없이 해결방법을 찾으려는데 딱히 나오는 자료도 없고-_-;;;

그래서 'Stepper.h'와 'Stepper.cpp'를 열어 봤더니....

 

 

아....이런.....

코드를 보니 '.step()'가 동작하는 중에는 'while()'문 안에 들어가 있기 때문에 '.step()'가 동작을 끝내기전에는 다음 코드가 실행되지 않는 것이 정상이라는 것입니다 ㅡ,.ㅡ;;;;

 

그렇다는 것은 'Stepper.h'로는 한번에 2개의 모터를 제어한다거나 다른 동작을 할 수 없다는 것이죠.

실제로 값을 출력하거나 아날로그값을 읽어오거나 하는 동작도 안된다는 것입니다.

 

2-1. 왜 이런 구조가 되었나?

이건 아두이노의 문제라고 해야하나....

이유는 모르겠는데 아두이노는 '쓰레드(Thread)'를 지원 하지 않습니다.

 

그렇기 때문에 별도의 컨트롤러를 이용하여 'loop()'안에서 호출하는 구조를 같지 않으면 라이브러리 자체가 별도로 'loop()'와 같은 역활을 할수 없습니다.

이것은 약간 변태적인 구조라고 할수 있습니다.

하지만 자체적으로 멀티쓰레드를 지원하지 않는 아두이노에서는 어쩔수 없는 선택이죠-_-;;

(유저들이 구현한 쓰레드는 있습니다. 이건 다른 포스트에서 소개하도록 하죠 ㅎㅎ)

 

 

3. 해결방법은 없는가?

 

제가 검색어를 잘못 잡은 건지 충분히 있을 만한 내용인데.....

못찾았습니다 ㅡ.-;;;;;

 

해결방법은 'Stepper.h'를 직접 구현하고 'loop()'에서 새로만든 라이브러리를 호출하여 'while()'문 역활을 해주게 만들면 됩니다.

참~~암 쉽조잉?

그런데 'loop()'는 다른 요소에 의해 딜래이가 생길수 있기 때문에 'Stepper.h'를 그냥 사용하면 동작에 문제가 있을 수 있기는 합니다.

(부드럽게 돌아가지 않는다거나 원하는 스탭만큼 안웁직일 수 있습니다.)

 

이것을 구현하는 것은 다음 포스트를 확인 하세요.

(참고 : [Arduino] 한번에 2개이상의 스테핑 모터를 제어하기)

 

마무리

아무리 제가 검색어를 잘못잡았어도 이렇게 까지 자료가 없는건 이상하네요-_-;;

 

아두이노 포럼 - How to drive two steppers at a same time, two steppers with arduino

답변도 별볼일 없죠-_-;

 

조만간 코드 만들어서 올리도록 하겠습니다 ㅎㅎㅎ

 

 

 

 

  1. Awake 2016.07.12 14:44 신고  Address  Edit/Delete  Reply

    신기하네요

  2. ㅇㅇ 2017.12.27 09:11 신고  Address  Edit/Delete  Reply

    저의 경우는 step을 1씩 주면서 동시 제어 했습니다 ㅋㅋㅋㅋ

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바