//==============================================================
// MotorBank MSD-224 / MSD-224N + MAS-001 확장쉴드 예제 V2.0
// 기능: 쉴드의 볼륨=속도, 버튼1=기동/정지, 버튼2=방향 전환
// 보드: Arduino Uno + MAS-001 확장쉴드 (쉴드에 드라이버 결선)
//
// [쉴드-드라이버 결선] (MAS-001 단자 기준)
// PUL+ -> D9 / DIR+ -> D6 / ENA+ -> D5 / PUL- DIR- ENA- -> GND
// [쉴드 입력] 버튼1=D13(기동/정지), 버튼2=D12(방향), 볼륨=A0(속도)
//
// [속도 계산] 모터 회전수 RPM = 펄스주파수(Hz) x 60 / (200 x 분주비)
// 예: 분주 1, 2000Hz -> 600RPM / 분주 8, 2000Hz -> 75RPM
// 본 예제의 볼륨 속도 범위: 약 100Hz ~ 4000Hz
//==============================================================
const int PUL_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 setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
pinMode(BTN1, INPUT); pinMode(BTN2, INPUT); // 쉴드 회로 기준(눌림=LOW)
digitalWrite(EN_PIN, LOW);
Serial.begin(9600);
Serial.println(F("MSD-224 + MAS-001 ready. BTN1=Run/Stop BTN2=Dir VOL=Speed"));
}
void loop() {
// 버튼1: 누를 때마다 기동/정지 토글
bool b1 = digitalRead(BTN1);
if (btn1Prev == HIGH && b1 == LOW) {
running = !running;
if (!running) noTone(PUL_PIN);
Serial.println(running ? F("RUN") : F("STOP"));
delay(30); // 디바운스
}
btn1Prev = b1;
// 버튼2: 누를 때마다 방향 전환
bool b2 = digitalRead(BTN2);
if (btn2Prev == HIGH && b2 == LOW) {
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);
tone(PUL_PIN, f); // 비차단 펄스 출력
}
delay(20);
}
//==============================================================
// MotorBank MSD-224 / MSD-224N 아두이노 직결 예제 V1.0 (쉴드 없이)
// 기능: 시리얼 모니터 명령으로 속도(펄스 주파수)·방향·기동정지 제어
// 보드: Arduino Uno 단독 (제어신호 3.3~24V 지원이라 직결 가능)
//
// [직결 결선] 아두이노 -> 드라이버
// D9 -> PUL+ / D6 -> DIR+ / D5 -> ENA+
// GND -> PUL- , DIR- , ENA- (모두 공통)
// * 모터 전원(SMPS)은 드라이버에 별도 공급, 아두이노와 GND 공통 불필요
// (드라이버 제어 입력은 포토커플러 절연)
//
// [속도 계산] 모터 회전수 RPM = 펄스주파수(Hz) x 60 / (200 x 분주비)
// 예: 분주 1에서 f1000 -> 300RPM / 분주 8에서 f2000 -> 75RPM
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
// f2000 : CW 방향, 2000Hz 펄스 r500 : CCW 방향, 500Hz
// s : 정지(펄스 중지) e1/e0 : ENA 신호 High/Low
//==============================================================
const int PUL_PIN = 9, DIR_PIN = 6, EN_PIN = 5;
void setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
Serial.begin(9600);
Serial.println(F("MSD-224 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(PUL_PIN, v);
Serial.print(F("CW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 'r': digitalWrite(DIR_PIN, LOW); if (v) tone(PUL_PIN, v);
Serial.print(F("CCW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 's': noTone(PUL_PIN); Serial.println(F("STOP")); break;
case 'e': digitalWrite(EN_PIN, v ? HIGH : LOW);
Serial.println(v ? F("ENA High") : F("ENA Low")); break;
default: Serial.println(F("? f2000 r500 s e1 e0"));
}
}
PH42-NK247N








※ 구입전 유의사항
* 본제품은 산업용 부품으로 기업체에서는 이 분야 전문가가 수십개의 샘플들을 구입하여
오랜 기간 수십가지 항목의 성능과 적합성을 테스트한 후에 결정하고, 만족하면, 수백, 수천
또는 수만개씩 구입하는 전문지식이 필요한 제품입니다.
전문적 지식이 필요한 전자, 전기, 기계 부품의 특성상 제품이 불량이거나,
주문한 제품과 다른 제품인 경우를 제외하고, 제품의 하자가 없을 경우, 이미 사용한 제품을
고객의 단순 변심으로 교환, 반품, A/S 불가합니다.
그런데 산업용 부품은 공산품처럼 인지 상품이 아니라서, 전문적 지식이 없는 개인 사용자나
초보자는 구입 먼저하고 원하는 성능과 기대에 부합하지 않으면, 무조건 반품이나 교환을
요구하여 이로인한 손실로 택배비, 결제수수료, 포장비등의 비용을 구제 받을 길이 없어,
잘 모르시는 분들에게는 쇼핑몰로 판매를 안하고, 전문가나 기업체들과 같이 반품이나 교환,
환불을 요구하지 안는다면 구입하셔도 됩니다.
단, 매장에 방문하여 사용 방법과 구동을 확인하여, 이상유무를 확인하고 반품 의사가 없는
경우에는 판매할 수 있습니다.*