Booil Jung

아두이노를 활용한 서보모터 제어 마스터 가이드

서보모터는 로봇 공학, 자동화 시스템, 원격 제어(RC) 모델 등 정밀한 위치 제어가 요구되는 다양한 분야에서 핵심적인 역할을 수행하는 액추에이터입니다. 아두이노와 같은 마이크로컨트롤러를 사용하여 서보모터를 제어하기 위해서는 먼저 그 내부 구조와 작동 원리에 대한 깊이 있는 이해가 선행되어야 합니다. 서보모터는 단순한 모터가 아니라, 목표 위치를 스스로 찾아가고 유지하는 지능적인 폐쇄 루프 제어 시스템입니다.1

일반적인 취미용 서보모터의 플라스틱 케이스 내부에는 정밀한 움직임을 구현하기 위한 네 가지 핵심 부품이 유기적으로 결합되어 있습니다.2 이 구성 요소들이 함께 작동하여 외부의 제어 신호에 따라 정확한 각도를 유지하는 폐쇄 루프(Closed-Loop) 시스템을 형성합니다.

이처럼 서보모터는 단순히 회전하는 장치가 아니라, 목표를 설정하고(제어 신호), 현재 상태를 파악하며(피드백), 오차를 수정하는(제어) 일련의 과정을 자체적으로 수행하는 정교한 시스템입니다. 아두이노의 역할은 이 시스템에 ‘어디로 가야 하는지’에 대한 목표값, 즉 제어 신호를 제공하는 것입니다.

서보모터를 제어하기 위해 사용되는 신호는 펄스 폭 변조(Pulse Width Modulation, PWM)라는 디지털 신호 기법입니다.5 PWM은 디지털 출력만을 할 수 있는 마이크로컨트롤러가 아날로그와 유사한 효과를 내기 위해 사용하는 핵심 기술로, 서보모터 제어뿐만 아니라 LED의 밝기 조절이나 DC 모터의 속도 제어 등 광범위하게 활용됩니다.7

PWM 신호의 핵심 개념은 다음과 같습니다:

아두이노 우노 보드의 경우, 디지털 핀 번호 옆에 물결표시(~)가 있는 3, 5, 6, 9, 10, 11번 핀이 하드웨어 PWM 출력을 지원합니다.5

analogWrite(pin, value) 함수를 사용하면 이 핀들에서 PWM 신호를 출력할 수 있으며, value 값(0-255)에 따라 듀티 사이클이 0%에서 100%까지 조절됩니다. 이 핀들의 PWM 주파수는 약 490Hz 또는 980Hz로 고정되어 있습니다.7 하지만 여기서 중요한 점은, 서보모터 제어에 사용되는 PWM 신호는 이러한 일반적인 PWM과 근본적인 차이가 있다는 것입니다.

초보자들이 흔히 혼동하는 부분은 아두이노의 analogWrite() 함수로 서보모터를 직접 제어할 수 있다고 생각하는 것입니다. 그러나 취미용 서보모터는 신호의 듀티 사이클이 아닌, HIGH 상태 펄스의 절대적인 ‘폭(width)’ 또는 ‘지속 시간(duration)’에 반응합니다.6 서보모터는 약 20ms(밀리초)의 주기, 즉 50Hz의 주파수를 갖는 신호를 기대합니다.4 이 20ms의 주기 안에서 HIGH 신호의 폭을 조절함으로써 모터의 각도를 결정합니다.

이러한 제어 방식은 듀티 사이클이 아닌 펄스 폭 자체가 중요한 통신 프로토콜에 가깝습니다. 예를 들어, 20ms 주기에서 1.5ms의 펄스 폭은 7.5%의 듀티 사이클에 해당하지만, 10ms 주기에서 1.5ms의 펄스 폭은 15%의 듀티 사이클에 해당합니다. 서보모터는 이 두 신호를 동일하게 ‘90도 위치’로 해석합니다. 중요한 것은 듀티 사이클이 아니라 1.5ms라는 절대적인 펄스 폭입니다.6

일반적인 취미용 서보모터의 펄스 폭과 각도의 관계는 다음과 같습니다. 이 값들은 제조사나 모델에 따라 약간의 차이가 있을 수 있으므로, 정밀한 제어가 필요할 경우 데이터시트를 확인하는 것이 중요합니다.6

일부 서보모터는 0.5ms(500µs)에서 2.5ms(2500µs)까지 더 넓은 범위의 펄스 폭을 인식하기도 합니다.4 아두이노의

analogWrite() 함수는 이러한 정밀한 시간 제어를 위해 설계되지 않았기 때문에, 서보모터를 제어하기 위해서는 타이머와 인터럽트를 직접 제어하여 정확한 펄스를 생성해야 합니다. 다행히도 아두이노는 이러한 복잡한 과정을 추상화한 Servo.h 라이브러리를 기본으로 제공하여 사용자가 쉽게 서보모터를 제어할 수 있도록 돕습니다.

각도 (도) 일반적인 펄스 폭 (ms) 일반적인 펄스 폭 (µs)
0 1.0 1000
45 1.25 1250
90 (중립) 1.5 1500
135 1.75 1750
180 2.0 2000

표 1: 서보모터 펄스 타이밍 참조. 이 값은 일반적인 기준이며, 특정 서보모터의 데이터시트를 확인하여 정확한 값을 사용하는 것이 권장됩니다.

이론적 배경을 이해했다면, 이제 아두이노와 서보모터를 물리적으로 연결하고 첫 번째 제어 코드를 실행해 볼 차례입니다. 이 과정은 매우 간단하며, 아두이노의 강력한 Servo.h 라이브러리 덕분에 몇 줄의 코드만으로도 서보모터를 움직이게 할 수 있습니다.

가장 먼저 필요한 준비물은 아두이노 보드(우노, 나노 등), 취미용 서보모터(SG90, MG90S 등), 그리고 점퍼선 3개입니다.15

서보모터는 일반적으로 3개의 선을 가지고 있으며, 색상을 통해 쉽게 구분할 수 있습니다. 제조사마다 약간의 차이가 있을 수 있지만, 대부분 다음의 표준을 따릅니다 11:

이 세 가닥의 선을 아두이노 보드에 다음과 같이 연결합니다. 아래는 가장 일반적인 연결 방식이며, 하나의 소형 서보모터를 테스트하는 데 적합합니다.2

  1. 서보모터의 전원선(빨간색)을 아두이노의 5V 핀에 연결합니다.
  2. 서보모터의 접지선(갈색/검은색)을 아두이노의 GND 핀에 연결합니다.
  3. 서보모터의 신호선(주황색/노란색)을 아두이노의 디지털 9번 핀에 연결합니다. (9번 핀은 예시이며, 다른 디지털 핀도 사용 가능합니다.)

중요한 주의사항: 이 연결 방식은 하나의 소형 서보모터를 부하 없이 간단히 테스트할 때만 유효합니다. 서보모터는 움직일 때 상당한 전류를 소모하므로, 두 개 이상의 서보모터를 사용하거나 큰 부하가 걸리는 프로젝트에서는 아두이노의 5V 핀에서 직접 전원을 공급하면 보드가 손상되거나 오작동할 수 있습니다. 이러한 경우 반드시 외부 전원을 사용해야 하며, 이 내용은 섹션 4에서 자세히 다룹니다.2

앞서 설명했듯이, 서보모터를 제어하기 위한 50Hz의 정밀한 PWM 신호를 생성하는 것은 마이크로컨트롤러의 타이머와 인터럽트를 직접 다루어야 하는 복잡한 작업입니다. 아두이노는 이러한 복잡성을 해결하기 위해 Servo.h라는 강력한 라이브러리를 기본적으로 제공합니다.2

이 라이브러리는 아두이노 IDE에 내장되어 있어 별도의 설치 과정 없이 #include <Servo.h> 한 줄만 코드 상단에 추가하면 바로 사용할 수 있습니다.3

Servo.h 라이브러리는 내부적으로 타이머를 사용하여 필요한 PWM 신호를 생성해주므로, 사용자는 단순히 ‘몇 도로 움직여라’와 같은 직관적인 명령만 내리면 됩니다.

아두이노 서보모터 제어의 “Hello, World!”와 같은 예제가 바로 “Sweep” 스케치입니다. 이 예제는 서보모터의 축을 0도에서 180도까지 부드럽게 왕복 운동시킵니다. 아두이노 IDE의 파일 > 예제 > Servo > Sweep 경로에서 찾을 수 있습니다.3

다음은 Sweep 스케치의 전체 코드와 각 라인에 대한 상세한 설명입니다.4

#include <Servo.h> // 1. Servo 라이브러리를 코드에 포함시킵니다.

Servo myservo;  // 2. 'Servo' 타입의 객체(object) 'myservo'를 생성합니다.

int pos = 0;    // 3. 서보모터의 각도를 저장할 정수형 변수 'pos'를 선언하고 0으로 초기화합니다.

void setup() {
  myservo.attach(9);  // 4. 'myservo' 객체를 디지털 9번 핀에 연결합니다.
}

void loop() {
  // 5. 0도에서 180도까지 1도씩 증가하며 이동
  for (pos = 0; pos <= 180; pos += 1) { 
    myservo.write(pos); // 6. 'pos' 변수의 현재 값(각도)으로 서보모터를 이동시킵니다.
    delay(15);          // 7. 서보모터가 해당 위치로 이동할 시간을 15ms만큼 기다립니다.
  }

  // 8. 180도에서 0도까지 1도씩 감소하며 이동
  for (pos = 180; pos >= 0; pos -= 1) { 
    myservo.write(pos); // 9. 'pos' 변수의 현재 값(각도)으로 서보모터를 이동시킵니다.
    delay(15);          // 10. 서보모터가 해당 위치로 이동할 시간을 15ms만큼 기다립니다.
  }
}

코드 분석:

  1. #include <Servo.h>: 서보모터 제어에 필요한 모든 기능이 포함된 Servo 라이브러리를 사용하겠다고 선언합니다.

  2. Servo myservo;: Servo라는 클래스(설계도)를 바탕으로 myservo라는 이름의 실제 인스턴스(객체)를 만듭니다. 앞으로 myservo라는 이름을 통해 서보모터를 제어하게 됩니다.

  3. int pos = 0;: 서보모터의 목표 각도를 저장하기 위한 변수입니다.

  4. myservo.attach(9);: setup() 함수 내에서 실행되며, 우리가 생성한 myservo 객체를 물리적인 디지털 9번 핀에 연결(attach)하는 역할을 합니다. 이 명령이 실행된 후부터 9번 핀에서는 서보 제어 신호가 출력되기 시작합니다.

  5. for (pos = 0; pos <= 180; pos += 1): pos 변수를 0부터 180까지 1씩 증가시키는 반복문입니다.

  6. myservo.write(pos);: Servo 라이브러리의 핵심 함수 중 하나로, 괄호 안의 숫자(각도)에 해당하는 PWM 펄스를 생성하여 9번 핀으로 출력합니다.

  7. delay(15);: 이 코드는 매우 중요합니다. myservo.write() 명령은 전기 신호를 보내는 즉시 완료되지만, 모터가 물리적으로 해당 각도까지 회전하는 데는 시간이 걸립니다. 이 delay()는 모터에게 움직일 시간을 주는 역할을 하며, 이 값(15ms)을 조절하여 스윕 속도를 변경할 수 있습니다.4 만약 이 지연이 없다면,

    for 루프가 너무 빨리 실행되어 모터가 미처 따라오지 못하고 제대로 움직이지 않거나 떨림 현상이 발생할 수 있습니다.

  8. for (pos = 180; pos >= 0; pos -= 1): pos 변수를 180부터 0까지 1씩 감소시키는 두 번째 반복문입니다.

  9. myservo.write(pos);: 다시 write 함수를 사용하여 반대 방향으로 모터를 움직입니다.

  10. delay(15);: 마찬가지로 반대 방향으로 움직일 시간을 부여합니다.

이 Sweep 스케치는 서보 제어의 기본을 보여주는 훌륭한 예제이지만, delay() 함수의 사용은 한계점을 가집니다. delay()가 실행되는 동안 아두이노는 다른 어떤 작업(예: 센서 값 읽기, 버튼 입력 확인)도 할 수 없는 ‘멈춤’ 상태가 됩니다. 따라서 더 복잡하고 반응성이 중요한 프로젝트에서는 delay()를 사용하지 않는 비차단(non-blocking) 방식의 프로그래밍 기법이 필요합니다.

아두이노의 Servo.h 라이브러리는 서보모터 제어를 매우 간단하게 만들어주지만, 그 내부에는 단순한 각도 제어를 넘어선 강력하고 정밀한 기능들이 포함되어 있습니다. 라이브러리의 주요 함수들을 깊이 있게 이해하면, 다양한 종류의 서보모터를 더 효과적으로 사용하고, 전력 소모를 관리하며, 발생할 수 있는 문제들을 미리 예방할 수 있습니다.

attach() 함수는 소프트웨어적으로 생성한 서보 객체를 아두이노의 특정 디지털 핀에 물리적으로 연결하는 첫 단계입니다.

PWM 핀에 대한 고찰: 많은 튜토리얼에서 서보모터의 신호선을 물결표시(~)가 있는 PWM 핀에 연결하라고 권장하지만 5, 이는 반드시 지켜야 할 규칙은 아닙니다.

Servo.h 라이브러리는 아두이노의 analogWrite() 함수가 사용하는 하드웨어 PWM 기능과는 별개로, 내부 타이머 인터럽트를 사용하여 소프트웨어적으로 PWM 신호를 생성합니다. 따라서 이론적으로는 아두이노의 어떤 디지털 핀이든 서보모터 제어에 사용할 수 있습니다.21 다만, 라이브러리가 특정 하드웨어 타이머를 점유하기 때문에 충돌이 발생할 수 있습니다. 예를 들어, 아두이노 우노에서 Servo.h 라이브러리를 사용하면 Timer1이 점유되어, 동일한 타이머를 사용하는 핀 9와 10의 analogWrite() 기능이 비활성화됩니다.22

서보모터를 특정 위치로 이동시키는 명령은 두 가지 함수를 통해 내릴 수 있습니다.

read() 함수는 이름 때문에 초보자들에게 가장 큰 혼란을 주는 함수 중 하나입니다.

detach() 함수는 attach()와 반대되는 개념으로, 지정된 핀에 PWM 신호 전송을 중단시킵니다.

함수 문법 파라미터 반환값 목적 및 주요 고려사항
attach() servo.attach(pin); servo.attach(pin, min, max); pin: 디지털 핀 번호 min: 0도 펄스 폭 (µs, 선택사항) max: 180도 펄스 폭 (µs, 선택사항) 없음 서보 객체를 물리적 핀에 연결하고 PWM 신호 생성을 시작합니다. min, max 파라미터로 서보의 동작 범위를 보정할 수 있습니다.
write() servo.write(angle); angle: 목표 각도 (0-180) 없음 서보를 지정된 각도로 이동시킵니다. 가장 일반적이고 직관적인 제어 방식입니다.
writeMicroseconds() servo.writeMicroseconds(us); us: 펄스 폭 (µs) 없음 펄스 폭을 직접 지정하여 정밀하게 제어합니다. 비표준 서보나 연속 회전 서보 제어에 필수적입니다.
read() servo.read(); 없음 int (0-180) 주의: 실제 서보 위치가 아닌, 마지막으로 write()에 전달된 각도 값을 반환합니다.
attached() servo.attached(); 없음 bool 서보 객체가 현재 특정 핀에 attach 되어 있는지 여부를 확인합니다. (true/false)
detach() servo.detach(); 없음 없음 핀에서 PWM 신호 생성을 중단합니다. 전력 소모를 줄이거나 다중 서보를 안정적으로 제어할 때 사용됩니다.

표 2: Servo.h 라이브러리 함수 참조표

아두이노 프로젝트, 특히 모터와 같은 구동 부품을 포함하는 프로젝트에서 발생하는 문제의 상당수는 코드의 논리적 오류가 아닌 부적절한 전원 공급에서 비롯됩니다. 서보모터는 정밀한 제어가 가능한 만큼 안정적인 전원 공급이 매우 중요하며, 이를 간과할 경우 예측 불가능한 오작동의 원인이 됩니다.

초보자들이 가장 쉽게 저지르는 실수 중 하나는 서보모터의 전원을 아두이노 보드의 5V 핀에서 직접 공급하는 것입니다. 하나의 소형 서보모터(SG90 등)를 부하 없이 잠시 테스트하는 것은 가능하지만, 이는 매우 제한적인 상황에서만 허용되는 방식입니다.

이러한 이유로, 프로젝트에서 서보모터가 갑자기 멈추거나, 아두이노 보드가 계속해서 재시작되는 등의 이상 현상이 발생한다면, 가장 먼저 의심해야 할 것은 코드가 아니라 전원 문제입니다. 결론적으로, 하나 이상의 서보모터를 사용하거나, 단 하나의 서보라도 부하가 걸리는 작업을 수행하는 모든 프로젝트에서는 반드시 외부 전원 공급 장치를 사용해야 합니다.2

외부 전원을 사용하는 것은 프로젝트의 안정성을 보장하는 가장 중요한 단계입니다. 올바른 외부 전원 연결 방법은 다음과 같습니다.

서로 다른 전원을 사용하는 두 개 이상의 전자 부품을 연결할 때, 모든 부품의 접지(GND)를 하나로 묶어주는 ‘공통 접지’는 회로가 올바르게 동작하기 위한 절대적인 전제 조건입니다.38

전압은 절대적인 값이 아니라 두 지점 간의 상대적인 전위차입니다. 아두이노가 디지털 핀에서 출력하는 5V 신호는 ‘아두이노 자신의 GND를 기준으로 5V 높다’는 의미입니다. 서보모터의 제어 회로는 이 신호를 ‘서보모터 자신의 GND를 기준으로’ 해석합니다.

만약 아두이노의 GND와 서보모터의 GND(외부 전원의 음극)가 연결되어 있지 않다면, 두 시스템은 서로 다른 기준점을 가지게 됩니다. 이 경우 아두이노가 보내는 신호는 서보모터에게 아무런 의미가 없는 노이즈로 인식될 수 있으며, 이는 모터가 전혀 움직이지 않거나 예측 불가능하게 흔들리는 원인이 됩니다.

모든 부품의 GND를 하나로 연결함으로써, 회로 전체에 일관된 0V 기준점이 형성됩니다. 이 공통된 기준점을 바탕으로 아두이노가 보내는 신호 전압이 서보모터에 의해 정확하게 해석될 수 있는 것입니다. 따라서 외부 전원을 사용할 때는 항상 “신호는 아두이노에서, 전원은 외부에서, 접지는 함께”라는 원칙을 기억해야 합니다.

서보모터를 단순히 정해진 순서대로 움직이는 것을 넘어, 외부 입력에 실시간으로 반응하도록 만드는 것은 프로젝트에 생명력을 불어넣는 과정입니다. 가변저항기나 조이스틱과 같은 아날로그 센서를 활용하면 서보모터를 수동으로 정밀하게 제어할 수 있으며, 여러 개의 서보모터를 조화롭게 움직이는 기술은 로봇팔과 같은 복잡한 시스템을 구현하는 기반이 됩니다.

가변저항기(Potentiometer)는 손잡이를 돌리는 각도에 따라 저항값이 변하는 부품으로, 서보모터의 각도를 직관적으로 제어하는 데 널리 사용됩니다.

조이스틱 모듈은 두 개의 가변저항기를 X축과 Y축으로 결합한 형태로, 2개의 서보모터를 동시에 제어하여 카메라 팬-틸트 시스템이나 로봇팔의 관절을 제어하는 데 이상적입니다.45

여러 개의 서보모터를 제어하는 것은 단순히 서보의 개수만 늘리는 것이 아니라, 코드 구조와 전원 관리에 대한 전략적인 접근이 필요합니다.

아두이노와 서보모터를 이용한 프로젝트를 진행하다 보면 예상치 못한 문제에 부딪히게 됩니다. 가장 흔하게 발생하는 문제인 ‘지터(Jitter)’ 현상부터 전혀 움직이지 않는 상황까지, 다양한 문제의 원인을 진단하고 해결하는 방법을 체계적으로 알아두는 것은 성공적인 프로젝트 완성을 위해 필수적입니다. 물리 컴퓨팅의 문제 해결은 코드, 하드웨어, 전원이라는 세 가지 요소를 통합적으로 고려하는 시스템적 접근이 필요합니다.

‘지터’는 서보모터가 특정 각도에서 가만히 있지 못하고 미세하게 계속 떨거나 ‘드르륵’거리는 소음을 내는 현상을 말합니다. 이는 매우 흔한 문제이며, 원인은 복합적일 수 있습니다.

지터 외에도 다양한 오작동이 발생할 수 있습니다. 다음은 일반적인 문제와 해결을 위한 점검 목록입니다.

증상 가장 가능성 높은 원인 해결 방안 (우선순위 순)
서보가 떨리거나 진동함 (Jitter) 1. 불안정한 전원 공급 2. 불안정한 센서 입력 3. 신호선 노이즈 1. 외부 전원 공급 장치 사용 2. 서보 전원단에 전해 커패시터 추가 3. 코드에 입력값 필터링 로직 추가 (임계값 설정) 4. 이동 후 detach() 함수 호출
서보가 전혀 움직이지 않음 1. 배선 오류 (VCC, GND, Signal) 2. 공통 접지 누락 3. 코드와 실제 핀 불일치 1. 모든 배선(특히 공통 접지)을 재확인 2. 외부 전원이 켜져 있는지 확인 3. attach()의 핀 번호 확인
서보가 움직일 때 아두이노가 재부팅됨 아두이노 5V 핀의 전류 부족 (Brownout) 1. 즉시 외부 전원으로 전환
서보가 윙 소리를 내며 뜨거워짐 스톨(Stall) 상태 (기계적 방해 또는 과부하) 1. 전원을 차단하고 장애물 제거 또는 부하 감소 2. 더 높은 토크의 서보로 교체
동작 범위가 180도보다 좁음 1. 서보 자체의 기계적 한계 2. 펄스 폭 범위 불일치 1. attach(pin, min, max)를 사용하여 펄스 폭 범위 보정 2. (해결 불가 시) 해당 서보의 한계로 인정하고 설계에 반영

표 3: 서보모터 문제 해결 매트릭스

지금까지 학습한 서보모터의 원리, 배선, 프로그래밍, 전원 관리 및 문제 해결 기법들을 종합하여 실제 프로젝트를 만들어보는 것은 이론을 체화하는 가장 효과적인 방법입니다. 이 섹션에서는 세 가지 대표적인 프로젝트 예시를 통해 배운 지식을 어떻게 실용적인 창작물로 구현할 수 있는지 단계별로 안내합니다. 각 프로젝트는 준비물, 회로도, 그리고 상세한 주석이 달린 코드를 포함합니다.

2~3개의 서보모터를 사용하여 간단한 로봇팔을 제작하는 것은 다중 서보 제어와 외부 입력 연동을 연습하는 훌륭한 프로젝트입니다. 가변저항기나 조이스틱으로 각 관절을 직접 조작하며 움직임의 원리를 직관적으로 이해할 수 있습니다.49

서보모터 2개를 직교로 연결하면 카메라나 센서의 방향을 상하(Tilt) 및 좌우(Pan)로 제어할 수 있는 팬-틸트 시스템을 만들 수 있습니다. 이는 감시 카메라, 물체 추적 시스템, 태양광 추적 장치 등의 기본이 되는 메커니즘입니다.58

초음파 센서나 적외선(IR) 센서와 서보모터를 결합하면, 물체가 접근했을 때 자동으로 문이 열리는 시스템을 만들 수 있습니다. 이는 센서 입력에 따른 이벤트 기반 프로그래밍을 연습하는 데 매우 좋은 예제입니다.62

이 프로젝트는 센서 데이터라는 외부 환경 변화에 반응하여 물리적인 동작을 수행하는 상호작용 시스템의 기본 원리를 명확하게 보여줍니다.65

이러한 프로젝트들을 직접 만들어봄으로써, 사용자는 각 부품의 기능과 코드의 역할을 통합적으로 이해하고, 자신만의 아이디어를 현실로 구현할 수 있는 응용력과 자신감을 얻게 될 것입니다.

  1. Servo Motors and Pulse Width Modulation (PWM) - IGNITE Pathways, accessed July 20, 2025, https://www.ignitepathways.org/post/servo-motor
  2. 아두이노 서보모터 활용 - 학생을 위한 SW 메이커 - 티스토리, accessed July 20, 2025, https://swmakerjun.tistory.com/62
  3. SG90 Servo Motor: Understanding Operation & Position Control Using Arduino, accessed July 20, 2025, https://jawhersebai.com/tutorials/how-to-use-the-sg90-servo-motor/
  4. Servo Motor (SG90) - SunFounder Ultimate Sensor Kit …, accessed July 20, 2025, https://docs.sunfounder.com/projects/ultimate-sensor-kit/en/latest/components_basic/27-component_servo.html
  5. [Arduino]03.PWM과 서보모터 - 너랑나랑개발자이야기 - 티스토리, accessed July 20, 2025, https://you-rang.tistory.com/23
  6. Servo control - Wikipedia, accessed July 20, 2025, https://en.wikipedia.org/wiki/Servo_control
    1. 아두이노를 이용한 PWM(Pulse Width Modulation) 제어, accessed July 20, 2025, http://his.pusan.ac.kr/bbs/milab/4739/552457/download.do
  7. Controlling Servos Onion Omega2 Maker Kit, accessed July 20, 2025, https://docs.onion.io/omega2-maker-kit/maker-kit-servo-controlling-servo.html
  8. 아두이노에서 서보모터 SG-90 사용하는 방법, accessed July 20, 2025, https://diyver.tistory.com/105
  9. How to Control Servo with PWM? - Lunyee Electric Motors and Drives Supplier, accessed July 20, 2025, https://www.lunyee.com/news/faq/how-to-control-servo-with-pwm.html
  10. 아두이노 예제 10. 서보모터 제어하기 - 코딩런, accessed July 20, 2025, https://codingrun.com/110
  11. How does a servo motor work? - DigiKey TechForum, accessed July 20, 2025, https://forum.digikey.com/t/how-does-a-servo-motor-work/2645
  12. SERVO MOTOR SG90 DATA SHEET, accessed July 20, 2025, http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf
  13. 서보 모터는 어떻게 동작하나요?, accessed July 20, 2025, https://forum.digikey.com/t/topic/20813
  14. How to Control the SG90 Servo Motor With the Arduino UNO : 7 …, accessed July 20, 2025, https://www.instructables.com/How-to-Control-the-SG90-Servo-Motor-With-the-Ardui/
  15. [아두이노] 서보모터와 아두이노와 연결하고 코딩하기! - YouTube, accessed July 20, 2025, https://www.youtube.com/watch?v=m8f1q7TdcVk
  16. Using the SG90 Servo Motor With an Arduino - Electronics-Lab.com, accessed July 20, 2025, https://www.electronics-lab.com/project/using-sg90-servo-motor-arduino/
  17. Servo Motor Basics with Arduino Arduino Documentation, accessed July 20, 2025, https://docs.arduino.cc/learn/electronics/servo-motors
  18. [아두이노 서보모터] 서보모터 제어하기 - 병아리 개발자의 이야기 - 티스토리, accessed July 20, 2025, https://kgu0724.tistory.com/146
  19. Servo - Arduino Documentation - oyoclass.com, accessed July 20, 2025, https://docs.oyoclass.com/unoeditor/Libraries/servo/
  20. Servos: attach() and write() - Arduino Stack Exchange, accessed July 20, 2025, https://arduino.stackexchange.com/questions/44380/servos-attach-and-write
  21. Arduino Servo Motors : 5 Steps (with Pictures) - Instructables, accessed July 20, 2025, https://www.instructables.com/Arduino-Servo-Motors/
  22. 서보모터-제어하기 - 코코아팹, accessed July 20, 2025, https://www.kocoafab.cc/tutorial/view/354
  23. write() - Servo Reference - Particle docs, accessed July 20, 2025, https://docs.particle.io/reference/device-os/api/servo/write/
  24. Servo.read() and Servo.write() help - Programming - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/servo-read-and-servo-write-help/137733
  25. How do you get servo position in arduino? - Frequently-Asked Questions, accessed July 20, 2025, https://forum.arduino.cc/t/how-do-you-get-servo-position-in-arduino/4760
  26. Servo.Read Function not working : r/arduino - Reddit, accessed July 20, 2025, https://www.reddit.com/r/arduino/comments/108ioqf/servoread_function_not_working/
  27. How to use the read() function of Servo library - Programming - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/how-to-use-the-read-function-of-servo-library/264937
  28. Servo.read function not working - Programming - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/servo-read-function-not-working/1075761
  29. 아두이노 내부전원으로 서보모터(SG-90) 여러개 사용하는 방법, accessed July 20, 2025, https://diyver.tistory.com/114
  30. Avoiding servo jitter - General Electronics - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/avoiding-servo-jitter/606480
  31. Why does my servo jitter like this. Is it stupid? : r/arduino - Reddit, accessed July 20, 2025, https://www.reddit.com/r/arduino/comments/15ema3u/why_does_my_servo_jitter_like_this_is_it_stupid/
  32. 【 아두이노에러해결#4】 서보모터 떨림, 흔들림, 불안정 현상 해결 …, accessed July 20, 2025, https://rasino.tistory.com/250
  33. Servo jitter, how do you fix it? - Motors, Mechanics, Power and CNC - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/servo-jitter-how-do-you-fix-it/390128
  34. ESP32 Servo Motor with Arduino Code: SG90 (blue) Study Case - uPesy, accessed July 20, 2025, https://www.upesy.com/blogs/tutorials/esp32-servo-motor-with-arduino-code-sg90
  35. Arduino servo motor is not moving or jittering– 7 Easy Fixes to Get It Working Smoothly, accessed July 20, 2025, https://eleobo.com/arduino-servo-motor-is-not-moving-or-jittering/
  36. 【 아두이노 기초 】 #29 서보(Servo) 모터 제어 하기 2 - 라즈이노 iOT, accessed July 20, 2025, https://rasino.tistory.com/147
  37. Arduino : How to Use a Servo Motor With an External Power : 5 …, accessed July 20, 2025, https://www.instructables.com/Arduino-How-to-Use-a-Servo-Motor-With-an-External-/
  38. Arduino Powering Multiple Servos and Motors - YouTube, accessed July 20, 2025, https://m.youtube.com/watch?v=M4DLpyEQ_SE&pp=ygUPI3NlcnZvc3RlcHBvd2Vy
  39. Need to power multiple servos. New to electrical engineering and would appreciate some help. : r/arduino - Reddit, accessed July 20, 2025, https://www.reddit.com/r/arduino/comments/308313/need_to_power_multiple_servos_new_to_electrical/
  40. Connecting an Arduino to a servo with an external power supply, accessed July 20, 2025, https://arduino.stackexchange.com/questions/57508/connecting-an-arduino-to-a-servo-with-an-external-power-supply
  41. [모듈 1-3] 아두이노 서보모터 제어하기 (feat. For 구문) - 함께 성장하는 교사 원킹, accessed July 20, 2025, https://pythonkorea.com/3
  42. Arduino Servo Control Using Potentiometer - Techatronic, accessed July 20, 2025, https://techatronic.com/arduino-servo-control-using-potentiometer/
  43. 아두이노 가변저항으로 서보모터 제어하기 - 애코.Fact - 티스토리, accessed July 20, 2025, https://jagglife.tistory.com/15
  44. JoyStick과 서보 모터를 연결해서 서보 모터 제어하기 - Design - 티스토리, accessed July 20, 2025, https://designatedroom87.tistory.com/301
  45. [아두이노] 아두이노로 조이스틱 제어하기 with 서보모터, DC모터 - YouTube, accessed July 20, 2025, https://www.youtube.com/watch?v=B4riJcIEYes
  46. 아두이노 : 조이스틱으로 서보모터 조종하기 - 1편 - AI 탐구노트 - 티스토리, accessed July 20, 2025, https://42morrow.tistory.com/entry/%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1%EC%9C%BC%EB%A1%9C-%EC%84%9C%EB%B3%B4%EB%AA%A8%ED%84%B0-%EC%A1%B0%EC%A2%85%ED%95%98%EA%B8%B0
  47. 아두이노 - 서보모터 SG90 & 조이스틱 모듈 - JaeBaek - 티스토리, accessed July 20, 2025, https://jaebaeklee.tistory.com/55
  48. [로봇팔 제어 프로젝트 (완성)] 3개의 조이스틱을 이용한 6관절 로봇팔 제어 - e4ds make, accessed July 20, 2025, https://make.e4ds.com/make/learn_project_view.asp?idx=109
    1. 아두이노 서보모터 SG90 제어. Arduino Servo SG90 Control Example - 마법사 kjs의 활동기록지, accessed July 20, 2025, https://kjswizard.tistory.com/12
  49. 한 아두이노에 여러 개의 서보모터(servo motor) 돌리기 (덜덜 떨리거나, 작동하지 않을 경우 해결책 - WON, accessed July 20, 2025, https://wonjongah.tistory.com/51
  50. Servo motors jittering with a new power supply, what could be causing it? : r/arduino - Reddit, accessed July 20, 2025, https://www.reddit.com/r/arduino/comments/1en6d1h/servo_motors_jittering_with_a_new_power_supply/
  51. Arduino Robotic Arm Arduino Project Hub, accessed July 20, 2025, https://projecthub.arduino.cc/milespeterson101/arduino-robotic-arm-8b8601
  52. Build a Robotic Arm Science Project, accessed July 20, 2025, https://www.sciencebuddies.org/science-fair-projects/project-ideas/Robotics_p050/robotics/arduino-robotic-arm
  53. How to Build the Easiest Robotic Arm at Home : 5 Steps - Instructables, accessed July 20, 2025, https://www.instructables.com/Easiest-Robotic-Arm-With-Arduino/
  54. [로봇 팔 제어 프로젝트] 블루투스 통신을 이용한 6관절 로봇 팔 제어 - e4ds make, accessed July 20, 2025, https://make.e4ds.com/make/learn_project_view.asp?idx=114
  55. DIY Arduino Robot Arm with Smartphone Control - How To Mechatronics, accessed July 20, 2025, https://howtomechatronics.com/tutorials/arduino/diy-arduino-robot-arm-with-smartphone-control/
  56. 아두이노에서 이미지 센서를 이용한 색상 트래킹 - 팬틸트 구현 Pan Tilt - PinkWink, accessed July 20, 2025, https://pinkwink.kr/1150
  57. 서보 모터 고정 팬/틸트 거치대 + 서보모터 2 개 / Servo Control Camera Pan Tilt Unit + SG90 Motor, accessed July 20, 2025, https://www.gameplusedu.com/m2/goods/view_detail.php?goodsno=618
  58. DIY Arduino Camera Robot (Motorized Pan Tilt Head) - Instructables, accessed July 20, 2025, https://www.instructables.com/DIY-Arduino-Camera-Robot-Motorized-Pan-Tilt-Head/
  59. Pan Tilt camera platform - Interfacing - Arduino Forum, accessed July 20, 2025, https://forum.arduino.cc/t/pan-tilt-camera-platform/14026
  60. 아두이노 작품_적외선 센서를 활용한 자동문 만들기 - YouTube, accessed July 20, 2025, https://www.youtube.com/watch?v=a5o6m0B1XF8
  61. [40편] 서보 모터로 자동문 만들기 아두이노 입문 - YouTube, accessed July 20, 2025, https://www.youtube.com/watch?v=2ZZ_Mtfw818
  62. 자동문 만들기 - 잡토이, accessed July 20, 2025, https://www.jobtoy.com/project/main_view?idx=224
  63. Automatic Door Opening System using Arduino - YouTube, accessed July 20, 2025, https://m.youtube.com/watch?v=dadFgqM8nY4
  64. Automatic Door   Arduino Uno Projects   PIR Sensor   Servo Motor - YouTube, accessed July 20, 2025, https://www.youtube.com/watch?v=BE8ngLA4Y2c