Cari Kode

Menggunakan Motor Stepper 28BYJ-48 dengan Driver ULN2003 dan Arduino

Menggunakan Motor Stepper 28BYJ-48 dengan Driver ULN2003 dan Arduino

Dalam tutorial ini, kita akan belajar bagaimana mengendalikan motor stepper 28BYJ-48 menggunakan driver ULN2003 dengan Arduino. Pengaturan ini memungkinkan kontrol yang tepat terhadap posisi dan kecepatan motor. Di akhir proyek ini, Anda akan dapat memutar motor ke kedua arah dan mengendalikan langkah-langkahnya dengan efektif.

Kami akan menggunakan motor stepper 28BYJ-48, yang merupakan pilihan populer untuk berbagai proyek robotika dan otomatisasi karena biayanya yang rendah dan kemudahan penggunaannya. Papan pengendali ULN2003 menghubungkan motor stepper dengan Arduino, memungkinkan kami mengirim sinyal langkah yang mengontrol gerakan motor. Tutorial ini akan memandu Anda melalui pengkabelan dan kode yang diperlukan untuk membuat motor Anda berputar.

Untuk klarifikasi lebih lanjut, silakan merujuk ke video yang terkait dengan tutorial ini (dalam video pada 0:45).

Penjelasan Perangkat Keras

Komponen kunci dari proyek ini termasuk motor stepper 28BYJ-48 dan papan pengendali ULN2003. Motor stepper terdiri dari beberapa kumparan yang dapat diaktifkan dalam urutan tertentu untuk menghasilkan rotasi. Pengendali ULN2003 bertindak sebagai saklar, memungkinkan Arduino untuk mengontrol daya yang disalurkan ke setiap kumparan.

Driver ULN2003 menggunakan rangkaian transistor Darlington untuk menangani arus lebih tinggi yang diperlukan oleh motor stepper. Ketika sebuah pin dari Arduino mengeluarkan sinyal HIGH, itu memungkinkan arus mengalir ke kumparan yang sesuai di motor, menyebabkan motor bergerak. Ini memungkinkan kontrol yang tepat atas sudut rotasi dan kecepatan motor.

Detail Lembar Data

ProdusenULN2003
Nomor bagianULN2003
Tegangan Logika/IO5 V
Tegangan suplai5-30 V (maks)
Arus keluaran (per saluran)500 mA maksimum
Arus puncak (per saluran)2 A max
Panduan frekuensi PWMN/A
Ambang logika input0,8 V (rendah), 2,4 V (tinggi)
Penurunan tegangan / RDS(on)/ saturasi1,5 V maks
Batas termal70 °C max
PaketDIP-16
Catatan / varianUmumnya digunakan dengan motor stepper 5V.

  • Pastikan pengemudi dapat menangani kebutuhan saat ini dari motor Anda.
  • Gunakan heatsink jika perlu untuk mengelola batasan termal.
  • Periksa bahwa semua koneksi aman untuk menghindari input yang mengambang.
  • Uji motor dengan menjalankan urutan langkah sederhana sebelum mengintegrasikannya ke dalam proyek yang lebih besar.
  • Pastikan untuk memberi daya pada motor dengan tegangan suplai yang memadai.

Instruksi Pemasangan Kabel

Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 wiring

Untuk menghubungkan motor stepper 28BYJ-48 ke driver ULN2003 dan Arduino, ikuti langkah-langkah berikut:

Pertama, sambungkan motor ke driver ULN2003. Motor memiliki empat kabel, biasanya diberi kode warna sebagai oranye, kuning, merah muda, dan biru. Sambungkan kabel-kabel ini ke pin output yang sesuai pada driver ULN2003. Koneksi adalah sebagai berikut:

  • Orangekabel keOUT1
  • Yellowkabel keOUT2
  • Pinkkabel keOUT3
  • Bluekabel keOUT4

Selanjutnya, hubungkan driver ULN2003 ke Arduino. Pin input pada driver sesuai dengan empat pin digital di Arduino. Misalnya:

  • IN1kePin 10
  • IN2kePin 11
  • IN3kePin 12
  • IN4kePin 13

Akhirnya, sambungkan pin daya dan ground dari driver ULN2003 ke Arduino. SambungkanVCCsambungkan ke output 5V Arduino danGNDhubungkan ke ground Arduino. Pastikan semua koneksi aman sebelum menyalakan sistem.

Contoh Kode & Panduan

Di bagian pengaturan kode Arduino, kami mendefinisikan pin yang terhubung ke driver ULN2003:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Di sini, kami mendeklarasikan empat variabel integer:Pin1,Pin2,Pin3, danPin4, yang sesuai dengan pin digital di Arduino. Pin-pin ini akan mengontrol gerakan motor stepper.

Dalamsetup()fungsi, kami mengonfigurasi pin-pin ini sebagai keluaran:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Pengaturan ini memastikan bahwa Arduino dapat mengirim sinyal ke driver ULN2003 untuk mengontrol motor.pinModefungsi mengatur setiap pin ke mode OUTPUT, memungkinkan mereka untuk mengirim sinyal.

Akhirnya, di loop utama, kami membuat switch case untuk mengontrol langkah motor berdasarkan variabel tersebut._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

Dalam kutipan ini, kami menggunakandigitalWritemengirim sinyal TINGGI atau RENDAH ke setiap pin berdasarkan arus saat ini_step. Ini mengontrol koil mana yang diberi energi, memungkinkan motor untuk berputar. Kode lengkap yang mengintegrasikan potongan-potongan ini akan dimuat di bawah artikel.

Demonstrasi / Apa yang Diharapkan

Setelah semuanya terhubung dengan benar dan kode diunggah, motor stepper harus berputar sebagai respons terhadap sinyal dari Arduino. Anda dapat menguji motor dengan memodifikasi jeda dalam loop atau mengubah langkah untuk melihat bagaimana reaksinya. Harap diperhatikan bahwa jika motor tidak diberi daya dengan benar, motor mungkin tidak bergerak atau dapat berperilaku tidak menentu.

Bab

  • Pengantar - 0:00
  • Perangkat Keras Dijelaskan - 1:30
  • Instruksi Pengkabelan - 3:15
  • Contoh Kode & Panduan - 5:00
  • Demonstrasi / Apa yang Diharapkan - 7:45

Gambar

Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 poles
Stepper 28BYJ-48 poles
Stepper 28BYJ-48 waveform actual
Stepper 28BYJ-48 waveform actual
Stepper 28BYJ-48 waveform inverted
Stepper 28BYJ-48 waveform inverted
Stepper 28BYJ-48 wiring
Stepper 28BYJ-48 wiring
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Bahasa: C++
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
 * 
  Need wiring diagram from this code:  https://youtu.be/0glBk917HPg
  Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
 * 

 * Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from RoboJax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 
int _step = 0; 
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup() 
{ 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 
 void loop() 
{ 
 switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   default: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(1); 

}

Berkas📁

Tidak ada file tersedia.