스텝모터 (Step Motor)#
- 펄스 모양의 전압에 의해 일정 각도(스텝 수) 만큼 회전하는 모터.
- 회전 각도는 입력 펄스 신호의 수에 비례하고, 회전 속도는 입력 펄스 신호의 주파수에 비례한다.
스텝모터 28BYJ-48#

- 정격전압: 5VDC 
- 기어비: 1/64 

- 스트라이드 각도- 스펙상 5.625º / 64 = 0.087890625- 그러므로, 360º / 0.087890625 = 4096 스텝
 
- 실제로는 11.25º / 64 = 0.17578125- 그러므로, 360º / 0.17578125 = 2048 스텝으로 1회전 (이 값이 중요함!)
 
 
- 스펙상 5.625º / 64 = 0.087890625
- Frequency: 100Hz
- 토크: 34.3mN,m
모터드라이브 ULN2003#

schematic#

Pin Map#
| 모터드라이브 | 아두이노 | 
|---|---|
| INT1 | 11 | 
| INT2 | 10 | 
| INT3 | 9 | 
| INT4 | 8 | 
| GND | GND | 
| VCC | 5V | 
sketch: 예제1#
#include <Stepper.h>
// 2048:한바퀴(360도), 1024:반바퀴(180도)...
// datasheet를 통해 스트라이드 각도를 계산한 값을 사용
const int stepsPerRevolution = 2048;
// 모터 드라이브에 연결된 핀 IN1, IN3, IN2, IN4
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
void setup() {
  myStepper.setSpeed(14); 
}
void loop() {
  // 시계 반대 방향으로 한바퀴 회전
  myStepper.step(stepsPerRevolution);
  delay(500);
  // 시계 방향으로 한바퀴 회전
  myStepper.step(-stepsPerRevolution);
  delay(500);
}- Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);- 모터 드라이브에 연결되는 순서에 유의한다! (IN1, IN3, IN2, IN4 순서임!)
 
- myStepper.setSpeed(14);- 아두이노 보드의 5V 전원 사용시 16이 최대값.
- 16 이상은 안정적으로 회전이 안되며, 17을 넣으면 한바퀴 돌고 정지. 18을 넣으면 돌지 않음
 
sketch: 예제2#
#include <Stepper.h>
// 2048:한바퀴(360도), 1024:반바퀴(180도), 64:11.25도
const int stepsPerRevolution = 64;
// 모터 드라이브에 연결된 핀 IN1, IN3, IN2, IN4
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
void setup() {
  myStepper.setSpeed(16);
}
void loop() {
  
  // 시계 반대 방향으로 한바퀴 회전
  // 64 * 32 = 2048 한바퀴 => 11.25도씩 32번 회전 (360도)
  for(int i=0; i<32; i++) {  
    myStepper.step(stepsPerRevolution);
  }
  delay(500);
  // 시계 방향으로 한바퀴 회전
  // -64 * 32 = 2048 한바퀴 => -11.25도씩 32번 회전 (-360도)
  for(int i=0; i<32; i++) {
    myStepper.step(-stepsPerRevolution);
  }
  delay(500);
}