ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Step Motor를 연결하고 작동해보기
    Arduino/Step Motor 2020. 11. 12. 17:45

    하드웨어 연결

    연결은 쉽다.

    Step Motor의 각 연결핀 IN4핀을 아두이노의 11번핀에 연결하고   

    Step Motor의 각 연결핀 IN2핀을 아두이노의 9번핀에 연결하고   

    Step Motor의 각 연결핀 IN3핀을 아두이노의 10번핀에 연결하고

    Step Motor의 각 연결핀 IN1핀을 아두이노의 8번핀에 연결한다.

    Step Motor의 -5핀은 아두이노의 GND핀에 연결하고

    Step Motor의 +12V핀은 아두이노의 5V핀에 연결한다.

     

    우선, 라이브러리를 써보고 구현을 직접해보자.

    소스 코드

    더보기
    #include <Stepper.h>
    
    //  회전각도 설정.  2048 한 바퀴 (360도), 1024 : 반바퀴(180도)
    const int stepsPerRevolution = 2048;
    
    //  모터 드라이브에 연결된 핀 IN4 IN2 IN3 IN1(핀 연결 설정)
    Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
    
    void setup() {
      // put your setup code here, to run once:
      myStepper.setSpeed(14); //  모터의 회전속도 조절
    
      Serial.begin(9600);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      //  반 시계 반대 방향으로 한바퀴 회전
      Serial.println("counterclockwise");
      myStepper.step(stepsPerRevolution);
      delay(1000);
    
      //  시계 반대 방향으로 한바퀴 회전
      Serial.println("clockwise");
      myStepper.step(-stepsPerRevolution);
      delay(1000);
    }

     

     

     

    구현에 앞서, bitRead함수에 대해 알아보자.

    소스 코드

    더보기
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
    
      //  15를 대입하면 아래에서 모두 1이 출력된다.
      Serial.print(bitRead(0b1000,0));  //  해당 2진수의 0번째 자리 수를 구하기
      Serial.print(bitRead(0b1000,1));  //  해당 2진수의 1번째 자리 수를 구하기
      Serial.print(bitRead(0b1000,2));  //  해당 2진수의 2번째 자리 수를 구하기
      Serial.print(bitRead(0b1000,3));  //  해당 2진수의 3번째 자리 수를 구하기
    }
    
    void loop() {}

    실행결과

     

     

    아래는 직접 구현한 예제이다.

    모터를 시계방향으로 360도 회전하고 다시 반시계방향으로 360도 회전하는 예제이다.

    소스 코드

    더보기
    #define   IN1   8
    #define   IN2   9
    #define   IN3   10
    #define   IN4   11
    
    #define   STEP  2048
    
    int pinArray[4] = {IN1,IN2,IN3,IN4}; //  핀 배열
    
    int CW[4] = {0b1000, 0b0100, 0b0010, 0b0001};
    int CCW[4] = {0b0001, 0b0010, 0b0100, 0b1000};
    
    void setup() {
      // put your setup code here, to run once:
      for (int i = 0; i < 4; i++)
      {
        pinMode(pinArray[i],OUTPUT);
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      int temp;
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 4;
      
        digitalWrite(pinArray[0],bitRead(CW[temp],0));
        digitalWrite(pinArray[1],bitRead(CW[temp],1));
        digitalWrite(pinArray[2],bitRead(CW[temp],2));
        digitalWrite(pinArray[3],bitRead(CW[temp],3));
        delay(3);
      }
      delay(1000);
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 4;
      
        digitalWrite(pinArray[0],bitRead(CCW[temp],0));
        digitalWrite(pinArray[1],bitRead(CCW[temp],1));
        digitalWrite(pinArray[2],bitRead(CCW[temp],2));
        digitalWrite(pinArray[3],bitRead(CCW[temp],3));
        delay(3);
      }
      delay(1000);
    }

     

     

    소스 코드

    더보기
    #define   IN1   8
    #define   IN2   9
    #define   IN3   10
    #define   IN4   11
    
    #define   STEP  2048
    
    int pinArray[4] = {IN1,IN2,IN3,IN4}; //  핀 배열
    
    int CW[4] = {0b1100, 0b0110, 0b0011, 0b1001};
    int CCW[4] = {0b1001, 0b0011, 0b0110, 0b1100};
    
    void setup() {
      // put your setup code here, to run once:
      for (int i = 0; i < 4; i++)
      {
        pinMode(pinArray[i],OUTPUT);
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      int temp;
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 4;
      
        digitalWrite(pinArray[0],bitRead(CW[temp],0));
        digitalWrite(pinArray[1],bitRead(CW[temp],1));
        digitalWrite(pinArray[2],bitRead(CW[temp],2));
        digitalWrite(pinArray[3],bitRead(CW[temp],3));
        delay(3);
      }
      delay(1000);
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 4;
      
        digitalWrite(pinArray[0],bitRead(CCW[temp],0));
        digitalWrite(pinArray[1],bitRead(CCW[temp],1));
        digitalWrite(pinArray[2],bitRead(CCW[temp],2));
        digitalWrite(pinArray[3],bitRead(CCW[temp],3));
        delay(3);
      }
      delay(1000);
    }

     

     

    소스 코드

    더보기
    #define   IN1   8
    #define   IN2   9
    #define   IN3   10
    #define   IN4   11
    
    #define   STEP  4096 // (2098 * 2)
    
    int pinArray[4] = {IN1,IN2,IN3,IN4}; //  핀 배열
    
    int CW[8] = {0b1000, 0b1100, 0b0100, 0b0110,0b0010,0b0011,0b0001,0b1001};
    int CCW[8] = {0b1000, 0b1001, 0b0001, 0b0011,0b0010,0b0110,0b0100,0b1100};
    
    void setup() {
      // put your setup code here, to run once:
      for (int i = 0; i < 4; i++)
      {
        pinMode(pinArray[i],OUTPUT);
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      int temp;
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 8;
      
        digitalWrite(pinArray[0],bitRead(CW[temp],0));
        digitalWrite(pinArray[1],bitRead(CW[temp],1));
        digitalWrite(pinArray[2],bitRead(CW[temp],2));
        digitalWrite(pinArray[3],bitRead(CW[temp],3));
        delay(1);
      }
      delay(1000);
    
      for (int i = 0; i < STEP; i++)
      {
        temp = i % 8;
      
        digitalWrite(pinArray[0],bitRead(CCW[temp],0));
        digitalWrite(pinArray[1],bitRead(CCW[temp],1));
        digitalWrite(pinArray[2],bitRead(CCW[temp],2));
        digitalWrite(pinArray[3],bitRead(CCW[temp],3));
        delay(1);
      }
      delay(1000);
    }

    댓글

Designed by Tistory.