본문 바로가기

프로그래밍/아두이노03- 연습

아두이노 개발 연습 -Stepper Motor 5V 4-Phase 5-Wire & ULN2003 Driver Board for Arduino



Stepper Motor 5V 4-Phase 5-Wire & ULN2003 Driver Board for Arduino


5v스탭모터를 제어하기위한 코드

360도를 반복해서 시계방향으로 그리고 반대방향으로 도는 코드이다.


/*

   BYJ48 Stepper motor code

   Connect :

   IN1 >> D8

   IN2 >> D9

   IN3 >> D10

   IN4 >> D11

   VCC ... 5V Prefer to use external 5V Source

   Gnd

   written By :Mohannad Rawashdeh

  http://www.instructables.com/member/Mohannad+Rawashdeh/

     28/9/2013

  */


#define IN1  8

#define IN2  9

#define IN3  10

#define IN4  11

int Steps = 0;

boolean Direction = true;// gre

unsigned long last_time;

unsigned long currentMillis ;

int steps_left=4095;

long time;

void setup()

{

Serial.begin(115200);

pinMode(IN1, OUTPUT); 

pinMode(IN2, OUTPUT); 

pinMode(IN3, OUTPUT); 

pinMode(IN4, OUTPUT); 

// delay(1000);


}

void loop()

{

  while(steps_left>0){

  currentMillis = micros();

  if(currentMillis-last_time>=1000){

  stepper(1); 

  time=time+micros()-last_time;

  last_time=micros();

  steps_left--;

  }

  }

   Serial.println(time);

  Serial.println("Wait...!");

  delay(2000);

  Direction=!Direction;

  steps_left=4095;


  

}


void stepper(int xw){

  for (int x=0;x<xw;x++){

switch(Steps){

   case 0:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, HIGH);

   break; 

   case 1:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, HIGH);

     digitalWrite(IN4, HIGH);

   break; 

   case 2:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, HIGH);

     digitalWrite(IN4, LOW);

   break; 

   case 3:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, HIGH);

     digitalWrite(IN3, HIGH);

     digitalWrite(IN4, LOW);

   break; 

   case 4:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, HIGH);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, LOW);

   break; 

   case 5:

     digitalWrite(IN1, HIGH); 

     digitalWrite(IN2, HIGH);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, LOW);

   break; 

     case 6:

     digitalWrite(IN1, HIGH); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, LOW);

   break; 

   case 7:

     digitalWrite(IN1, HIGH); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, HIGH);

   break; 

   default:

     digitalWrite(IN1, LOW); 

     digitalWrite(IN2, LOW);

     digitalWrite(IN3, LOW);

     digitalWrite(IN4, LOW);

   break; 

}

SetDirection();

}

void SetDirection(){

if(Direction==1){ Steps++;}

if(Direction==0){ Steps--; }

if(Steps>7){Steps=0;}

if(Steps<0){Steps=7; }

}