// education

모터 활용하기 (DC 모터, 서보 모터, 스텝 모터)

아두이노 프로젝트에 물리적 동력과 위치 이동을 부여하는 3대 모터 액추에이터를 정밀 분석합니다.


1. 모터 제어 용어 사전 (Glossary)


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)**와 전원 노이즈 때문입니다. 해결책:

  1. 아두이노 전원과 모터 전원(배터리/어댑터)을 물리적으로 분리하세요.
  2. 두 전원의 GND 선은 서로 공통(Common GND)으로 결합해 전위 기준을 맞춰야 합니다.
← 이전다양한 센서 활용하기 (CDS, 초음파, 온습도, PIR) 다음 →사물인터넷(IoT)과 무선 통신의 이해 (Bluetooth, Wi-Fi)