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


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