반응형

가장 심플한 서보모터 회로도이다.

 


#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 값을 출력해라

둘 다 같은 동작을 한다는 것이다.

 


 

위 예제에 대한 결과이다.

 

반응형

+ Recent posts