طريقة التحكم في زوايا المحرك Stepper Motor عبر الضغط على الازار Push Button باستخدام أردوينو Arduino - DIY Channel3

DIY Channel3

Arduino│ESP8266│ESP32│Drone│Robot

طريقة التحكم في زوايا المحرك Stepper Motor عبر الضغط على الازار Push Button باستخدام أردوينو Arduino

مشاركة هذا

 


- يتم إرسال التحكم في محرك متدرج 28BYJ-48 إلى أي زاوية STPB-4

هذا هو كود Arduino للتحكم في 28BYj-48 Stepper بثلاثة أزرار ضغط لإرساله إلى أي زاوية قمت بتعيينها في الكود. يمكن ضبط سرعة المحرك في الكود. شاهد الفيديو للحصول على التفاصيل.


- المكونات الاساسية :

- Arduino UNO R3
- 28BYJ-48 Stepper Motor with ULN2003 Driver

- 3 push buttons

- mini breadboard
- Jumper Wires

--------------------------------------------------------------------------------
- تحميل الكود أردوينو :


int Pin1 = 10;//IN1 is connected to 10 
int Pin2 = 11;//IN2 is connected to 11  
int Pin3 = 12;//IN3 is connected to 12  
int Pin4 = 13;//IN4 is connected to 13 
int switchSTOP =2;//define input pin for STOP push button
int switchCW   =3;//define input pin for CW push button
int switchCCW  =4;//define input pin for CCW push button

int speedFactor =1;//1=fastest, 2=slower or 3 more slower
long goToAngle = 360;


int correction_CW = 150;//watch video for details
int correction_CCW = 150;//watch video for details

const int CW =1;
const int CCW =2;
const int STOP =3;
int poleStep = 0; 
long stepVale =0;
const int SPR=64*64;

int pole1[] ={0,0,0,0, 0,1,1,1, 0};//pole1, 8 step values
int pole2[] ={0,0,0,1, 1,1,0,0, 0};//pole2, 8 step values
int pole3[] ={0,1,1,1, 0,0,0,0, 0};//pole3, 8 step values
int pole4[] ={1,1,0,0, 0,0,0,1, 0};//pole4, 8 step values





int count=0;
int  dirStatus = STOP;// stores direction status 3= stop (do not change)

void setup() 
  //Robojax.com Stepper Push button Any Angle STPB-4
  Serial.begin(9600);
  Serial.begin("diy channel");  
 pinMode(Pin1, OUTPUT);//define pin for ULN2003 in1 
 pinMode(Pin2, OUTPUT);//define pin for ULN2003 in2   
 pinMode(Pin3, OUTPUT);//define pin for ULN2003 in3   
 pinMode(Pin4, OUTPUT);//define pin for ULN2003 in4   

 pinMode(switchSTOP,INPUT_PULLUP); 
 pinMode(switchCW,INPUT_PULLUP);
 pinMode(switchCCW,INPUT_PULLUP); 
 
 void loop() 
    stepVale = (SPR * goToAngle)/360 ;
  //Robojax.com Stepper Push button Any Angle STPB-4
  if(digitalRead(switchCCW) == LOW) 
  {
    dirStatus =CCW;
    count =0;
  }else if(digitalRead(switchCW) == LOW)
  {
   dirStatus  = CW;  
    count =0;   
  }
  if(digitalRead(switchSTOP) == LOW)
  {
    dirStatus  = STOP;
    delay(200);
  }
 if(dirStatus ==CCW){ 
   poleStep++; 
   count++;   
   if(count+correction_CCW <= stepVale)
   {
    driveStepper(poleStep);      
   }else{
      driveStepper(8);  
   }
  //full explannation at Arduino Course on Udemy.com see link above
 }else if(dirStatus ==CW){ 
   poleStep--; 
   count++;   
   if(count+correction_CW <=stepVale)
   {
    driveStepper(poleStep);      
   }else{
      driveStepper(8);  
   }   
 }else{
  driveStepper(8);   
 }
 if(poleStep>7){ 
   poleStep=0;
 } 
 if(poleStep<0){ 
   poleStep=7; 
 } 
 delay(speedFactor); 
  //Robojax.com Stepper Push button Any Angle STPB-4

}// loop

void driveStepper(int c)
{
    //Robojax.com Stepper Push button Any Angle STPB-4
     digitalWrite(Pin1, pole1[c]);  
     digitalWrite(Pin2, pole2[c]); 
     digitalWrite(Pin3, pole3[c]); 
     digitalWrite(Pin4, pole4[c]);
     if(c ==8)
     {
      digitalWrite(switchCW, HIGH); 
      digitalWrite(switchCCW, HIGH);               
     }
}//driveStepper ends here

-----------------------------------------------------------------------------------


No comments:

Post a Comment