아두이노 프로젝트에 물리적 동력과 위치 이동을 부여하는 3대 모터 액추에이터를 정밀 분석합니다.
1. 모터 제어 용어 사전 (Glossary)
- DC Motor: 직류 전원을 인가하면 연속 회전하는 가장 보편적인 모터입니다.
- H-Bridge (H-브리지): 4개의 트랜지스터 스위치를 H자 모양으로 배치하여 전류의 방향을 바꿔 DC 모터의 정회전/역회전을 제어하는 회로 구조입니다.
- Servo Motor: 내부에 감속 기어, DC 모터, 가변저항 포텐쇼미터, 제어 회로가 합쳐져 0° ~ 180° 정밀 각도를 유지하는 모터입니다.
- Stepper Motor: 내부 고정자 코일에 순차적으로 전원을 인가하여 1 스텝 단위(예: 1.8°)로 정밀 회전시키는 모터입니다.
- Back-EMF (역기전력): 모터 코일이 멈추거나 회전할 때 반대 방향으로 발생하는 높은 전압 서지로, 이를 방지하기 위해 다이오드나 드라이버 IC를 사용합니다.
2. DC 모터 제어와 L298N 모터 드라이버
아두이노 IO 핀의 출력 전류 한계(40mA)로 인해 DC 모터는 반드시 외부 전원 및 L298N 모터 드라이버 IC를 거쳐야 합니다.
// L298N 핀 설정
const int ENA = 9; // PWM 속도 제어 핀
const int IN1 = 7; // 회전 방향 제어 핀 1
const int IN2 = 6; // 회전 방향 제어 핀 2
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void loop() {
// 1. 정회전 (IN1: HIGH, IN2: LOW) + 속도 200
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 200);
delay(2000);
// 2. 브레이크 (IN1: LOW, IN2: LOW)
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
delay(1000);
// 3. 역회전 (IN1: LOW, IN2: HIGH) + 속도 150
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 150);
delay(2000);
}
3. 서보 모터 정밀 각도 제어 (Servo.h)
서보 모터는 50Hz (20ms 주기)의 PWM 제어 신호를 사용합니다. (1ms = 0°, 1.5ms = 90°, 2ms = 180°)
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9); // 9번 핀에 서보 신호선(황색/주황색) 연결
}
void loop() {
// 0도부터 180도까지 부드럽게 스위핑 회전
for (int angle = 0; angle <= 180; angle += 1) {
myServo.write(angle);
delay(15);
}
for (int angle = 180; angle >= 0; angle -= 1) {
myServo.write(angle);
delay(15);
}
}
4. 자주 묻는 질문 (Q&A)
Q. 모터를 작동시키면 아두이노가 재부팅되거나 시리얼 통신이 끊깁니다. A. 모터 작동 시 발생하는 **돌입 전류(Inrush Current)**와 전원 노이즈 때문입니다. 해결책:
- 아두이노 전원과 모터 전원(배터리/어댑터)을 물리적으로 분리하세요.
- 두 전원의 GND 선은 서로 공통(Common GND)으로 결합해 전위 기준을 맞춰야 합니다.