ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 한 아두이노에 여러 개의 서보모터(servo motor) 돌리기 (덜덜 떨리거나, 작동하지 않을 경우 해결책
    Arduino & Raspberry Pi 2021. 1. 23. 22:42

    한 아두이노나 라즈베리파이에 여러 개의 서보모터를 동작하고 싶을 때가 있다.

    혹은 서보모터 사용 시 덜덜 떨리고 소리가 나거나 제대로 작동하지 않는 경우도 있다.

    이럴 경우 전류를 효율적으로 공급하기 위해 servo.detach()를 사용한다.

     

    servo.attach()만 계속 사용하게 된다면 서보모터를 사용하지 않을 경우에도 전류가 흘러 전류가 부족한 경우가 생겨 서보모터가 덜덜 떨리거나 소리가 나거나 작동하지 않는다.

     

    서보모터를 사용할 때, servo.attach()를 사용하고 사용하지 않을 경우엔 servo.detach()를 통해 전류 공급을 중단하면 효율적으로 전류 공급이 가능하다.

    servo.detach()를 사용할 경우, servo.attach()와 짝을 맞춘다.

    servo.attach();
    servo.detach();

    ex)

    #include <Servo.h>
    
    #define servoPin1 D0
    #define servoPin2 D1
    #define servoPin3 D2
    
    Servo servo1;
    Servo servo2;
    Servo servo3;
    
    void servo1_OFF(){
      servo1.attach(servoPin1); // 사용할 때 attach()
        for(int angle = 0; angle < 100; angle++) 
      { 
        servo1.write(angle); 
        delay(10); 
      } 
       servo1.detach(); // 사용이 끝날 때 detach()
    }
    
    void servo1_ON(){
      servo1.attach(servoPin1);
        for(int angle = 100; angle > 0; angle--) 
      { 
        servo1.write(angle); 
        delay(10); 
      } 
      servo1.detach();
    }
    
    void servo2_OFF(){
      
      servo2.attach(servoPin2);
          for(int angle = 0; angle < 100; angle++) 
      { 
        servo2.write(angle); 
        delay(10); 
      } 
      servo2.detach();
    }
    
    void servo2_ON(){
        servo2.attach(servoPin2);
    
          for(int angle = 100; angle > 0; angle--) 
      { 
        servo2.write(angle); 
        delay(10); 
      } 
      servo2.detach();
    }
    
    void servo3_OFF(){
      servo3.attach(servoPin3);  // attaches the servo on pin 9 to the servo object
            for(int angle = 0; angle < 100; angle++) 
      { 
        servo3.write(angle); 
        delay(10); 
      } 
        servo3.detach();
    
    }
    
    void servo3_ON(){
      servo3.attach(servoPin3);
            for(int angle = 100; angle > 0; angle--) 
      { 
        servo3.write(angle); 
        delay(10); 
      } 
      servo3.detach();
    }
    
    void setup(){
      Serial.begin(115200); // PC와 통신
      servo1.detach();
      servo2.detach();
      servo3.detach();
    }
    
    void loop(){
      delay(1000);
      servo1_OFF();
      delay(1000);
      servo1_ON();
      delay(1000);
    
      servo2_OFF();
      delay(1000);
      servo2_ON();
      delay(1000);
    
      servo3_OFF();
      delay(1000);
      servo3_ON();
    }

    댓글

Designed by Tistory.