April 25, 2012

Mengatur Kecepatan Motor Stepper dengan Menggunakan Potensio

Mengatur kecepatan motor stepper dengan potensio meter (VR), yaitu potensio mengatur besar tegangan (0-5 volt) yang jadi inputan port ADC Arduino. Pada saat potensio diputar ke kanan maka tegangan keluaran potensio meningkat mendekati 5 volt dan bila diputar ke kiri tegangan keluaran potensio semakin kecil mendekati 0 volt. Sehingga kecepatan putar motor stepper berbanding lurus dengan tegangan input analog dari potensio. Motor stepper merupakan motor dengan sinyal DC yang diatur arah putaran dan kecepatannya dengan pengaturan sinyal yang diberikan. Berikut gambar skematik diagram motor stepper unipolar 4 phase dengan 8 dan 6 kabel output.



Komponen yang diperlukan :
  1. Lampu led merah 4x                                      
  2. Resistor 1KΩ 4x                                           
  3. Dioda in4001 (1A)                                       
  4. Potensio/trimpot (VR) 10K 1     
  5. IC ULN 2803                                               
  6. Breadboard                           
  7. Kabel Jumper                      
  8. Motor Stepper Unipolar 4 phase
  9. Power Supply 5V 1A
  10. Minimum sistem board Arduino

Koneksi Rangkaian




Penulisan Program
//Kendali Kecepatan Motor Stepper dengan Potensio
int tunda = 0;                                          //deklarasi variabel tunda
int sensorValue = 0;                                //deklarasi variabel sensor value
int outputValue = 0;

const int phase1 = 2;                               //deklarasi pin phase1 pada kaki port D2
const int phase2 = 4;
const int phase3 = 3;
const int phase4 = 5;
const int analogIn = 18;                          //deklarasi pin analogIn pada pin 18 / ADC 4

void setup()
{
  pinMode (phase1, OUTPUT);              //phase1 sebagai output
  pinMode (phase2, OUTPUT);
  pinMode (phase3, OUTPUT);
  pinMode (phase4, OUTPUT);
  pinMode (analogIn, INPUT);               //analogIn sebagai input analog
  Serial.begin (9600);                              //inisialisasi komunikasi serial pada 9600 bps
 }

void loop()                                              //loping / pengulangan terus menerus
{
  siklusADC();                                        //deklarasi void siklus ADC
  powerStepper();                                    //deklarasi void powerStepper
}

void siklusADC()                                   //kode program void siklusADC
{
  sensorValue = analogRead (analogIn);     //membaca sinyal analog pada pin analogIn
  outputValue = map (sensorValue, 0, 1023, 0, 255);    //maping dari nilai 1023 jadi 255
  Serial.print ("outputValue= ");             //mencetak pada serial monitor
  Serial.println (outputValue, DEC);      //menulis nilai dalam desimal

  if (outputValue < 20)                           //membuat tingkatan dengan metode if
  {tunda = 500;}                                     //memberikan nilai pada variabel tunda
  else
    if (outputValue < 30)
      {tunda = 300;}
      else
       if (outputValue < 70)
        {tunda = 200;}
        else
        if (outputValue < 100)
        {tunda = 100;}
        else
        if (outputValue < 140)
        {tunda = 50;}
        else
        if (outputValue < 170)
        {tunda = 20;}
        else
        if (outputValue < 200)
        {tunda = 10;}
        else
        if (outputValue < 240)
        {tunda = 5;}
        else
        {tunda = 2;}
   delayMicroseconds (tunda);                //jeda waktu delay sama dengan nilai tunda
}

void powerStepper()                               //susunan program void powerStepper
{
  digitalWrite (phase1, HIGH);              //tahap sinyal pertama phase1 diberi sinyal high
  digitalWrite (phase2, LOW);                //tahap sinyal pertama phase2 diberi sinyal low
  digitalWrite (phase3, LOW);                // tahap sinyal pertama phase3 diberi sinyal low
  digitalWrite (phase4, LOW);                // tahap sinyal pertama phase4 diberi sinyal low
  delay (tunda);                                       //jeda waktu delay sama dengan nilai tunda
  digitalWrite (phase1, LOW);                //tahap sinyal kedua
  digitalWrite (phase2, LOW);
  digitalWrite (phase3, LOW);
  digitalWrite (phase4, HIGH);
  delay (tunda);
  digitalWrite (phase1, LOW);                // tahap sinyal ketiga
  digitalWrite (phase2, LOW);
  digitalWrite (phase3, HIGH);
  digitalWrite (phase4, LOW);
  delay (tunda);
  digitalWrite (phase1, LOW);                // tahap sinyal ke empat
  digitalWrite (phase2, HIGH);
  digitalWrite (phase3, LOW);
  digitalWrite (phase4, LOW);
  delay (tunda);
}