아두이노 서보모터 효율적으로 쓰는 법 알아보기(전류를 아끼는 방법)


안녕하세요 메카솔루션입니다.


서보모터를 사용하다보면 움직이지 않는다 덜덜덜.. 거리면서 떨리는 잡음이 들리거나 한데 따로 뭔갈 지탱하는 목적도 아니라 소음을 줄이거나 전류를 아끼고 싶은 경우가 있을때 그 전류를 아끼는 방법이 한가지 있습니다.

다음 영상처럼  서보모터가 움직이지는 않지만 약간의 떨림을 유지하고 힘으로 눌러도 자신의 위치를 고정하고자 합니다.



서보모터로 버튼을 간단하게 누른다거나 아니면 잠금장치 처럼 뭔가를 걸리게 하는 용도라면 굳이 상태를 고정하거나 하지 않고 움직이지 않는 동안에는 덜덜 떨면서 자신의 위치를 유지하기 위해 전류를 쓸 필요는 없을 것입니다.


그렇다면 저희의 목적은 사용하지 않을때의 서보모터의 동작을 비활 성화 하는 것입니다.


바로 서보모터의 servo.detach() 함수를 실행하는 것입니다.

servo.attach(서보 핀번호);

servo.write(서보 각도);


이렇게 두가지는 아는사람이 많지만 아두이노 예제에서도 주로 사용되지 않았기때문에 많은 사람들이 몰랐던 함수입니다.


아두이노의 서보모터 신호선에서는 PWM 형식으로 펄스를 보내 서보모터를 제어합니다. 

해당 펄스가 계속 지속되는 한은 서보모터는 현제 각도를 유지하게 됩니다.


반대로 서보모터의 신호선에서 아무런 출력도 내보내지 않는 다면 서보모터는 자신의 각도를 유지하지 않게 됩니다. 즉 서보모터 내부의 모터에 전류가 공급 되지 않는 다는 의미로 생각하면 됩니다.


움직일때는 어쩔수 없지만 대기 시간동안에는 어느정도 전류를 아낄 수 있겠지요?


영상과 소스코드를 보고 마치도록 하겠습니다.





#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(A0);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
  delay(1000);
}

void loop() {
  servo_ON();
  delay(5000);
  servo_OFF();
  delay(5000);
}

void servo_ON(){
  myservo.attach(A0);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
  delay(500);
  myservo.detach();
}

void servo_OFF(){
  myservo.attach(A0);  // attaches the servo on pin 9 to the servo object
  myservo.write(0);
  delay(500);
  myservo.detach();
}
감사합니다.

출처 : 메카솔루션

모바일 버전으로 보기