Sunday, February 28, 2016

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

6 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

LinkWithin

Related Posts Plugin for WordPress, Blogger...

Artikel Terbaru