지난 편에서는 로봇의 '두뇌'인 마이크로컨트롤러, 특히 아두이노와 라즈베리 파이에 대해 깊이 있게 다루었습니다. 이제 로봇을 실제 세계에서 움직이게 하는 '근육' 역할을 하는 모터에 대해 알아볼 차례입니다. 로봇의 이동, 팔의 움직임, 다양한 기구의 작동 등 모든 물리적인 활동은 모터를 통해 이루어집니다. 이 글에서는 로봇 제작에 주로 사용되는 다양한 모터의 종류를 살펴보고, 각 모터를 효율적으로 제어하는 방법주의사항을 상세히 설명합니다. 이 지식을 통해 여러분의 로봇이 원하는 대로 움직일 수 있도록 만드는 데 필요한 핵심 기술을 습득하게 될 것입니다.

로봇만들기


모터란 무엇인가? 로봇 움직임의 원동력

모터(Motor)는 전기 에너지를 기계적 에너지(회전 운동 또는 선형 운동)로 변환하여 힘을 발생시키는 장치입니다. 로봇에서는 바퀴를 굴리거나, 팔을 움직이거나, 특정 부품을 회전시키는 등 다양한 움직임을 구현하는 데 사용됩니다. 로봇의 목적과 필요한 움직임의 종류에 따라 적합한 모터를 선택하는 것이 매우 중요합니다.

로봇 제작에 주로 사용되는 모터의 종류

로봇 제작 시 가장 흔하게 사용되는 모터는 크게 세 가지 종류로 나눌 수 있습니다.

1. DC 모터 (Direct Current Motor)

DC 모터는 가장 기본적인 형태의 모터로, 전압을 인가하면 계속해서 한 방향으로 회전하는 모터입니다. 극성을 바꾸면 회전 방향이 바뀝니다.

  • 원리: 코일에 전류가 흐르면 자석에 의해 회전력이 발생합니다.
  • 특징:
    • 간단한 구조와 저렴한 가격: 쉽게 구할 수 있고 다루기 용이합니다.
    • 빠른 반응 속도와 높은 회전 속도: 비교적 빠르게 회전합니다.
    • 연속 회전: 특정 각도 제어 없이 계속 회전이 필요한 곳에 적합합니다.
    • 속도 제어: 인가되는 전압의 크기(PWM)를 조절하여 속도를 제어합니다.
    • 방향 제어: 인가되는 전압의 극성을 바꾸어 회전 방향을 제어합니다.
  • 주요 용도:
    • 이동 로봇의 바퀴 구동: 로봇 청소기, 자율 이동 로봇.
    • 팬, 펌프 등 연속 회전이 필요한 곳.
  • 단점:
    • 정밀한 위치 제어가 어려움: 회전량을 정확히 제어하려면 별도의 엔코더(Encoder)가 필요합니다.
    • 백래시(Backlash) 문제: 기어 감속기가 있는 경우 유격으로 인한 오차가 발생할 수 있습니다.

DC 모터 제어 방법

DC 모터는 단순히 전원과 연결하면 돌아가지만, 로봇에서 원하는 대로 제어하려면 몇 가지 부품이 필요합니다.

  • 모터 드라이버 (Motor Driver): 마이크로컨트롤러의 출력 전류는 매우 낮아 모터를 직접 구동할 수 없습니다. 모터 드라이버는 마이크로컨트롤러의 신호를 받아 모터에 충분한 전류를 공급하고, 회전 방향을 전환하는 역할을 합니다.

    • H-Bridge: 모터 드라이버의 핵심 회로로, 전류의 방향을 제어하여 모터의 회전 방향을 바꿉니다. (예: L298N, DRV8833)
  • PWM (Pulse Width Modulation) 제어: DC 모터의 속도는 인가되는 전압의 크기에 비례합니다. PWM은 디지털 핀에서 아날로그 효과를 내는 기술로, 빠르게 ON/OFF를 반복하여 평균 전압을 조절하여 모터의 속도를 제어합니다.

    • 아두이노: analogWrite() 함수를 사용하여 PWM 신호를 출력합니다. (핀 번호 앞에 ~ 표시가 있는 핀)
    • 라즈베리 파이: RPi.GPIO 라이브러리를 사용하여 소프트웨어 PWM을 구현하거나, 하드웨어 PWM 핀을 사용합니다.
  • 예제: 아두이노로 DC 모터 속도/방향 제어 (L298N 사용)

    1. L298N IN1, IN2 핀에 디지털 출력 신호를 연결하여 방향을 제어합니다.
    2. L298N EN(Enable) 핀에 PWM 신호를 연결하여 속도를 제어합니다.
    3. digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); 와 같이 설정하여 한 방향으로, analogWrite(EN, 150); 와 같이 설정하여 속도를 조절합니다.

2. 서보 모터 (Servo Motor)

서보 모터는 특정 각도로 정밀하게 회전하거나 고정할 수 있는 모터입니다. RC(무선 조종) 분야에서 널리 사용되며, 로봇 팔 관절이나 카메라 짐벌 등에 주로 사용됩니다.

  • 원리: 내부에 기어 감속기, 포텐쇼미터(Potentiometer, 각도 감지 센서), 제어 회로가 통합되어 있습니다. 외부에서 특정 폭의 펄스 신호(PWM과 유사)를 주면, 내부 제어 회로가 모터를 돌려 포텐쇼미터로 현재 각도를 감지하고, 원하는 각도에 도달할 때까지 모터를 제어합니다.
  • 특징:
    • 정밀한 각도 제어: 0도에서 180도(또는 360도 연속 회전 서보) 사이의 특정 각도로 정확하게 움직일 수 있습니다.
    • 간단한 제어: 별도의 모터 드라이버 없이 신호선만으로 제어가 가능합니다.
    • 토크 유지: 설정된 각도에 도달하면 외부 힘에도 불구하고 해당 각도를 유지하려는 힘(홀딩 토크)을 가집니다.
  • 주요 용도:
    • 로봇 팔 관절, 로봇 손가락.
    • 카메라 팬/틸트 제어.
    • 방향 조절이 필요한 곳.
  • 단점:
    • 연속 회전에 부적합: 일반 서보는 특정 각도 범위 내에서만 움직입니다. (연속 회전 서보는 가능)
    • 토크에 한계가 있음: 너무 큰 부하가 걸리면 원하는 각도를 유지하기 어렵습니다.

서보 모터 제어 방법

서보 모터는 마이크로컨트롤러의 PWM 핀을 통해 제어 신호를 받습니다.

  • 아두이노: Servo.h 라이브러리를 사용합니다.
    C++
    #include <Servo.h>
    
    Servo myServo;  // Servo 객체 생성
    int servoPin = 9; // 서보 모터 신호 핀
    
    void setup() {
      myServo.attach(servoPin); // 서보 핀 연결
    }
    
    void loop() {
      myServo.write(0);   // 0도로 이동
      delay(1000);
      myServo.write(90);  // 90도로 이동
      delay(1000);
      myServo.write(180); // 180도로 이동
      delay(1000);
    }
    
  • 라즈베리 파이: RPi.GPIO 라이브러리를 사용하여 소프트웨어 PWM을 구현하거나, 전용 서보 드라이버 보드를 사용합니다.
    Python
    import RPi.GPIO as GPIO
    import time
    
    servo_pin = 18 # 서보 모터 신호 핀 (PWM 지원 핀)
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(servo_pin, GPIO.OUT)
    
    # PWM 객체 생성 (핀, 주파수)
    pwm = GPIO.PWM(servo_pin, 50) # 50Hz (20ms 주기)
    
    pwm.start(0) # PWM 시작 (듀티 사이클 0)
    
    try:
        while True:
            # 0도 (듀티 사이클 2.5%, 0.5ms)
            pwm.ChangeDutyCycle(2.5)
            time.sleep(1)
            # 90도 (듀티 사이클 7.5%, 1.5ms)
            pwm.ChangeDutyCycle(7.5)
            time.sleep(1)
            # 180도 (듀티 사이클 12.5%, 2.5ms)
            pwm.ChangeDutyCycle(12.5)
            time.sleep(1)
    except KeyboardInterrupt:
        pwm.stop()
        GPIO.cleanup()
    

3. 스테퍼 모터 (Stepper Motor)

스테퍼 모터는 정해진 '스텝(Step)' 각도만큼 정확하게 회전하는 모터입니다. 펄스 신호를 줄 때마다 정해진 각도만큼만 움직이므로, 매우 정밀한 위치 제어가 가능합니다.

  • 원리: 내부의 여러 코일에 순차적으로 전류를 인가하여 자력을 발생시키고, 이 자력으로 로터(회전자)를 단계적으로 회전시킵니다.
  • 특징:
    • 정확한 위치 제어: 펄스 수만큼 정확하게 회전하므로 오픈 루프 제어(센서 피드백 없이 제어)로도 높은 정밀도를 가집니다.
    • 높은 홀딩 토크: 전원이 인가된 상태에서는 움직이지 않으려는 힘이 강합니다.
    • 누적 오차 없음: 각 스텝은 독립적이므로 장시간 동작 시에도 누적 오차가 발생하지 않습니다.
  • 주요 용도:
    • 3D 프린터, CNC 머신: 정밀한 위치 이동.
    • 로봇의 정밀 이동 또는 회전.
    • 스캐너, 프린터 등.
  • 단점:
    • 복잡한 제어 회로: 스테퍼 드라이버(예: A4988, DRV8825)가 필요하며, 제어 방식이 DC/서보 모터보다 복잡합니다.
    • 토크 감소: 고속 회전 시 토크가 감소하는 경향이 있습니다.
    • 전력 소비: 정지 상태에서도 전류를 소비합니다.

스테퍼 모터 제어 방법

스테퍼 모터는 전용 드라이버를 통해 제어합니다. 드라이버는 마이크로컨트롤러로부터 펄스 신호와 방향 신호를 받아 모터를 구동합니다.

  • 아두이노: Stepper.h 라이브러리 또는 AccelStepper.h 라이브러리(가속/감속 제어)와 스테퍼 드라이버를 사용합니다.

  • 라즈베리 파이: RPi.GPIO 라이브러리와 스테퍼 드라이버를 사용합니다.

  • 예제: 스테퍼 모터 제어 (A4988 드라이버 사용)

    1. 스테퍼 드라이버의 DIR 핀에 디지털 신호를 연결하여 회전 방향을 제어합니다.
    2. 스테퍼 드라이버의 STEP 핀에 펄스 신호를 연결하여 회전 스텝을 제어합니다.
    3. delayMicroseconds() 함수 등으로 펄스 간격을 조절하여 속도를 제어합니다.

모터 선택 가이드 및 주의사항

  • 토크 (Torque): 로봇이 움직여야 할 무게나 저항을 극복할 수 있는 충분한 힘을 가진 모터를 선택해야 합니다.
  • 속도 (Speed): 필요한 회전 속도(RPM)나 선형 이동 속도를 고려합니다.
  • 정밀도 (Precision): 얼마나 정확한 위치 제어가 필요한지에 따라 DC 모터(엔코더 필요), 서보 모터, 스테퍼 모터 중 선택합니다.
  • 전압/전류 (Voltage/Current): 모터의 정격 전압과 최대 전류를 확인하여 전원 공급 장치와 모터 드라이버가 이를 감당할 수 있는지 확인해야 합니다. 과도한 전류는 부품 손상의 원인이 됩니다.
  • 기어 감속기 (Gearbox): 낮은 속도에서 높은 토크를 얻기 위해 기어 감속기가 내장된 모터(기어드 모터)를 사용하는 경우가 많습니다.
  • 쿨링 (Cooling): 모터가 장시간 작동하거나 큰 부하를 받을 경우 발열이 심해질 수 있습니다. 필요한 경우 방열판이나 팬을 고려해야 합니다.

중요한 안전 수칙

  • 전원 연결 시 극성 확인: 잘못된 극성 연결은 모터나 드라이버 손상으로 이어질 수 있습니다.
  • 과전류 방지: 모터 드라이버의 최대 전류 스펙을 초과하지 않도록 주의하고, 필요한 경우 퓨즈를 사용합니다.
  • 움직이는 부품 주의: 모터가 작동 중일 때는 손이나 머리카락 등이 끼이지 않도록 각별히 주의해야 합니다.

마무리하며...

이번 글에서는 로봇의 움직임을 담당하는 핵심 부품인 모터의 종류(DC 모터, 서보 모터, 스테퍼 모터)와 각 모터를 효율적으로 제어하는 방법에 대해 상세히 알아보았습니다. 이제 여러분은 로봇의 어떤 부분에 어떤 모터가 적합한지 판단하고, 그 모터를 어떻게 움직이게 할지에 대한 기본적인 감을 잡으셨을 겁니다. 모터는 로봇에 생명을 불어넣는 가장 중요한 요소 중 하나이므로, 충분한 이해와 연습이 필요합니다.

다음 편에서는 로봇의 '눈'과 '귀' 역할을 하는 센서에 대해 집중적으로 다룰 예정입니다. 로봇이 외부 환경을 인식하고 상호작용하는 데 필수적인 센서의 원리와 다양한 활용법을 알아보겠습니다. 지금 여러분이 만들고 싶은 로봇이 어떻게 움직여야 할지 상상해보고, 어떤 모터가 가장 적합할지 찾아보세요!