아두이노 제어 예제 코드 — MAS-001 쉴드 버전 / 직결 버전 (복사해서 바로 사용)
본 드라이버는 펄스(STP)/방향(DIR)/기동정지(EN) 신호로 제어하며 5V TTL 레벨이라
아두이노 우노·메가에서 바로 사용할 수 있습니다. 아래 두 가지 방식 중 구성에 맞는 예제를 복사하세요.
속도는 펄스 주파수로 결정됩니다: RPM = 주파수(Hz) × 60 ÷ 회전당 스텝 수.
42각 스텝모터와 폭넓게 호환되며 대표 조합은 NK245-02입니다.
① MAS-001 확장쉴드 사용 — 버튼·볼륨 조작 (V1.0)
쉴드 장착 후 드라이버를 쉴드 단자에 결선: STP→D9 / DIR→D6 / EN→D5 / VCC→5V, 신호 GND 공통.
모터 전원(V+/GND)은 SMPS로 별도 공급합니다. 업로드하면 버튼1=기동/정지, 버튼2=방향, 볼륨=속도로
바로 조작되며, 별도 라이브러리 설치가 필요 없습니다.
//==============================================================
// MotorBank SBD-10 + MAS-001 확장쉴드 예제 V1.0
// 기능: 쉴드의 볼륨=속도, 버튼1=기동/정지, 버튼2=방향 전환
// 보드: Arduino Uno + MAS-001 확장쉴드
//
// [쉴드-드라이버 결선] (SBD-10 단자 기준, 상세페이지 결선도 참조)
// STP -> D9 / DIR -> D6 / EN -> D5 / VCC -> 5V / 신호 GND 공통
// V+/GND(전원부)에는 모터용 전원(예: DC24V SMPS)을 별도 연결
// [쉴드 입력] 버튼1=D13(기동/정지), 버튼2=D12(방향), 볼륨=A0(속도)
//
// [신호 극성] 구동 결과가 반대(눌렀는데 정지, 방향 반대 등)이면
// 아래 ACTIVE_LOW 값을 1로 바꿔 업로드하세요.
#define ACTIVE_LOW 0 // 0: EN High=구동 / 1: EN Low=구동 (제품 결선도 기준 확인)
//
// [속도] 모터 회전수 RPM = 펄스주파수(Hz) x 60 / 회전당 스텝 수(분주 설정에 따름)
//==============================================================
const int STP_PIN = 9, DIR_PIN = 6, EN_PIN = 5;
const int BTN1 = 13, BTN2 = 12, POT = A0;
bool running = false, dirCW = true;
bool btn1Prev = HIGH, btn2Prev = HIGH;
void applyEnable(bool on) {
digitalWrite(EN_PIN, (on ^ ACTIVE_LOW) ? HIGH : LOW);
}
void setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
pinMode(BTN1, INPUT); pinMode(BTN2, INPUT);
applyEnable(false);
Serial.begin(9600);
Serial.println(F("SBD-10 + MAS-001 ready. BTN1=Run/Stop BTN2=Dir VOL=Speed"));
}
void loop() {
bool b1 = digitalRead(BTN1);
if (btn1Prev == HIGH && b1 == LOW) { // 버튼1: 기동/정지 토글
running = !running;
applyEnable(running);
if (!running) noTone(STP_PIN);
Serial.println(running ? F("RUN") : F("STOP"));
delay(30);
}
btn1Prev = b1;
bool b2 = digitalRead(BTN2);
if (btn2Prev == HIGH && b2 == LOW) { // 버튼2: 방향 전환
dirCW = !dirCW;
digitalWrite(DIR_PIN, dirCW ? HIGH : LOW);
Serial.println(dirCW ? F("DIR: CW") : F("DIR: CCW"));
delay(30);
}
btn2Prev = b2;
if (running) {
int f = map(analogRead(POT), 0, 1023, 100, 4000); // 볼륨 -> 100~4000Hz
tone(STP_PIN, f);
}
delay(20);
}
② 쉴드 없이 아두이노 직결 — 시리얼 명령 조작 (V1.0)
아두이노와 드라이버를 직접 결선: 5V→VCC / D9→STP / D6→DIR / D5→EN / GND 공통,
모터 전원(V+/GND)은 별도 공급. 업로드 후 시리얼 모니터(9600bps, "새 줄")에서
f2000(CW 2000Hz) / r500(CCW) / s(정지) /
e1·e0(EN)으로 조작합니다.
방향·기동이 반대로 동작하면 코드 상단의 ACTIVE_LOW 값을 1로 바꿔 업로드하세요 —
결선을 다시 뜯을 필요 없이 코드 한 줄로 극성을 맞출 수 있습니다.
//==============================================================
// MotorBank SBD-10 아두이노 직결 예제 V1.0 (MAS-001 쉴드 없이)
// 기능: 시리얼 모니터 명령으로 속도(펄스 주파수)·방향·기동정지 제어
// 보드: Arduino Uno / Mega (5V TTL 신호 기준)
//
// [직결 결선] 아두이노 -> SBD-10 (상세페이지 결선도와 대조 후 연결)
// 5V -> VCC (제어신호 공통 전원)
// D9 -> STP (펄스)
// D6 -> DIR (방향)
// D5 -> EN (기동/정지 - 단순 ON/OFF 기능)
// GND -> 신호 GND 공통
// V+/GND(전원부)에는 모터용 전원(예: DC24V SMPS)을 별도 연결
//
// [신호 극성] 방향·기동이 반대로 동작하면 ACTIVE_LOW를 1로 변경
#define ACTIVE_LOW 0
//
// [속도] RPM = 펄스주파수(Hz) x 60 / 회전당 스텝 수(분주 설정에 따름)
// 예: 200스텝(기본 1.8도, 풀스텝) 기준 f1000 = 300RPM
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
// f2000 : CW 2000Hz r500 : CCW 500Hz s : 정지
// e1/e0 : EN 신호 수동 제어
//==============================================================
const int STP_PIN = 9, DIR_PIN = 6, EN_PIN = 5;
void applyEnable(bool on) {
digitalWrite(EN_PIN, (on ^ ACTIVE_LOW) ? HIGH : LOW);
}
void setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
applyEnable(true);
Serial.begin(9600);
Serial.println(F("SBD-10 direct ready. f2000 r500 s e1 e0"));
}
void loop() {
if (!Serial.available()) return;
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd.length() == 0) return;
char c = cmd.charAt(0);
long v = constrain(cmd.substring(1).toInt(), 0, 20000);
switch (c) {
case 'f': digitalWrite(DIR_PIN, HIGH); if (v) tone(STP_PIN, v);
Serial.print(F("CW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 'r': digitalWrite(DIR_PIN, LOW); if (v) tone(STP_PIN, v);
Serial.print(F("CCW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 's': noTone(STP_PIN); Serial.println(F("STOP")); break;
case 'e': applyEnable(v != 0);
Serial.println(v ? F("EN ON") : F("EN OFF")); break;
default: Serial.println(F("? f2000 r500 s e1 e0"));
}
}
작성: MotorBank 기술팀 · 아두이노 우노 기준 · 최종 업데이트: 2026-08-14