아두이노용 양극성 스테퍼 모터 종합 라이브러리
부품 및 소모품
| 부품 |
수량 |
| 아두이노 우노 (Arduino UNO) |
1 |
| TI L293D 듀얼 H-브리지 모터 드라이버 |
1 |
앱 및 온라인 서비스
프로젝트 개요
기존 단극성(Unipolar) 스테퍼 모터 라이브러리에 이어, 양극성(Bipolar) 스테퍼 모터 전용 라이브러리를 개발했습니다. 산업용 모션 컨트롤 요구사항을 반영해 9가지 핵심 기능을 제공합니다.
라이브러리 주요 기능
- 모든 양극성 스테퍼 모터 제어 가능
- 회전 방향 제어 (CW/CCW)
- 회전 수 정밀 제어 (1, 2, 3... 회전)
- RPM 단위 속도 제어 (95% 정확도)
- 목표 각도 회전 (0-360°, 80-100% 정확도)
- 모든 아두이노 보드 호환
라이브러리 함수 설명
| 함수 |
설명 |
bi_polar_Stepper(pin1, pin2, pin3, pin4) |
모터 드라이버 핀으로 인스턴스 생성 |
set_step_per_rev(steps) |
1회전당 스텝 수 설정 (스텝 각도/해상도) |
set_RPM(rpm) |
모터 속도 RPM 설정 (95% 정확도) |
rotate_CW() |
시계 방향 연속 회전 시작 |
rotate_CCW() |
반시계 방향 연속 회전 시작 |
rotate(dir) |
방향 지정 회전 (1=CW, 0=CCW) |
rotate_one_rev(dir) |
지정 방향으로 정확히 1회전 |
rotate_n_rev(dir, num) |
지정 방향으로 n회전 |
rotate_x_deg(deg) |
지정 각도(0-360°) 회전 |
사용 예제
예제 1: 60 RPM으로 연속 회전
#include
#define steps 200 // 모터 사양에 맞게 변경 (1.8° = 200 steps/rev)
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 60;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
Serial.println("motor rotates clockwise");
}
void loop() {
my_step_motor.rotate_CW();
}
예제 2: 30 RPM으로 1회전 CW, 1회전 CCW 반복
#include
#define steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
}
void loop() {
Serial.println("motor rotates clockwise");
my_step_motor.rotate_one_rev(1);
delay(1000);
Serial.println("motor rotates anti-clockwise");
my_step_motor.rotate_one_rev(0);
delay(1000);
}
예제 3: 가변 속도/회전 수 제어
#include
#define steps 200
bi_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup() {
Serial.begin(9600);
Serial.println("Bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(steps);
}
void loop() {
my_step_motor.set_RPM(100);
for(i=0; i<100; i++) my_step_motor.rotate(1); // CW
delay(2000);
my_step_motor.set_RPM(50);
for(i=0; i<100; i++) my_step_motor.rotate(0); // CCW
delay(2000);
}
예제 4: 4회전 CW(20 RPM) → 2회전 CCW(10 RPM)
void loop() {
my_step_motor.set_RPM(20);
my_step_motor.rotate_n_rev(1, 4); // CW 4회전
delay(2000);
my_step_motor.set_RPM(10);
my_step_motor.rotate_n_rev(0, 2); // CCW 2회전
delay(2000);
}
예제 5: 90° 왕복 운동 (30 RPM)
#include
#define motor_steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(motor_steps);
my_step_motor.set_RPM(rpm);
Serial.println("motor rotates 90 deg back and forth");
}
void loop() {
my_step_motor.rotate_x_deg(90); // 90° CW
delay(2000);
my_step_motor.rotate_x_deg(270); // 90° CCW (상대적)
delay(2000);
}
회로도
고전압/대전류 모터의 경우 L293D 대신 L298 칩이나 TIP122/TIP142 같은 다를링턴 트랜지스터 4개 조합으로 드라이버 구성 가능.
테스트된 모터 사양
- 2상 양극성 모터, 5V, 최대 100 RPM, 200 steps/rev (1.8°)
- 2상 양극성 모터, 5V, 최대 60 RPM, 200 steps/rev (1.8°)
라이브러리 설치
bi_polar_Stepper 폴더를 아두이노 라이브러리 폴더(예: C:\arduino-1.6.7\libraries)에 복사하면 사용 가능.