Arduino Mengontrol Stepper dengan ULN2003

Pada tutorial kali ini kita akan mencoba mengontrol motor stepper dengan tipe 28BYJ-48 dengan menggunakan driver ULN2003

Sebelum melakukan percobaan akan lebih baik apabila kita mengenal sepesifikasi dari motor stepper yang digunakan, berikut detailnya:

Tampilan dari Motor Stepper 28BYJ-48

Atikel lain:
Arduino Mengontrol Stepper dengan ULN2003
Cara Menambahkan Libraries Arduino
Mengontrol Motor DC dengan Potensio
Menggunakan IC Motor Driver L293D

Sumber Gambar: dataSheet
Spesifikasi lengkap dari motor Stepper:

Sumber Gambar: DataSheet
Konfigurasi Pin dan Kabel:
Sumber Gambar: DataSheet

Ada hal yang perlu diketahui sebelum mengguakan Motor Stepper 28BYJ-48 ini, yaitu jumlah step dalam satu putaran, perhitungannya sebagai berikut:

Motor ini memiliki rasio gear sebesar 64, dan putaran per stepnya sebesar 5.625° jadi motor ini memiiki step sebanyak 4096.

 steps = Jumlah step per satu Putaran  * Rasio Gear.

 steps= (360°/5.625°)*64"Rasio Gear" = 64 * 64 =4096 . 
 Nilai ini akan dimasukan ke dalam Sket (Program) Arduino


Untuk Switching Sequence (Urutan peralihan) dari pergerakan Motor stepper ditunjukan tabel berikut ini:
Sumber Gambar: http://www.instructables.com/id/BYJ48-Stepper-Motor/?ALLSTEPS

Tabel diatas berguna untuk mengatur pergerakan motor stepper. Tanda strip (-) nantinya akan diberi masukan HIGH, dan kosong diberi masukan LOW pada program arduino.

Berikut program Arduino yang digunakan:
/*
   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; }
}
 Tampilan Video hasil percobaan:

Sumber Tulisan: Terinspirasi dari situs:
http://www.instructables.com/id/BYJ48-Stepper-Motor/?ALLSTEPS.
Dengan beberapa penambahan dan pengurangan.

Selamat Mencoba...
Semoga Bermanfaat....

Baca juga:
Menggunakan Sensor L3G4200D
Menggunakan Sensor Flex 
Prototipe Robot Lengan berbasis Arduino Mega 2560 dengan Pengendali Pergerakan Lengan Manusia
Membuat Aplikasi Android dgn MIT App Inventor2

Comments

  1. Replies
    1. Terimakasih, semoga bermanfaat. Tapi untuk update masalah arduino nya sepertinya agak sulit karena kesibukan lain... 😀

      Delete
  2. bagaimana cara menentukan jumlah langkahnya??

    ReplyDelete
    Replies
    1. Maaf kak untuk kasus ini perlu di coba langsung, untuk mendapatkan solusinya. Penulis jarang mencoba lagi nih. 😂

      Delete
  3. master klo setep mottor itu bisa menentukan sudut drajat gax ?

    ReplyDelete
    Replies
    1. Kalau stepper sudutnya bisa di tentukan kak, biasanya tiap motor steper memiliki ketelitian sudut tersendiri, bisa di cek di datasheet masih-masing motor stepper

      Delete
    2. Boleh minta kodingannya yang untuk putaran motor stepper setiap 45 derajad?

      Delete

Post a Comment

Popular posts from this blog

Tips Lulus Psikotes

Penyebab tidak bisa mengupload program ke Arduino

Program dan Ladder PLC pengisi kotak Apel