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.

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?
| Fitur | Motor DC | Motor servo | Motor stepper |
|---|---|---|---|
| Gerakan | Berputar terus-menerus | Menuju sudut tertentu (biasanya 0–180°) | Putaran tak terbatas, langkah demi langkah |
| Informasi posisi | Tidak ada | Ada (umpan balik bawaan) | Diketahui dengan menghitung langkah |
| Kecepatan | Sangat cepat | Sedang | Rendah–sedang |
| Torsi di kecepatan rendah | Rendah | Sedang | Tinggi |
| Pemakaian umum | Roda, kipas, pompa | Lengan robot, kunci, kemudi | Printer 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
| Fitur | Nilai |
|---|---|
| Jenis | Motor stepper unipolar 4 fase |
| Tegangan kerja | 5 V DC |
| Rasio gigi internal | Sekitar 1:64 |
| Langkah per putaran | 2048 (mode full step), 4096 (mode half step) |
| Sudut langkah | Sekitar 0,18° (full step) |
| Konsumsi arus | Sekitar 200–250 mA |
| Kecepatan maksimum | Sekitar 10–15 RPM |
| Kabel | 5 (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 ULN2003 | Arduino Uno |
|---|---|
| IN1 | D8 |
| IN2 | D9 |
| IN3 | D10 |
| IN4 | D11 |
| + (5–12 V) | 5 V eksternal (pin 5V Uno cukup untuk satu motor) |
| – (GND) | GND (disatukan dengan Arduino) |
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.
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}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?
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:
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

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.
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}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:
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 backIde 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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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

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.

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

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

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

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.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

