서보 모터 제어: 완전 가이드
주요 학습:
서보 모터 제어 정의: 서보 모터 제어는 전자 신호를 통해 모터 위치, 속도 및 가속도를 정밀하게 조작할 수 있게 합니다.
피드백 메커니즘: 피드백 시스템은 종종 포텐시오미터 또는 인코더로 구성되며, 모터의 출력이 제어 입력과 정확하게 일치하도록 보장합니다.
PWM 신호: 펄스 폭 변조(PWM)는 전기 펄스의 지속 시간을 변화시켜 서보의 위치를 설정하는 데 중요합니다.
아두이노와 서보 모터: 아두이노 보드를 사용하여 서보 모터를 프로그래밍하고 제어하는 것은 하드웨어 설정이 최소화된 효과적인 방법입니다.
서보 모터의 응용: 서보 모터는 로봇공학 및 자동화 시스템과 같이 정확한 위치 제어가 필요한 프로젝트에 필수적입니다.
서보 모터는 회전에서 고정밀 및 정확성을 위해 설계된 모터입니다. 일반적인 DC 모터와 달리 특정 위치를 유지하는 능력으로 구분됩니다. 이 특성 덕분에 서보 모터는 로봇공학, 자동화, 취미 프로젝트에 이상적입니다.
이 기사는 서보 모터 제어가 어떻게 작동하는지, 다양한 유형의 서보 모터, 그리고 다양한 제어 방법과 장치를 설명합니다. 또한 서보 모터의 응용 사례와 프로젝트 예를 제공합니다.
서보 모터란?
서보 모터는 위치(각도), 속도 및 가속도를 정밀하게 제어할 수 있는 액추에이터로 정의됩니다. 일반적인 서보 모터는 DC 모터, 제어 회로, 피드백 장치 세 가지 주요 구성 요소로 구성됩니다.
DC 모터는 서보를 구동하고 기어에 연결되어 출력 축의 속도를 감소시키고 토크를 증가시킵니다.

출력 축은 서보의 회전 부분이며 부하를 움직입니다.
제어 회로는 외부 컨트롤러로부터 입력 신호를 수신하고 처리하는 역할을 합니다. 이러한 신호는 서보에게 어떤 위치, 속도 또는 방향으로 이동해야 하는지를 알려줍니다. 제어 회로는 또한 DC 모터를 구동하기 위해 전력을 공급합니다.
피드백 장치는 일반적으로 포텐시오미터 또는 인코더로 구성되어 출력 축의 현재 위치를 측정합니다.

피드백 장치는 위치 데이터를 제어 회로로 전달하고, 제어 회로는 입력 신호에서 원하는 위치와 실제 위치를 일치시키기 위해 DC 모터의 전력을 조정합니다.
제어 회로와 피드백 장치 사이의 피드백 루프는 서보가 동작 범위 내에서 정확하게 이동하고 임의의 위치를 유지할 수 있도록 합니다.
서보 모터를 어떻게 제어하나?
서보 모터는 PWM(펄스 폭 변조) 신호를 서보의 신호 라인에 보내서 제어합니다. PWM은 신호를 빠르게 켜고 끄면서 다양한 폭의 펄스를 생성하는 기법입니다. 펄스의 폭은 출력 축의 위치를 결정합니다.
예를 들어, 1.5 밀리초(ms)의 펄스 폭을 가진 PWM 신호를 보내면 서보는 중립 위치(90도)로 이동합니다.

1 ms의 펄스 폭을 가진 PWM 신호를 보내면 서보는 최소 위치(0도)로 이동합니다. 2 ms의 펄스 폭을 가진 PWM 신호를 보내면 서보는 최대 위치(180도)로 이동합니다.
PWM 신호는 50 Hz의 주파수를 가지며, 이는 20 ms마다 반복되는 것을 의미합니다. 펄스 폭은 1 ms에서 2 ms까지 이 기간 내에서 변할 수 있습니다.
서보 모터에 PWM 신호를 생성하고 보내는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 다음과 같습니다:
아두이노 보드 또는 다른 마이크로컨트롤러 사용
포텐시오미터 또는 다른 아날로그 센서 사용
조이스틱 또는 다른 디지털 입력 장치 사용
전용 서보 컨트롤러 또는 드라이버 사용
다음 섹션에서는 이러한 각 방법을 더 자세히 살펴보고 몇 가지 예를 통해 어떻게 작동하는지 확인하겠습니다.
아두이노로 서보 모터 제어
아두이노는 서보 모터를 제어하는 가장 인기 있는 플랫폼 중 하나입니다. 아두이노 보드에는 서보에 신호를 보내는 데 사용할 수 있는 내장된 PWM 출력이 있습니다. 아두이노에는 서보 제어를 쉽게 코딩할 수 있는 Servo 라이브러리가 있습니다.
아두이노로 서보 모터를 제어하려면 다음이 필요합니다:
아두이노 보드(예: 아두이노 UNO)
표준 서보 모터(예: SG90)
점퍼 와이어
브레드보드(선택사항)
서보에서 나오는 빨간색 와이어는 아두이노 보드의 5V에 연결됩니다. 서보에서 나오는 검은색 와이어는 아두이노 보드의 GND에 연결됩니다. 서보에서 나오는 흰색 와이어는 아두이노 보드의 핀 9에 연결됩니다.
아두이노 보드를 프로그래밍하려면 온라인 또는 오프라인 아두이노 IDE를 사용해야 합니다. Servo 라이브러리의 예제를 사용하거나 직접 코드를 작성할 수 있습니다.
다음 코드는 for 루프를 사용하여 서보 모터를 180도로 오가며 스윕하는 방법을 보여줍니다:
#include <Servo.h> // Servo 라이브러리 포함
Servo myservo; // Servo 객체 생성
int pos = 0; // 위치 변수
void setup() {
myservo.attach(9); // Servo 객체를 핀 9에 연결
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // 0도에서 180도까지 루프
myservo.write(pos); // 위치를 Servo 객체에 쓰기
delay(15); // 15 ms 대기
}
for (pos = 180; pos >= 0; pos -= 1) { // 180도에서 0도까지 루프
myservo.write(pos); // 위치를 Servo 객체에 쓰기
delay(15); // 15 ms 대기
}
}
이 코드는 두 개의 루프를 사용하여 0도에서 180도까지 위치 변수를 증가시키고 감소시킵니다. 그런 다음 myservo.write(pos)를 사용하여 이 값을 Servo 객체에 쓰고, 각 단계 사이에 15 ms의 지연을 추가하여 움직임을 느리게 합니다.
IDE의 Upload 버튼을 사용하여 이 코드를 아두이노 보드에 업로드하고, 서보 모터가 부드럽게 오가며 스윕하는 것을 관찰하세요.
포텐시오미터로 서보 모터 제어
포텐시오미터는 노브를 얼마나 돌렸는지에 따라 저항을 변경할 수 있는 아날로그 센서입니다. 포텐시오미터를 서보 모터를 제어하는 입력 장치로 사용할 수 있습니다.
포텐시오미터로 서보 모터를 제어하려면 다음이 필요합니다:
아두이노 보드(예: 아두이노 UNO)
표준 서보 모터(예: SG90)
포텐시오미터(10k 오姆)
점퍼 와이어
브레드보드
포텐시오미터와 서보 모터를 아두이노 보드에 연결하는 배선 다이어그램은 아래에 표시되어 있습니다:
포텐시오미터에서 나오는 빨간색 와이어는 아두이노 보드의 5V에 연결됩니다. 포텐시오미터에서 나오는 검은색 와이어는 아두이노 보드의 GND에 연결됩니다. 포텐시오미터에서 나오는 녹색 와이어는 아두이노 보드의 핀 A0에 연결됩니다.
서보에서 나오는 빨간색 와이어는 브레드보드의 다른 행에 5V에 연결됩니다. 서보에서 나오는 검은색 와이어는 브레드보드의 다른 행에 GND에 연결됩니다. 서보에서 나오는 흰색 와이어는 브레드보드의 다른 행에 핀 D9에 연결됩니다.
아두이노 보드를 프로그래밍하려면 이전 예제와 동일한 코드를 사용하되 몇 가지 줄을 변경해야 합니다:
#include <Servo.h> // Servo 라이브러리 포함
Servo myservo; // Servo 객체 생성
int potpin = A0; // 포텐시오미터에 연결된 핀
int val = 0; // 포텐시오미터 값 읽기 위한 변수
void setup() {
myservo.attach(9); // Servo 객체를 핀 D9에 연결
}
void loop() {
val = analogRead(potpin); // 포텐시오미터 값 읽기 (0 - 1023)
val = map(val, 0, 1023, 0, 180); // 값 범위 매핑 (0 - 180)
myservo.write(val); // 매핑된 값 Servo 객체에 쓰기
delay(15); // 15 ms 대기
}
이 코드는 analogRead(potpin) 함수를 사용하여 핀 A0에 연결된 포텐시오미터의 값을 읽습니다. 그런 다음 map(val, 0, 1023, 0, 180) 함수를 사용하여 0 - 1023 범위의 값을 0 - 180 범위로 매핑합니다. 그런 다음 myservo.write(val) 함수를 사용하여 매핑된 값을 Servo 객체에 쓰고, 이전 예제와 동일하게 15 ms의 지연을 추가합니다.
이 코드를 IDE의 Upload 버튼을 사용하여 아두이노 보드에 업로드하면, 서보 모터가 포텐시오미터의 노브 위치에 따라 움직이는 것을 볼 수 있습니다.
조이스틱으로 서보 모터 제어
조이스틱은 두 축에서 이동의 방향과 크기를 감지할 수 있는 디지털 입력 장치입니다. 조이스틱을 서보 모터를 제어하기 위해 x축을 서보의 각도에 매핑할 수 있습니다.
조이스틱으로 서보 모터를 제어하려면 다음이 필요합니다:
아두이노 보드(예: 아두이노 UNO)
표준 서보 모터(예: SG90)
조이스틱 모듈(예: KY-023)
점퍼 와이어
브레드보드
조이스틱 모듈과 서보 모터를 아두이노 보드에 연결하는 배선 다이어그램은 아래에 표시되어 있습니다:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
조이스틱 모듈에서 나오는 빨간색 와이어는 아두이노 보드의 5V에 연결됩니다. 조이스틱 모듈에서 나오는 검은색 와이어는 아두이노 보드의 GND에 연결됩니다. 조이스틱 모듈에서 나오는 녹색 와이어는 아두이노 보드의 핀 A0에 연결됩니다.
서보에서 나오는 빨간색 와이어는 브레드보드의 다른 행에 5V에 연결됩니다. 서보에서 나오는 검은색 와이어는 브레드보드의 다른 행에 GND에 연결됩니다. 서보에서 나오는 흰색 와이어는 브레드보드의 다른 행에 핀 D9에 연결됩니다.
아두이노 보드를 프로그래밍하려면 이전 예제와 동일한 코드를 사용하되 몇 가지 줄을 변경해야 합니다:
#include <Servo.h> // Servo 라이브러리 포함
Servo myservo; // Servo 객체 생성
int joyX = A0; // 조이스틱 x축에 연결된 핀
int val = 0; // 조이스틱 값 읽기 위한 변수
void setup() {
myservo.attach(9); // Servo 객체를 핀 9에 연결
}
void loop() {
val = analogRead(joyX); // 조이스틱 x축 값 읽기 (0 - 1023)
val = map(val, 0, 1023, 0, 180); // 값 범위 매핑 (0 - 180)