//==============================================================
// 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);
}
//==============================================================
// 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"));
}
}



상품이 장바구니에 담겼습니다.
바로 확인하시겠습니까?
상품이 찜 리스트에 담겼습니다.
바로 확인하시겠습니까?