반응형

오늘 소개드릴 내용은 간단한 내용인데요.

아두이노 아날로그 핀을 이용하여 스텝모터 28BYJ-48 을 돌려보도록 하겠습니다.

보통은 디지털 핀을 이용하여 스텝모터를 돌리는 예제로 나와 있기 때문에 아날로그 핀을 이용하여 돌리는 방법이 궁금하신 분들이 계실 것 같아 포스팅을 하게 되었습니다.

 

준비물

  • 아두이노 나노 (또는 우노)
  • 28BYJ-48 stepper motor (5V)
  • ULN2003 stepper moter driver
  • 점퍼선 6개 (male --> female)

 

스텝모터는 아두이노 나노의 핀으로 직접 구동하기는 어렵습니다. 대부분의 모터가 사용하는 전력량이 아두이노의 핀의 출력 전류를 초과하기 때문에 직접 연결하시면 아두이노 보드가 망가질 수 있습니다. 그래서 드라이버를 사용하는데요. 보통 모터 드라이버에는 모터에 직접 전류를 인가할 전원을 연결하게 되어있고 2선, 또는 4선으로 신호를 보내 모터의 구동 방향이나 속도, 회전수 또는 각도 등을 입력하게 되죠. 오늘 사용할 ULN2003 의 경우 28BYJ-48 모터와 함께 판매하는 경우가 많으므로 모터와 함께 구입하시는 것이 좋겠습니다.

 

배선연결

연결은 아래와 같이 하시면 됩니다. 좌측은 아두이노, 우측은 ULN2003 드라이버라고 생각하시면 됩니다.

  • A2 - IN1
  • A3 - IN2
  • A4 - IN3
  • A5 - IN4
  • 5V - 5V
  • GND - GND

직접 제작한 무선 아두이노와 연결된 모습

네 테스트 삼아 아두이노의 5V 전원을 바로 드라이버에 인가하였는데 문제 없이 잘 동작하는 것을 확인하였습니다. 나중에 문제가 되는지 테스트를 더 해본 뒤 문제가 된다면 변경하도록 해야할것 같아요.

 

코딩해보자.

해당 모터와 드라이버를 구동하기 위하여 별도의 라이브러리는 필요하지 않습니다. 아두이노에 기본 내장된 stepper 라이브러리를 사용하면 됩니다. 

28BYJ-48 모터는 2048 스텝이 한바퀴로 이루어져 있습니다. 스텝모터를 사용하는 가장 중요한 이유가 정밀한 회전 제어이기 때문에 한바퀴가 몇 스텝으로 이루어져 있는지를 아는 것이 중요합니다.

아두이노 아날로그 핀을 이용하여 간단하게 1초마다 한바퀴씩 돌리는 코드를 작성하면 아래와 같습니다.

#include <Stepper.h>

const int stepsPerRevolution = 64; 
Stepper myStepper(stepsPerRevolution, A5,A3,A4,A2); // 순서가 중요함

void setup() {
  //아날로그 핀을 이용하여 스텝 모터를 돌려본다.
  pinMode(A3, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, OUTPUT);
  pinMode(A5, OUTPUT);  
  myStepper.setSpeed(400);
}

void loop() {

  myStepper.step(2048); 

  delay(1000); 
}

간단하죠? 디지털핀을 이용하여 동작하는것과 다르지 않습니다. 아날로그 핀을 OUTPUT 으로 설정하여 디지털핀처럼 사용하겠다는 선언을 setup 에서 한번 해주면 됩니다.

참고로 A6, A7 은 아날로그 전용 핀이므로 위와 같이 설정해도 디지털핀으로 동작하지 않습니다.

1초마다 한바퀴씩 돌리기로 하였으므로 delay 를 넣어주었고, 한바퀴가 2048 스텝이라고 말씀 드렸으므로 위와 같이 2048 스텝을 돌려주시면 한바퀴씩 돌아갑니다. 만약 반대 방향으로 돌리고 싶으시면 -2048 과 같이 음수값을 넣어 주시면 되고요.

 

만약 3D 프린터 등에 사용하기 위하여 Lead screw 등을 연결할 경우 한바퀴가 2mm 를 이동하는 Lead screw 를 구입하셨다면 아래와 같이 거리만큼 스텝수를 나누어 이동시킬 수 있습니다.

한바퀴가 2mm 이므로 1mm 는 1024 스텝이 되겠죠.

//lead screw 의 스펙이 한바퀴당 2mm 를 이동하는 경우

int stepMM = 2048 / 2; // 2mm 가 한바퀴 이므로 기준 거리인 1mm 에 대한 스텝수 정의
float moveDistance_mm = 0;

// 1mm 를 이동한느 경우
myStepper.step(stepMM);

// 3mm 를 이동하는 경우
moveDistance_mm = 3;
myStepper.step(stepMM * moveDistance_mm);

// 0.1mm 를 이동하는 경우
moveDistance_mm = 0.1;
myStepper.step(stepMM * moveDistance_mm);

// 반대방향으로 10mm 이동해야 하는 경우
moveDistance_mm = -10;
myStepper.step(stepMM * moveDistance_mm);

역시 간단합니다. 이렇게 하면 1mm 를 이동하든, 0.3mm 를 이동하든 원하는 거리만큼 이동할 수 있게 됩니다.

만약 한바퀴에 8mm 를 이동하는 lead screw 를 구입하셨다면 맨 위의 stepMM 을 8로 나누어 주면 끝 입니다.

이해되시나요? 

 

네. 오늘은 이만 마치도록 하겠습니다. 궁금하신 내용은 뎃글로 문의 주시면 감사하겠습니다.

 

2019.06.01 - [DIY/Arduino] - 아두이노를 이용한 RC 카 만들기 1

 

아두이노를 이용한 RC 카 만들기 1

아도이노는 DIY 인 들에게 없어서는 안될 단물 같은 장치이다. 물론 요즘은 프로그래밍 교육용으로도 사용되고 미디어 아티스트들에게도 자주 사용되는 놀라운 장치이다. 간단한 코딩 만으로 하

diy-dev-design.tistory.com

2020.10.14 - [DIY] - DIY 상식 - 전기/전자에 대하여 알아보자 01

 

DIY 상식 - 전기/전자에 대하여 알아보자 01

나는 전기, 전자는 문외한이라서 DIY 는 힘들겠지. DC 는 뭐고 AC 는 도대체 뭐람? 전기는 무서워. 전압, 전류, 저항! 이런 생각들로 인해 DIY 를 하더라도 목공이나 수예와 같이 분야를 한정하는 경

diy-dev-design.tistory.com

2020.10.28 - [DIY/Arduino] - 아두이노로 아이방 스탠드 개조하기 - 자동 꺼짐 기능

 

아두이노로 아이방 스탠드 개조하기 - 자동 꺼짐 기능

아이가 유치원에서 너무나 예쁜 스탠드를 만들어 왔습니다.. AAA 건전지가 들어가는 예쁜 스탠드. 스텐드 옆면에 예쁘게 그림을 그려서 본인이 자는 방에 가져다 두고는 "오늘부터 얘가 나를 지

diy-dev-design.tistory.com

 

반응형

+ Recent posts