Arduino Uno : 서보 모터 라이브러리 사용 방법
아두이노에서 제공되는 Servo 라이브러리를 사용하는 방법을 소개
합니다.Servo 라이브러리 설치 방법
Arduino IDE 사용자
Arduino IDE를 실행 후 라이브러리 매니저에서 Servo 를 검색 후 설치합니다. 아래 그림을 캡처하기 위해 Arduino IDE 를 처음 설치한 PC에서 라이브러리 매니저를 설행하고, Servo 를 검색 했는데 이미 설치가 된 것으로 나오네요. 최신 버전은 설치시 기본 라이브러리로 되는 건지...
Arduino IDE Servo 라이브러리 설치 방법
Visual Studio Code 사용자
제 블로그에 Visual Studio Code 로 아두이노를 프로그래밍 하는 방법을 소개한 것처럼 Visual Studio Code 를 사용하여 Arduino 를 프로그래밍 하시는 분은 아래 그림과 같이 F1키를 누르고 Library Manager 실행 후 Servo 를 검색하고 Servo 라이브러리 설치 후 Servo 라이브러리를 Include 하시면 됩니다.
VScode Servo 라이브러리 설치 방법
Servo 라이브러리 사용 방법
아두이노 우노 보드가 아닌 다른 아두이노 보드를 사용하시는 분은 아두이노 사이트에서 자신의 보드가 지원되는지 확인이 필요합니다. 1
Servo 라이브러리는 MCU 내의 Timer1을 사용하기 때문에, 해당 라이브러리를 사용하는 경우 Arduino Uno 의 9번, 10번핀을 PWM 출력으로 사용할 수 없습니다. Servo 라이브러리는 아래의 함수를 지원합니다.
attach()
attach() 는 Servo Motor 제어할 핀을 설정 합니다. 일반적으로 첫번째 Syntax 의 servo.attach(pin) 와 같이 많이 사용합니다. 사용할 Servo Motor 의 Duty Time 이 544 ~ 2400 us 가 아닌 경우에는 min, max 값 입력이 필요합니다.
Syntax
- servo.attach(pin)
- servo.attach(pin, min, max)
Parameters
- servo : Servo 클래스 객체명
- pin : 서보 모터 연결 핀 Arduino Uno 보드의 경우 9번 또는 10번 핀 사용 가능
- min(optional) : 최소 각도(0º) 일 때 HIGH 유지 시간
- max(optional) : 최대 각도(180º) 일 때 HIGH 유지 시간
Example
myservo.attach(9): 서보 모터 9번 핀으로 초기화
attached()
detach()
write()
writeMicroseconds()
read()
servo.read() 서보 모터에 마지막으로 설정한 각도 값을 반환합니다. Servo 모터 현재 상태를 읽어 오는 것이 아니라, 마지막으로 servo.write() 함수로 설정 한 한 값을 기억했다가 반환해줍니다.
Servo 사용해보기
Servo 모터 라이브러리를 사용하면 코드 몇 줄로 서보 모터를 간단하게 제어 할 수 있습니다.
예제1 : Servo Motor Sweep
아래 코드는 1초 간격으로 Servo Motor 가 0º 와 180º 로 제어하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <Servo.h> Servo servo; void setup(){ servo.attach(9); } void loop(){ servo.write(0); delay(1000); servo.write(180); delay(1000); } | cs |
코드는 간단해서 따로 설명은 필요 없을 것 같습니다. 코드를 실행하면 서보 모터가 1초 간격으로 0º 와 180º 로 반복하며 회전합니다.
예제2 : 가변저항으로 서보모터 제어
예제2에 사용한 회로도와 연결 방법 예시는 아래와 같습니다. 가변저항은 10kΩ 을 사용했으며, 1kΩ 이상의 가변저항이면 아무 크기나 써도 상관없습니다. Servo Motor 의 데이터 핀은 Arduino Uno 의 9번 또는 10번 핀에 연결 되어야 합니다.
서보 모터 회로도 및 연결 예시
아래는 가변 저항의 전압 0~5V 범위 입력 값에 따라 Servo Motor 를 0 ~ 180º 로 제어하는 코드입니다. 가변저항 아날로그 입력 및 map() 함수 사용법이 필요하신 분은 하단의 관련 포스트를 참조해주세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <Servo.h> #define SERVO 9 #define POTENTIOMETER A0 Servo servo; void setup(){ servo.attach(9); } void loop(){ int value = analogRead(A0); int angle = map(value, 0, 1023, 0, 180); servo.write(angle); delay(10); } | cs |
아래는 위 코드를 실행한 화면입니다. 가변저항의 회전에 따라 Servo Motor 가 회전합니다.
마무리
Arduino Uno 를 사용하여 서보모터 SG90 을 제어하는 기초적인 방법
을 소개하였습니다. 아두이노에서 제공되는 서보모터 라이브러리를 사용하면 쉽게 구현이 가능합니다. 다만, 라이브러리를 사용하는 경우 Timer 1번을 사용하는 9핀과 10번핀은 PWM 포트 출력으로 사용 할 수 없습니다.끝까지 읽어 주셔서 감사합니다.😊
- https://www.arduino.cc/reference/en/libraries/servo/ [본문으로]
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #31 Step Stepper Motor 내부 구조 동작 원리 (0) | 2020.08.30 |
---|---|
아두이노 코딩 : 시리얼 통신으로 서보 모터 SG90 제어 (1) | 2020.08.29 |
아두이노 강좌 #29 Servo Motor SG90 라이브러리 없이 사용 (0) | 2020.08.28 |
아두이노 강좌 #28 2차원 배열 PROGMEM 매크로 사용 방법 (0) | 2020.08.26 |
아두이노 강좌 #27 동적 메모리 용량 부족 문제 PROGMEM F() 메크로로 해결 (1) | 2020.08.25 |