반응형
가장 심플한 서보모터 회로도이다.
#include <Servo.h>
Servo servo;
void setup() {
Serial.begin(9600);
servo.attach(9);
}
void loop() {
Serial.println("write angle 0");
servo.write(0);
delay(2000);
Serial.println("writeMicroseconds angle 0");
servo.writeMicroseconds(544);
delay(2000);
Serial.println("write angle 90");
servo.write(90);
delay(2000);
Serial.println("writeMicroseconds angle 90");
servo.writeMicroseconds(1472);
delay(2000);
Serial.println("write angle 180");
servo.write(180);
delay(2000);
Serial.println("writeMicroseconds angle 180");
servo.writeMicroseconds(2400);
delay(2000);
}
서보모터 라이브러리를 사용하여 만든 위 회로도에 대한 예제 소스코드이다.
2초마다 서보모터 각도에 대한 상태변화를 하며 write 함수와 writeMicroseconds 함수로 교차하며 상태변화를 줄 것이다.
각 상태변화마다 현재 상태를 시리얼 모니터로 출력한다.
MG90 서보모터 데이터시트의 PWM에 대한 설명이다.
MG90 서보모터는 0도에서 180도까지만 회전한다.
write 함수는 0에서 180까지의 값을 넣으면 바로 그 각도로 상태변화를 하지만 writeMicroseconds 함수는 20ms의 PWM 주기에서 얼마 동안의 milliseconds(microseconds 아님) 동안 HIGH 값을 출력할 건지 정할 수 있다. PWM 라이브러리를 까보면 write 함수도 사용자의 편의를 위해 만들어진 것이지 최종적으로는 writeMicroseconds로 동작을 한다.
즉 소스코드를 다시 보면
servo.write(90);
servo.writeMicroseconds(1472);
20ms의 PWM 주기에서 1472 milliseconds(1.472ms) 동안 HIGH 값을 출력해라
둘 다 같은 동작을 한다는 것이다.
위 예제에 대한 결과이다.
반응형
'공부 > 아두이노' 카테고리의 다른 글
[아두이노] EEPROM 라이브러리를 이용한 비휘발성 메모리 저장 (0) | 2023.12.12 |
---|---|
[아두이노] PWM 라이브러리를 이용한 MG90 서보모터 제어 (0) | 2023.12.12 |
[아두이노] PWM 기본 라이브러리 PWM.h ATimerDefs.h ATimerDefs.cpp BTimerDefs.h BTimerDefs.cpp 소스 코드 (1) | 2023.12.12 |
[아두이노] IR 적외선 리모컨 수신 데이터 0xFFFFFFFF 해결법 (0) | 2023.11.08 |
[아두이노] 서보모터 기본 라이브러리 Servo.h Servo.cpp ServoTimers.h 소스 코드 (1) | 2023.10.23 |