Page 133 - 최강 아두이노 스마트 자동차 로봇 키트
P. 133

조금 더 안전한 서보모터 제어


               프로젝트의  구현  성격에  따라  본  섹션의  내용  및  함수는  필요하지  않을  수  있습니다.

               최소  요구  작동  시간  내에  myservo.write()  함수를  호출  하는  경우  약간의  오차  또
               는  오류가  발생될  수  있습니다
               서보모터 sg90  모델의  스펙을  서보모터의  회전  속도에  대한  소요  시간이  나와  있습니
               다.
               Operating speed: 0.1 s/60 degree  60  도에  0.1  초  회전  합니다.
               반대로  말하면  0.1 초에  60 도  회전합니다.

               왼쪽에서  오른쪽으로  120  도  회전  하는  경우  0.2  초의  최소  잠시  정지  시간이  필요
               합니다.  또는  필요에  의해  더  많은  회전을  하였다면  더  많은  소모시간이  요구  됩니다.
               물론, 4WD  운행  코드  구현  시  아래의  예제코드는  필요하지  않을  수  있습니다.
               보다  더  세밀한  프로젝트를  위해  적용시켜  봅니다.
               코드  및  구현  개념에  따라  여러  가지  방법이  있습니다.  현재  각도  설정에  대한  변수
               를  정의하여,  현재  서보모터의  각도를  저장하고  변수를  참조하여  함수를  구현할  수
               있습니다.  또는  지원되는  라이브러리를  참조하여  세부  함수를  구현할  수도  있습니다.
                 아두이노  스케치의  Servo  클래스  라이브러리에는  현재  서보  모터의  회전  각도를  구
               할  수  있는  함수가  있습니다.

               Servo  클래스의  read()  함수를  사용하여  현재  서보  모터의  각도를  구할  수  있습니다.
               int nCurrDegree = myservo.read();

               그럼  현재  각도에  대한  이동해야  할  각도를  구해  60  도에  0.1  초  기준으로  지연시간
               을  계산해줍니다.
               조건은  무조건  60 도  미만일  경우에도  0.1 초  지연시간을  주기로  합니다.

               // nDegree :  회전할  각도
               //  반환값: delay  함수에  들어가는  1 초  1000 비율로  환산.

                 int  checkServoDelayByDegree(int nDegree)
                 {
                     nDegree=nDegree%360; //
                     int nCurrDegree = myservo.read(); // 현재 서보모터의 각도
                     float fDegree = fabs(nCurrDegree - nDegree); // 절대값.
                     fDegree = fDgeree / 60.0f;
                     fDegree=max(1.0f,fDegree);
                     //fDegree=min(10.0f,fDegree);





                                                   132
   128   129   130   131   132   133   134   135   136   137   138