스텝모터 또는 스테핑모터라고도 하는 스테퍼모터는 디지털 펄스를 기계식 축 회전으로 전환하는 브러시가 없은 동기식 전기 모터이다. 스테퍼모터는 회전을 하는 것이 아니라 한 순간에 한 스텝씩 이동을 한다. 만약 360도 회전을 하려면 최대 200단계로 나누어 한 단계에 1.8도씩 일정한 크기로 축을 이동시킨다. 따라서 피드백 메커니즘이 없어도 각 단계별 펄스 신호에 따라 회전각도와 속도를 정확하게 제어할 수 있다. 180도만 회전할 수 있는 서보모터와 달리 스테퍼모터는 정해진 스텝만큼 이동하면서 끊임없이 회전할 수 있다. 일반적인 감시카메라에서부터 컴퓨터 수치 제어에 의하여 작동이 제어되는 공작 기계인 CNC 기계, 로봇에 이르기까지 스테퍼모터는 고속, 고정밀, 고정도의 제어가 요구되는 영역에 사용된다.

#include <Stepper.h>
// 한 바퀴 (360도)를 완전하게 회전하려면 2048 스텝이 필요
const int stepsPerRevolution = 2048; // (2048 스텝 = 360도 회전)
// Stapper class의 인스턴스인 myStepper를 생성.
// 아두이노 보드의 디지털 8, 9, 10, 11번 핀을
// 스테퍼 모터 드라이브의 IN1, IN3, IN2, IN4에 연결.
// 인스턴스 생성 시 1-3-2-4 순서로 대응되는 핀 번호 입력.
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
void setup() {
myStepper.setSpeed(14); // 스테퍼 모터의 속도를 14RPMs로 설정
}
void loop() {
// 시계 반대 방향으로 한 바퀴 회전
myStepper.step(stepsPerRevolution);
delay(500);
// 시계 방향으로 한 바퀴 회전
myStepper.step(-stepsPerRevolution);
delay(500);
}
- 스테퍼모터가 반시계방향으로 한 바퀴 돌았다가 시계방향으로 한 바퀴 돈다
#include <Stepper.h>
const int stepsPerRevolution = 2048/8; // (256 스텝 = 45도 회전)
// ULN2003 스테퍼 모듈의 IN1, IN2, IN3, IN4를
// 아두이노의 D8, D9, D10, D11 핀에 순서대로 연결
Stepper myStepper(stepsPerRevolution, 8,10,9,11); // IN 1-3-2-4 시퀀스
void setup() {
myStepper.setSpeed(120); // 모터의 속도를 120 RPMs로 설정:
Serial.begin(9600); // 시리얼 포트의 초기화:
}
void loop() {
if(Serial.available()){
Serial.println("clockwise");
// stepsPerRevolution만큼 8번 이동 (시계 방향으로 1회전):
for (int x=1;x<9;x++)
{
myStepper.step(stepsPerRevolution);
Serial.println(x); // 현재 반복횟수를 시리얼 모니터에 출력
}
delay(500);
Serial.println("counterclockwise");
// -stepsPerRevolution만큼 8번 이동 (반시계 방향으로 1회전):
for (int x =1;x<9;x++)
{
myStepper.step(-stepsPerRevolution);
Serial.println(x); // 현재 반복횟수를 시리얼 모니터에 출력
}
delay(500);
}
}
- 시계 방향과 반시계 방향으로 정확하게 여덟 단계로 한 바퀴 회전하는 스테퍼모터
또한 각 반복 단계마다 현재 수행하고 있는 반복 횟수를 시리얼 모니터에 표시


#include <Stepper.h>
const int STEPS = 2048; // 2048 스텝 = 360도
// 스텝 수와 스테퍼 모터 드라이브의 IN1, IN3, IN2, IN4이 연결될 아두이노 핀 번호 설정
Stepper stepper(STEPS, 8, 10, 9, 11);
void setup()
{
stepper.setSpeed(14); // 스테퍼 모터의 속도를 14rpms로 설정
Serial.begin(9600); // 시리얼 통신 시작, 통신 속도는 9600 baudrate
Serial.println("회전시킬 각도를 입력하시오.");
}
void loop()
{
if(Serial.available()) {
int val=Serial.parseInt(); //회전각(-360~360) int형으로 읽기
val=map(val,-360, 360, -2048, 2048); // 회전 각도와 스텝 수의 범위 매핑
stepper.step(val);
Serial.println(val);
delay(10);
}
}
- 아두이노 IDE의 시리얼 모니터를 열고 -360도에서 360도 사이의 원하는 스텝 모터의 회전 각도를 정수로 입력하면 그 값이 시리얼 통신을 통하여 아두이노로 전달되어 스테퍼모터의 샤프트가 해당 값 만큼 회전한다.
