-
아두이노 라이브러리 | 서보모터 정밀 제어Technology/Arduino 2024. 11. 24. 13:39
1. 서보모터 각도 보정
다양한 종류의 서보모터를 사용하다보면 Servo.write(0)과 Servo.write(180)을 선언하여도 0도와 180도에 정확하게 도달하지 않는 경우가 있을 수 있는데, 원인을 알기 위해서는 서보모터 객체에 디지털 핀 번호를 할당하는 메소드 Servo.attach()를 선언하는 방법을 상세하게 알 필요가 있다. Servo.attach()를 선언할 때 부가 기능으로 PWM 신호에서 HIGH를 유지하는 최소 시간과 최대 시간을 추가로 정의할 수 있는데, 이를 정의하지 않으면 최소 시간은 544 μs으로, 최대 시간은 2400 μs이 자동으로 정의된다. 이 상태에서 Servo.write(0)을 선언한다면 주기가 20 ms이면서 0.544 ms동안 HIGH를 유지하는 PWM 신호가, Servo.write(180)을 선언한다면 2.4 ms동안 HIGH를 유지하는 신호가 출력된다.
본인이 사용하고자 하는 서보모터가 1000 μs에서 0도로, 2000 μs에서 180도로 동작한다면 Servo.attach()를 선언할 때 이를 반영할 필요가 있다. 이를 반영하여 Servo.write(0)을 선언한다면 주기가 20 ms이면서 1.0 ms동안 HIGH를 유지하는 PWM 신호가, Servo.write(180)을 선언한다면 2.0 ms동안 HIGH를 유지하는 신호가 출력된다. 만약 제조사에서 PWM에 따른 서보모터 동작 각도 정보를 제공하지 않고, 별도의 부가 기능 정의 없이 Servo.write()로 서보모터를 제어했을 때 동작 각도가 정확하지 않다면 여러 숫자를 넣어보면서 찾아낼 필요가 있다.
2. 서보모터 정밀 제어
Servo.write()를 이용하면 1도 단위로 각도를 제어할 수 있지만, 1도보다 작은 단위로 서보모터를 제어하고자 한다면 Servo.writeMicroseconds()를 이용하는 것을 추천한다. 해당 메소드를 선언하면 PWM 신호에서 HIGH를 유지하는 시간을 직접 선택하여 신호를 생성할 수 있다. Servo.writeMicroseconds(1200)을 선언한다면 1.2 ms동안 HIGH를 유지하는 PWM 신호가, Servo.writeMicroseconds(1850)을 선언한다면 1.85 ms동안 HIGH를 유지하는 신호가 출력된다. 1000 μs에 0도, 2000 μs에 180도로 동작하는 서보모터 기준으로, Servo.write()를 사용하면 최소 회전 단위가 1도지만 Servo.writeMicroseconds()를 사용한다면 0.18도를 기대해볼 수 있다.
3. 예제
3.1. 회로 구성2.2. 프로그램 작성
#include <Servo.h> // 서보모터 라이브러리 추가 Servo myServo; // myServo라는 이름의 서보모터 객체 생성 void setup() { // 서보모터를 제어할 핀으로 12번 핀을 설정 // PWM HIGH 유지 최소 시간을 1000 μs, 최대 시간을 2000 μs으로 설정 myServo.attach(12, 1000, 2000); } void loop() { myServo.write(0); // 서보모터를 0도로 회전 delay(1000); // 1000 ms 대기 myServo.write(90); // 서보모터를 90로 회전 delay(1000); myServo.write(180); // 서보모터를 180도로 회전 delay(3000); myServo.writeMicroseconds(1500); delay(1000); myServo.writeMicroseconds(1000); delay(3000); // 서보모터를 0.18도씩 회전 for (int i = 1001; i <= 2000; i++) { myServo.writeMicroseconds(i); delay(500); } delay(1000); // 서보모터를 0.18도씩 역회전 for (int i = 1999; i >= 1001; i--) { myServo.writeMicroseconds(i); delay(500); } delay(1000); }
[함께 읽으면 좋은 페이지]
참고문헌
- Margolis, M. (2024). Servo. Arduino Documentation. https://docs.arduino.cc/libraries/servo/. 2024.11.25.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 라이브러리 | 비접촉 자기 엔코더 센서 AS5600 모듈 (2) 2024.11.26 아두이노 | BLDC모터 (0) 2024.11.25 아두이노 프로젝트 | 휴대용 냉각기 (0) 2024.11.23 아두이노 | 펠티어 열전소자 (0) 2024.11.22 아두이노 SPI 통신 | 열전대 써모커플 증폭 모듈 MAX31856 (0) 2024.11.21