Komponen · 5 mnt baca

Apa Itu Motor Stepper? Putaran Presisi dengan 28BYJ-48 dan ULN2003 di Arduino

Bagaimana cara kerja motor stepper? Pengkabelan 28BYJ-48 dan driver ULN2003, langkah per putaran (2048), library Stepper dan AccelStepper, berputar ke sudut tertentu, NEMA 17 dengan A4988, serta pemakaian di ESP32 dan Pico.

Motor stepper adalah motor yang membagi putarannya menjadi langkah-langkah kecil yang sama besar. Motor ini berputar sebesar sudut tertentu di setiap perintah, jadi kamu tahu persis di mana motor berhenti tanpa sensor tambahan. Printer 3D, mesin CNC, slider kamera, dan gorden otomatis memakai motor stepper karena presisi ini. Cara termurah untuk mulai belajar dengan Arduino adalah motor 28BYJ-48 dan board driver ULN2003 yang dijual bersamanya.

Motor stepper 28BYJ-48 dan board driver ULN2003
Motor stepper 28BYJ-48 dan driver ULN2003: colokan 5 kabel dari motor pas di soket board; empat LED di board menunjukkan kumparan mana yang aktif.

Bagaimana cara kerja motor stepper?

Di dalam motor stepper ada beberapa kumparan yang disusun mengelilingi rotor magnet bergigi. Ketika kumparan diberi arus dengan urutan tertentu, rotor setiap kali tertarik ke kumparan terdekat dan bergerak satu langkah. Jalankan urutannya dengan cepat dan motor berputar cepat; jalankan pelan dan motor berputar pelan; balik urutannya dan motor berputar ke arah sebaliknya. Karena motor menghitung setiap langkah, posisinya diketahui, tetapi kalau terbebani berlebihan, motor bisa melewatkan langkah tanpa disadari.

Motor stepper, servo, atau motor DC?

FiturMotor DCMotor servoMotor stepper
GerakanBerputar terus-menerusMenuju sudut tertentu (biasanya 0–180°)Putaran tak terbatas, langkah demi langkah
Informasi posisiTidak adaAda (umpan balik bawaan)Diketahui dengan menghitung langkah
KecepatanSangat cepatSedangRendah–sedang
Torsi di kecepatan rendahRendahSedangTinggi
Pemakaian umumRoda, kipas, pompaLengan robot, kunci, kemudiPrinter 3D, CNC, slider, jam

Kalau menuju sudut tertentu dan menahannya sudah cukup, servo lebih sederhana; detailnya ada di Apa Itu Motor Servo? Kalau kamu butuh putaran cepat dan terus-menerus, motor DC dengan driver motor L298N lebih cocok. Untuk tugas yang butuh beberapa putaran sekaligus posisi yang diketahui, motor stepper tidak tertandingi.

Spesifikasi 28BYJ-48

FiturNilai
JenisMotor stepper unipolar 4 fase
Tegangan kerja5 V DC
Rasio gigi internalSekitar 1:64
Langkah per putaran2048 (mode full step), 4096 (mode half step)
Sudut langkahSekitar 0,18° (full step)
Konsumsi arusSekitar 200–250 mA
Kecepatan maksimumSekitar 10–15 RPM
Kabel5 (merah adalah kabel bersama)

Pengkabelan driver ULN2003

Colokan 5 kabel dari motor hanya bisa masuk ke soket board ULN2003 dengan satu arah, jadi kamu tidak mungkin salah. Hubungkan pin IN1–IN4 board ke pin Arduino 8–11, dan terminal + dan – ke catu daya 5 V. ULN2003 adalah susunan transistor Darlington yang memperkuat sinyal kecil dari pin Arduino menjadi arus yang dibutuhkan kumparan, dan empat LED di board menunjukkan kumparan yang menyala bergantian.

Pin ULN2003Arduino Uno
IN1D8
IN2D9
IN3D10
IN4D11
+ (5–12 V)5 V eksternal (pin 5V Uno cukup untuk satu motor)
– (GND)GND (disatukan dengan Arduino)
28BYJ-48 menarik arus sekitar 240 mA. Uno yang diberi daya USB bisa menjalankan satu motor, tetapi untuk dua motor atau beban lain, pakai catu daya 5 V eksternal dan satukan ground-nya. Arus tetap mengalir di kumparan bahkan ketika motor diam, jadi motor akan menjadi hangat; kalau motor menunggu lama, lepaskan kumparan dengan membuat keempat pin LOW.

Putaran pertama dengan library Stepper

Library Stepper yang sudah ada di Arduino IDE tidak perlu diinstal. Satu-satunya yang perlu diperhatikan adalah urutan pin: untuk 28BYJ-48, objeknya harus dideklarasikan dengan urutan 8, 10, 9, 11 (IN1, IN3, IN2, IN4). Kalau kamu menulis 8, 9, 10, 11, motor hanya bergetar di tempat tanpa berputar; inilah kesalahan yang paling umum.

C++ (Arduino IDE)
1#include <Stepper.h>
2
3const int STEPS_PER_REV = 2048;                  // 28BYJ-48 tam tur / full revolution
4Stepper motor(STEPS_PER_REV, 8, 10, 9, 11);      // sıra: IN1, IN3, IN2, IN4 / order: IN1, IN3, IN2, IN4
5
6void setup() {
7  motor.setSpeed(10);                            // devir/dakika, en fazla ~15 / RPM, max ~15
8}
9
10void loop() {
11  motor.step(STEPS_PER_REV);        // bir yönde tam tur / one full turn
12  delay(1000);
13  motor.step(-STEPS_PER_REV / 2);   // ters yönde yarım tur / half a turn back
14  delay(1000);
15}
Untuk mengubah sudut menjadi langkah, pakai langkah = sudut × 2048 / 360. Misalnya, 90 derajat adalah 512 langkah dan 45 derajat adalah 256 langkah.

Kendali posisi dengan potensiometer

Kalau kamu menyimpan posisi motor sekarang di sebuah variabel, kamu bisa mengirimnya ke titik mana pun yang kamu mau. Kode di bawah mengubah posisi potensiometer menjadi 0–2048 langkah, dan motor bergerak ke titik yang sama seolah-olah mengikuti kenop. Toleransi 10 langkah mengabaikan getaran kecil. Pengkabelan potensiometer ada di Apa Itu Potensiometer?

C++ (Arduino IDE)
1#include <Stepper.h>
2
3Stepper motor(2048, 8, 10, 9, 11);
4int position = 0;                                    // şu anki adım / current step
5
6void setup() {
7  motor.setSpeed(12);
8}
9
10void loop() {
11  int target = map(analogRead(A0), 0, 1023, 0, 2048);  // potansiyometre → hedef / pot → target
12  if (abs(target - position) > 10) {                 // küçük titreşimleri yok say / ignore jitter
13    motor.step(target - position);
14    position = target;
15  }
16}

AccelStepper: akselerasi halus tanpa memblokir

Perintah step() di library Stepper menghentikan programmu sampai gerakannya selesai; selama itu kamu tidak bisa membaca tombol atau memperbarui layar. AccelStepper, yang bisa kamu instal dari Library Manager, menggerakkan motor langkah demi langkah di latar belakang dan menambahkan akselerasi serta deselerasi untuk mencegah start yang mendadak. Untuk 28BYJ-48 dipakai mode half step (HALF4WIRE), di mana satu putaran adalah 4096 langkah:

C++ (Arduino IDE)
1#include <AccelStepper.h>
2
3// 28BYJ-48 + ULN2003, yarım adım: tur başına 4096 / half-step: 4096 per turn
4AccelStepper motor(AccelStepper::HALF4WIRE, 8, 10, 9, 11);
5
6void setup() {
7  motor.setMaxSpeed(1000);      // adım/saniye / steps per second
8  motor.setAcceleration(400);   // adım/saniye² / steps per second²
9  motor.moveTo(4096);           // bir tur ileri / one turn forward
10}
11
12void loop() {
13  if (motor.distanceToGo() == 0) {
14    motor.moveTo(-motor.currentPosition());   // geri dön / go back
15  }
16  motor.run();                  // her döngüde çağır, bekletmez / call every loop, non-blocking
17}

Motor yang lebih bertenaga: NEMA 17 dan A4988

Modul driver motor stepper A4988
Driver stepper A4988: dikendalikan hanya dengan pin STEP dan DIR; potensiometer kecil di atasnya membatasi arus motor.

Untuk tugas yang butuh tenaga, seperti printer 3D dan mesin CNC, dipakai stepper bipolar seperti NEMA 17. Motor ini butuh 200 langkah per putaran (1,8°) dan jauh lebih kuat daripada 28BYJ-48. Motor ini dikendalikan dengan driver seperti A4988 atau DRV8825: motor maju satu langkah untuk setiap pulsa STEP, dan pin DIR menentukan arahnya. Driver ini bekerja di 8–35 V dan, dengan microstepping, membagi setiap langkah sampai 16 bagian untuk gerakan yang lebih halus.

C++ (Arduino IDE)
1const int STEP_PIN = 3;
2const int DIR_PIN = 4;
3
4void setup() {
5  pinMode(STEP_PIN, OUTPUT);
6  pinMode(DIR_PIN, OUTPUT);
7}
8
9void loop() {
10  digitalWrite(DIR_PIN, HIGH);          // yön / direction
11  for (int i = 0; i < 200; i++) {       // NEMA 17'de 200 adım = 1 tur / 200 steps = 1 turn
12    digitalWrite(STEP_PIN, HIGH);
13    delayMicroseconds(800);             // küçüldükçe hız artar / smaller = faster
14    digitalWrite(STEP_PIN, LOW);
15    delayMicroseconds(800);
16  }
17  delay(1000);
18}
Sebelum menjalankan A4988, atur batas arus untuk motormu dengan potensiometernya, pasang kapasitor 100 µF di catu daya motor, dan jangan pernah mencabut kabel motor ketika driver masih diberi daya; itu bisa langsung merusak driver.

Motor stepper dengan ESP32 dan Raspberry Pi Pico

Input ULN2003 bekerja dengan baik dengan sinyal 3,3 V; motornya tetap diberi daya terpisah dari 5 V. Di ESP32, library AccelStepper berfungsi tanpa perubahan; kamu bisa memakai pin selain 6–11 dan 34–39, misalnya GPIO 19, 18, 5, dan 17. Di Pico dengan MicroPython, motor diputar dengan menuliskan urutan half step ke keempat pin secara bergantian:

MicroPython
1from machine import Pin
2import time
3
4pins = [Pin(n, Pin.OUT) for n in (2, 3, 4, 5)]      # IN1–IN4 → GP2–GP5
5SEQ = [[1,0,0,0],[1,1,0,0],[0,1,0,0],[0,1,1,0],
6       [0,0,1,0],[0,0,1,1],[0,0,0,1],[1,0,0,1]]    # yarım adım dizisi / half-step sequence
7
8def rotate(steps, delay_ms=2):
9    direction = 1 if steps > 0 else -1
10    for i in range(abs(steps)):
11        for pin, value in zip(pins, SEQ[(i * direction) % 8]):
12            pin.value(value)
13        time.sleep_ms(delay_ms)
14    for pin in pins:
15        pin.value(0)                                   # bobinleri bırak / release coils
16
17rotate(4096)        # bir tur / one turn (half-step)
18rotate(-1024)       # çeyrek tur geri / quarter turn back

Ide proyek dengan motor stepper

  • Jam analog: jam meja yang jarum jam dan menitnya diputar oleh motor stepper.
  • Slider kamera: rel yang menggerakkan kamera dengan sangat pelan untuk pengambilan gambar timelapse.
  • Pemberi makan ikan otomatis: mekanisme yang memutar wadahnya dua kali sehari untuk menjatuhkan makanan.
  • Panel pelacak matahari: putar panel ke arah yang paling terang dengan dua sensor cahaya; untuk bagian cahayanya, lihat Sensor Cahaya LDR.
  • Meja putar: meja yang memutar benda dengan langkah yang sama untuk foto produk atau pemindaian 3D.
  • Gorden otomatis: motor yang membuka dan menutup gorden dengan menggulung talinya dan mengingat posisinya.

Kesalahan umum dan cara mengatasinya

  • Motor bergetar tapi tidak berputar: urutan pin di library Stepper salah; tulis 8, 10, 9, 11, bukan 8, 9, 10, 11.
  • Motor melewatkan langkah: kecepatannya terlalu tinggi atau bebannya terlalu berat; jaga 28BYJ-48 di bawah 15 RPM dan tambahkan akselerasi dengan AccelStepper.
  • Arduino reset: catu dayanya tidak cukup; beri daya motor dari catu daya 5 V eksternal dan satukan ground-nya.
  • Motor panas ketika diam: kumparannya tetap dialiri arus; buat keempat pin LOW setelah gerakan selesai.
  • Jumlah putarannya meleset: ada 2048 langkah di mode full step dan 4096 di half step, sedangkan NEMA 17 punya 200. Jangan tertukar antara mode dan motornya.
  • Motor tidak berputar dengan A4988: batas arusnya diatur terlalu rendah, tidak ada catu daya motor, atau pin RESET dan SLEEP tidak saling dihubungkan.

Motor stepper adalah cara termudah untuk mengatakan “berputarlah tepat sebanyak ini”, dan menjadi dasar mesin seperti router CNC dan printer 3D. Di aplikasi BlueGrays kamu akan menemukan proyek memakai stepper 28BYJ-48 dan membuat servo 360 derajat dari stepper, langkah demi langkah lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Berapa langkah per putaran 28BYJ-48?

Sekitar 2048 di mode full step dan sekitar 4096 di mode half step. Karena rasio gigi internalnya tidak tepat 1:64, pergeseran kecil bisa menumpuk pada gerakan yang sangat panjang; untuk pekerjaan yang presisi, sebaiknya posisi dinolkan ulang sesekali dengan limit switch.

Kenapa motor stepper-ku bergetar tapi tidak berputar?

Penyebab paling umum adalah urutan pemberian arus ke kumparan yang salah. Di library Stepper Arduino, pin untuk 28BYJ-48 harus ditulis dengan urutan 8, 10, 9, 11 (IN1, IN3, IN2, IN4). Motor juga bisa bergetar tanpa berputar kalau kecepatannya terlalu tinggi atau catu dayanya terlalu lemah.

Bisakah ULN2003 diberi daya dari pin 5V Arduino?

Untuk satu 28BYJ-48, biasanya bisa; motornya menarik sekitar 240 mA dan USB sanggup menanganinya. Dengan dua motor, servo, atau beban lain, regulator dan port USB Arduino jadi terbebani; dalam kasus itu pakai catu daya 5 V eksternal dan satukan ground-nya.

Bagaimana motor stepper mengetahui posisinya?

Stepper tidak mengukur posisinya; motor ini mengetahuinya dengan menghitung langkah yang sudah diambil. Karena itu sebaiknya motor digerakkan ke titik referensi (seperti limit switch) ketika program mulai untuk menolkannya, dan hindari langkah yang terlewat akibat beban berlebih atau kecepatan tinggi.

Sebaiknya aku pakai motor stepper atau motor servo?

Kalau menuju sudut antara 0 dan 180 derajat lalu menahannya sudah cukup, servo lebih sederhana dan driver-nya sudah ada di dalam. Untuk tugas yang butuh beberapa putaran, torsi kuat di kecepatan rendah, atau posisi yang sangat presisi, pilih motor stepper.

Apa perbedaan 28BYJ-48 dan NEMA 17?

28BYJ-48 adalah motor 5 V kecil dan murah yang berputar pelan tetapi presisi berkat gearbox-nya. NEMA 17 adalah motor bipolar yang jauh lebih kuat dan cepat dengan 200 langkah per putaran; motor ini butuh driver seperti A4988 dan catu daya 12–24 V. 28BYJ-48 cocok untuk proyek hobi, sedangkan NEMA 17 dipakai di mesin seperti printer 3D dan router CNC.

Lihat semua proyek
Menggunakan Motor Stepper
#67Menengah
Premium

Menggunakan Motor Stepper

Motor yang berputar selangkah demi selangkah, persis sejauh yang kamu mau, seperti jarum jam. Lewat board driver, Arduino memutar motor stepper kecil satu putaran penuh ke satu arah, menunggu satu det

4.5(31)
42
Servo 360 Derajat dari Motor Stepper
#68Menengah
Premium

Servo 360 Derajat dari Motor Stepper

Ajari motor stepper biasa untuk pergi ke sudut mana pun yang kamu mau, satu lingkaran penuh. Arduino menghitung berapa langkah yang dibutuhkan setiap sudut; motor bergerak ke 0, 90, 45, 180, 135, dan

4.5(22)
32
Kendali Servo dengan Joystick
#60Menengah
Premium

Kendali Servo dengan Joystick

Arahkan dua motor dengan joystick, persis seperti memutar kamera keamanan. Dorong tuas ke kiri atau kanan dan servo bawah berputar perlahan, dorong ke atas atau bawah dan servo atas mendongak dan menu

4.7(42)
58
Motor Servo ESP32 (Kendali Potensiometer)
#118Menengah
Premium

Motor Servo ESP32 (Kendali Potensiometer)

Di proyek ini, kita mengendalikan motor servo SG90 memakai potensiometer. Kita mengatur sudut servo dengan memetakan nilai analog yang dibaca dari potensiometer ke rentang 0–180 derajat. Library ESP32Servo menghasilkan sinyal servo di pin GPIO ESP32 yang sesuai dan bisa menjadi output; proyek ini memakai GPIO 18. Ini metode kendali dasar untuk lengan robot, gimbal kamera, dan mekanisme pintu otomatis.

4.3(29)
42
Mobil Kendali Bluetooth dengan L298N
#80Mahir
Premium

Mobil Kendali Bluetooth dengan L298N

Jadikan ponselmu remote dan kendarai mobil robotmu sendiri. Arduino menerima perintah dari aplikasi remote control di ponselmu lewat modul Bluetooth dan memutar roda dengan driver motor; mobil maju, m

5.0(38)
65
Robot Penghindar Rintangan
#81Mahir
Premium

Robot Penghindar Rintangan

Bagaimana kalau membuat kendaraan pintar yang mencari jalannya sendiri? Robot Penghindar Rintangan terus memindai sekelilingnya berkat sensor ultrasonik di depannya. Ketika menemui rintangan, robot be

5.0(38)
49
Kendali LED dengan Joystick
#59Menengah
Premium

Kendali LED dengan Joystick

Dorong tuas kecil joystick sampai mentok ke arah mana pun dan LED untuk arah itu menyala: ada empat warna berbeda untuk kanan, kiri, atas, dan bawah. Lepaskan tuasnya, ia kembali ke tengah dan semua L

4.7(50)
67
Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)
#142Mahir
Premium

Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)

Versi ESP32 dari sensor parkir mobil! Kita memakai sensor ultrasonik HC-SR04 untuk mengukur jarak ke benda di depannya. Semakin dekat jaraknya, bar 5 LED semakin penuh (hijau → kuning → merah) dan jeda bunyi bip buzzer semakin pendek. Ketika benda sudah sangat dekat (di bawah 10 cm), alarm berbunyi terus dan semua LED menyala. Layar OLED SSD1306 menampilkan jarak terkini dalam cm dengan font besar, pesan status (STOP / CAUTION / CLOSE / STOP! / DANGER), dan simulasi bar jarak.

0.0(0)
14