본문 바로가기
-----ETC-----/C++ 임베디드 시스템 프로그래밍 시리즈

[C++ 임베디드 시스템 프로그래밍 시리즈] Day 13: 서보 모터 제어

by cogito21_cpp 2024. 8. 1.
반응형

서보 모터의 개요

서보 모터는 정밀한 위치 제어가 필요한 애플리케이션에서 사용됩니다. 서보 모터는 특정 각도로 회전할 수 있으며, 이를 통해 로봇 공학, 모델링, 자동화 시스템 등 다양한 분야에서 사용됩니다. 오늘은 서보 모터의 기본 개념과 제어 방법을 학습하겠습니다.

1. 서보 모터의 기본 개념

서보 모터는 내부에 제어 회로와 위치 피드백 시스템을 갖추고 있습니다. 일반적으로 0도에서 180도 또는 360도까지 회전할 수 있으며, 정확한 각도 제어가 가능합니다.

 

서보 모터의 주요 특성

  • 제어 신호: 서보 모터는 PWM 신호를 통해 제어됩니다. PWM 신호의 듀티 사이클에 따라 회전 각도가 결정됩니다.
  • 회전 각도: 일반적인 서보 모터는 0도에서 180도까지 회전할 수 있습니다. 일부 서보 모터는 360도 회전이 가능합니다.

2. 서보 모터 제어

서보 모터는 아두이노와 같은 마이크로컨트롤러를 사용하여 쉽게 제어할 수 있습니다. 아두이노의 Servo 라이브러리를 사용하면 서보 모터를 제어하는 코드 작성이 간단해집니다.

 

하드웨어 연결

  1. 서보 모터 연결:
    • VCC: 5V
    • GND: GND
    • 신호 핀: 디지털 핀 (예: 9번 핀)

예제: 서보 모터 각도 제어

다음 예제는 Servo 라이브러리를 사용하여 서보 모터의 각도를 제어하는 방법을 보여줍니다.

#include <Servo.h>

Servo myServo; // 서보 객체 생성
const int servoPin = 9; // 서보 모터 핀

void setup() {
    myServo.attach(servoPin); // 서보 모터 핀에 연결
}

void loop() {
    // 서보 모터 각도 설정
    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); // 지연 시간
    }
}

 

위 코드에서는 Servo 라이브러리를 사용하여 서보 모터의 각도를 제어합니다. 서보 모터는 0도에서 180도까지 회전하고 다시 0도로 돌아옵니다.

 

3. 서보 모터의 정밀 제어

서보 모터의 각도를 보다 정밀하게 제어할 수 있습니다. 다음 예제는 서보 모터를 특정 각도로 이동시키고, 그 위치를 유지하는 방법을 보여줍니다.

 

예제: 서보 모터 특정 각도 제어

#include <Servo.h>

Servo myServo; // 서보 객체 생성
const int servoPin = 9; // 서보 모터 핀

void setup() {
    myServo.attach(servoPin); // 서보 모터 핀에 연결
    myServo.write(90); // 서보 모터를 90도로 이동
    delay(1000); // 1초 대기
}

void loop() {
    // 서보 모터를 45도로 이동
    myServo.write(45);
    delay(1000); // 1초 대기

    // 서보 모터를 135도로 이동
    myServo.write(135);
    delay(1000); // 1초 대기
}

 

위 코드에서는 myServo.write 함수를 사용하여 서보 모터를 특정 각도로 이동시키고, 각도 변경 후 1초 동안 대기합니다.

 

4. 아날로그 입력을 사용한 서보 제어

아날로그 입력을 사용하여 서보 모터를 제어할 수도 있습니다. 다음 예제는 가변 저항(potentiometer)의 값을 읽어 서보 모터의 각도를 제어하는 방법을 보여줍니다.

 

하드웨어 연결

  1. 가변 저항 연결:
    • VCC: 5V
    • GND: GND
    • 신호 핀: 아날로그 입력 핀 (예: A0)

예제: 가변 저항을 사용한 서보 모터 제어

#include <Servo.h>

Servo myServo; // 서보 객체 생성
const int servoPin = 9; // 서보 모터 핀
const int potPin = A0; // 가변 저항 핀

void setup() {
    myServo.attach(servoPin); // 서보 모터 핀에 연결
}

void loop() {
    int potValue = analogRead(potPin); // 가변 저항 값 읽기
    int angle = map(potValue, 0, 1023, 0, 180); // 가변 저항 값을 각도로 변환
    myServo.write(angle); // 서보 모터 각도 설정
    delay(15); // 지연 시간
}

 

위 코드에서는 analogRead 함수를 사용하여 가변 저항의 값을 읽고, map 함수를 사용하여 읽은 값을 서보 모터의 각도로 변환합니다. 변환된 각도 값을 myServo.write 함수로 서보 모터에 전달하여 제어합니다.

 

마무리

오늘은 서보 모터의 기본 개념과 제어 방법을 학습했습니다. 서보 모터의 각도 제어, 정밀 제어, 아날로그 입력을 사용한 제어 방법을 통해 다양한 제어 기법을 익혔습니다. 다음 날에는 초음파 센서 제어에 대해 더 깊이 알아보겠습니다.

질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요.

Day 14 예고

다음 날은 "초음파 센서 제어"에 대해 다룰 것입니다. 초음파 센서를 사용하여 거리 측정 방법을 학습하고, 실습 예제를 통해 이해를 돕겠습니다.

반응형