정밀 스테퍼 모터 제어: 28BYJ-48 아두이노 우노 & 조이스틱
부품 및 소모품
| Arduino UNO | 1개 |
| 28BYJ-48 DC 5V 스테퍼 모터 | 1개 |
| ULN2003 스테퍼 모터 드라이버 | 1개 |
| 브레드보드 (일반) | 1개 |
| 점퍼 와이어 (일반) | 1세트 |
| 아날로그 조이스틱 (일반) | 1개 |
프로젝트 소개
필요 하드웨어
- Arduino UNO 보드
- 28BYJ-48 스테퍼 모터 (ULN2003A 드라이버 보드 포함)
- 조이스틱
- 5V 전원
- 브레드보드
- 점퍼 와이어
회로도
아두이노와 조이스틱을 이용한 스테퍼 모터 제어 회로도입니다(모든 접지 단자는 서로 연결).
다음은 프리칭(Fritzing) 회로도입니다.
연결 상세
스테퍼 모터는 ULN2003A 보드에 연결되고, 이 보드는 외부 5V 전원으로 구동됩니다. 보드의 제어 라인(IN1~IN4)은 아두이노에 다음과 같이 연결됩니다:
- IN1 → 아두이노 핀 11
- IN2 → 아두이노 핀 10
- IN3 → 아두이노 핀 9
- IN4 → 아두이노 핀 8
조이스틱 보드에는 5개 핀이 있습니다: GND, +5V, VRX, VRY, SW
- GND, +5V: 전원 핀
- VRX: X축 포텐셔미터 출력
- VRY: Y축 포텐셔미터 출력
- SW: 푸시 버튼 단자 (다른 쪽은 GND 연결)
X축 출력(VRX)은 아두이노 아날로그 핀 A0에 연결하고, Y축(VRY)도 별도 모터 제어용으로 사용 가능합니다. 스위치 핀(SW)은 이번 예제에서는 사용하지 않습니다. X축과 Y축 포텐셔미터로 두 개의 스테퍼 모터를 독립적으로 제어할 수 있습니다.
"여러분, 이 프로젝트가 마음에 드신다면 팔로우와 좋아요 부탁드려요!"
코드
CODE: (C/C++)
코드에 포함된 모든 라이브러리를 추가하세요.
// 이 프로젝트는 BEASTIDREES62가 제작했습니다
// https://id.arduino.cc/?code=MTxqeHweG6vL2cur&state=amxEcTB2bnNiYjluTUxmRExWaWZnOXIzUk1BLWRqZTZYUGtJNGtxODB+dg==
// 아두이노 스테퍼 모터 라이브러리 포함
#include <Stepper.h>
// 혁명당 스텝 수 정의
#define STEPS 32
// 스테퍼 모터 제어 핀 정의
#define IN1 11
#define IN2 10
#define IN3 9
#define IN4 8
// 스테퍼 라이브러리 초기화 (핀 순서 주의: IN4, IN2, IN3, IN1)
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);
// 조이스틱 포텐셔미터 출력은 아두이노 A0에 연결
#define joystick A0
void setup() {
}
void loop() {
// 포텐셔미터 아날로그 값 읽기
int val = analogRead(joystick);
// 조이스틱이 중앙에 있으면 모터 정지
if ((val > 500) && (val < 523)) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
} else {
// 첫 번째 방향 회전
while (val >= 523) {
// 속도를 5~500 RPM 사이로 매핑
int speed_ = map(val, 523, 1023, 5, 500);
stepper.setSpeed(speed_);
stepper.step(1); // 1스텝 이동
val = analogRead(joystick);
}
// 반대 방향 회전
while (val <= 500) {
int speed_ = map(val, 500, 0, 5, 500);
stepper.setSpeed(speed_);
stepper.step(-1); // 역방향 1스텝 이동
val = analogRead(joystick);
}
}
}
회로도