고성능 아두이노 DC 모터 제어 라이브러리
부품 및 소모품
| Arduino UNO | 1개 |
| 범용 NPN 트랜지스터 | 2개 |
| 범용 PNP 트랜지스터 | 2개 |
| 저항 1kΩ | 2개 |
| 1N4007 다이오드 | 4개 |
앱 및 온라인 서비스
프로젝트 소개
산업용 모션 제어 요구사항을 충족하도록 설계된 아두이노 DC 모터 제어 라이브러리를 소개합니다. 16가지 기능으로 모터를 매우 다채롭게 제어할 수 있습니다.
주요 기능
- 모터 회전 방향 제어
- 속도 0~100% 제어
- 소프트 스타트: 지정된 시간 동안 0%에서 목표 속도까지 부드럽게 가속
- 스무스 스톱: 현재 속도에서 0%까지 지정된 시간 동안 감속
- 조그 제어: 지정된 방향으로 짧은 충격(저크) 동작
- DC 브레이크: 즉각적인 비상 정지 (모터와 드라이버 회로가 동적 제동 저항 등 적절히 설계된 경우에만 작동)
라이브러리 함수 상세
| 함수 | 설명 |
DC_Motor(int pin1, int pin2) | DC 모터 구동용 아두이노 핀 선언 |
DC_Motor(int pin1, int pin2, int speed_flag) | 아날로그 출력 핀 선언(속도 제어용, speed_flag=1) |
start_motor(int dir) | 지정된 방향으로 모터 시작(1=정방향, 0=역방향) |
forward() | 정방향 회전 시작 |
reverse() | 역방향 회전 시작 |
dc_break() | 즉시 정지 (DC 브레이크, 하드웨어 지원 필요) |
stop_motor() | 모터 정지 |
jogg_full_speed(int dir) | 5초간 최대 속도로 저크 동작 |
set_speed(int speed) | 속도 설정 0~100% (아날로그 핀 초기화 필요) |
forward_with_set_speed() | 설정 속도로 정방향 회전 |
reverse_with_set_speed() | 설정 속도로 역방향 회전 |
run_motor(int dir, int speed) | 지정 방향/속도로 회전 |
jogg_set_speed(int dir, int speed) | 지정 속도로 저크 동작 |
motor_speed_zero() | 속도를 0으로 줄여 정지 (아날로그 출력) |
soft_start(int dir, int speed, int time_in_sec) | 0→목표 속도까지 지정 초 동안 소프트 스타트 |
smooth_stop(int time_in_sec) | 현재 속도→0까지 지정 초 동안 스무스 스톱 |
주의: 속도 제어 기능(9~16번)은 아날로그 출력 핀으로 초기화해야 합니다(DC_Motor(pin1, pin2, 1)). stop_motor()는 디지털 출력이므로 속도 제어 시에는 motor_speed_zero()를 사용하세요.
예제 코드
1) 속도 제어 없이 정/역 회전
#include
DC_Motor motor(8, 12);
void setup() {}
void loop() {
motor.forward(); delay(5000);
motor.stop_motor(); delay(2000);
motor.reverse(); delay(5000);
motor.stop_motor(); delay(2000);
}
2) 속도 제어로 정/역 회전
#include
DC_Motor motor2(9, 10, 1); // 아날로그 핀 9,10
void setup() {}
void loop() {
motor2.set_speed(40);
motor2.forward_with_set_speed(); delay(5000);
motor2.motor_speed_zero(); delay(2000);
motor2.set_speed(80);
motor2.reverse_with_set_speed(); delay(5000);
motor2.motor_speed_zero(); delay(2000);
}
3) 조그 제어 (속도 제어 유/무)
#include
DC_Motor motor(8, 12);
DC_Motor motor2(9, 10, 1);
void setup() {}
void loop() {
motor.jogg_full_speed(1);
motor.jogg_full_speed(0);
motor2.jogg_set_speed(0, 80);
motor2.jogg_set_speed(1, 30);
}
4) 소프트 스타트와 스무스 스톱
#include
DC_Motor motor2(9, 10, 1);
void setup() {}
void loop() {
motor2.soft_start(1, 90, 10); // 정방향, 90%, 10초
delay(3000);
motor2.smooth_stop(5); // 5초 감속
motor2.soft_start(0, 50, 6); // 역방향, 50%, 6초
delay(3000);
motor2.smooth_stop(3); // 3초 감속
}
회로도
아두이노 UNO와 H-브리지 드라이버를 사용한 DC 모터 제어 회로
라이브러리 사용법
DC_Motor 폴더를 아두이노 라이브러리 폴더(예: C:\arduino-1.6.7\libraries)에 복사하면 스케치에서 #include <DC_Motor.h>로 사용할 수 있습니다.