Sambungkan IN1–IN4 pada board ULN2003 ke pin 8, 9, 10 dan 11 Arduino, bekalkan 5V kepada board itu, dan cipta objek motor sebagai Stepper(2038, 8, 10, 9, 11) — dua argumen tengah sengaja ditukar tempat. Satu pusingan shaft output ialah 2038 langkah yang boleh dikira, bukan 2048 seperti yang diandaikan oleh hampir setiap sketch, dan jurang sepuluh langkah itulah punca motor pemula perlahan-lahan terpesong.
Apa yang ada dalam kit 28BYJ-48, dan kenapa driver tak boleh sambung terus ke Uno?
Kit 28BYJ-48 sebenarnya dua barang dalam satu beg. Lima wayar motor — biru, merah jambu, kuning, oren dan satu wayar common merah — berakhir dengan plug berkunci yang padan dengan board driver ULN2003 hijau itu. Pada board tersebut hanya empat perkara yang penting: header IN1–IN4 (IN5–IN7 cuma lubang kosong), pin − dan + di bawah tulisan 5–12V, shunt di sebelahnya yang menghidup dan mematikan bekalan motor, dan empat LED.
Perkara yang tiada dalam mana-mana rajah wiring: setiap titik sambungan pada driver ialah pin male, dan setiap header pada Arduino Uno pula socket female. Jumper male-to-female menyelesaikannya terus. Panduan ini sebaliknya menambah Sensor Shield V5.0, yang mengeluarkan semula setiap pin Uno sebagai satu set tiga pin male G/V/S, jadi wayar female-to-female biasa boleh merapatkan male dengan male.
Jangan tekan driver itu ke dalam breadboard. Dua headernya duduk berserenjang antara satu sama lain, jadi mana-mana satu yang melintang di atas jalur breadboard akan short kesemua pinnya menjadi satu net lima lubang — IN1–IN4 tersambung sesama sendiri, atau + terus ke −. Sepotong jalur header male yang dipatahkan dan dicucuk ke socket Uno ialah penyelesaian yang lebih murah dan memang menjadi.
Senarai komponen
Pilihan: bekalan 5V berasingan
Rel 5V khusus, untuk memusingkan motor secara berterusan atau menambah motor kedua. Baca perenggan kuasa dahulu — jumper SEL pada shield mesti ditanggalkan sebelum anda sambungkannya.

Macam mana nak sambung dan bekalkan kuasa kepada board ULN2003?
Sensor Shield V5.0 mengumpulkan pin digital 11, 10, 9 dan 8 dalam satu blok empat lajur, setiap lajur satu set G (ground), V (5V) dan S (signal) — jadi satu blok itu sahaja sudah membawa segala yang projek ini perlukan, dan enam batang wayar jumper female-to-female menyudahkan kerja.
| Board ULN2003 | Sensor Shield | Pin Uno di belakangnya |
|---|---|---|
| IN1 | Pin S pada lajur “8” | D8 |
| IN2 | Pin S pada lajur “9” | D9 |
| IN3 | Pin S pada lajur “10” | D10 |
| IN4 | Pin S pada lajur “11” | D11 |
| + (bertanda 5–12V) | Pin V mana-mana lajur dalam blok itu | 5V |
| − (bertanda 5–12V) | Pin G mana-mana lajur dalam blok itu | GND |
| IN5, IN6, IN7 | Tiada apa-apa — lubang tanpa pin | — |
| Socket putih 5-pin | Plug putih berkunci pada motor | — |
Satu butiran shield yang boleh menjimatkan sejam: baris bersilkscreen POWER / RESET 3V3 5V GND VIN itu ialah lubang berlapis kosong, bukan pin. Ambil 5V dan GND daripada baris V dan G pada mana-mana lajur digital. Dan biarkan shunt perak kecil di sebelah pin − dan + driver itu terpasang — ia yang menghidupkan bekalan motor, jadi board yang nampak betul wiringnya tetapi langsung tak bergerak selalunya cuma kerana shunt itu hilang.
Dua perkara keselamatan sebelum hidupkan kuasa. PCB itu bertanda 5–12V kerana itulah bekalan motor yang board hantar terus ke coil — ULN2003 itu sendiri ada rating 50V, jadi tiada apa-apa pada board yang melindungi motor. Motor yang datang sekali dalam kit ini model 5V, dan 12V akan menyebabkan coilnya terlalu panas. Dan jangan sekali-kali cabut connector motor semasa board masih berkuasa: memutuskan coil yang sedang bertenaga menghantar inductive kick ke tempat yang bukan pilihan anda.
USB sudah memadai di sini. Setiap fasa berukuran lebih kurang 50 Ω, jadi pada 5V ia menarik 5 ÷ 50 = 0.1 A, dan urutan pemacuan menghidupkan dua fasa serentak — kira-kira 200 mA semasa bergerak, berbanding 500 mA sebuah port USB dan 40 mA Uno itu sendiri. Ambil daripada USB dan bukan jack barrel Uno, sebab kalau diberi 12V, regulator Uno terpaksa membakar lebihannya sebagai haba, lebih kurang 7 V × 0.24 A = 1.7 W.
Motor kedua, atau satu motor yang dibiarkan bertenaga untuk tempoh panjang, tidak muat dalam bajet kuasa itu. Baris pilihan tadi memberikannya rel kuasa sendiri: adaptor 5V masuk ke pigtail socket barrel, hujung wayar terdedah masuk ke terminal skru biru pada shield — wayar daripada pin tengah barrel ke skru V/VCC, satu lagi ke G/GND. Adaptor itu centre-positive, jadi ujian continuity menentukan wayar mana yang mana sebelum kuasa dihidupkan; menterbalikkan pasangan itu membekalkan driver secara songsang. Tanggalkan jumper SEL kuning dahulu. SEL membekalkan pin V blok digital daripada 5V Uno sendiri, jadi membiarkannya terpasang akan menyebabkan adaptor itu short terus ke rel 5V Uno dan port USB di belakangnya, dan kedua-duanya boleh rosak. Rel G kekal sebagai ground sepunya walau apa pun, dan itulah yang memastikan aras logik Uno bermakna kepada driver. Jangan sekali-kali buka adaptor mains itu atau ubah suai hujung plugnya.
Dari mana datangnya angka 2048 langkah setiap pusingan?
Rotor 28BYJ-48, sebelum apa-apa gearing, bergerak 11.25° setiap full step — 32 full step untuk satu pusingan dalaman. Half-stepping membelah setiap satu kepada dua, memberikan sudut langkah 5.625° seperti dalam datasheet dan 64 half-step setiap pusingan. Gearbox kemudian menurunkannya dengan nisbah nominal 64:1, jadi 32 × 64 = 2048 full step (atau 4096 half-step) pada shaft output.
Cumanya gearbox itu sebenarnya bukan 64:1. Orang yang pernah membukanya dan mengira gigi mendapati satu rangkaian empat peringkat yang tepatnya (31 × 32 × 26 × 22) ÷ (11 × 10 × 9 × 9) = 63.68395:1. Kiraan yang sama, angka yang jujur: 32 × 63.68395 = 2037.9 langkah.
| Kuantiti | Nominal (64:1) | Diukur (63.68395:1) |
|---|---|---|
| Full step setiap pusingan output | 2048 | 2037.9 |
| Half-step setiap pusingan output | 4096 | 4075.8 |
| Darjah setiap full step | 0.1758° | 0.1767° |
Jurang itu bukan soal teori semata. Arahkan 2048 langkah dan shaft berpusing 2048 ÷ 2037.9 × 360° = 361.8° — terlebih pusing 1.8° setiap pusingan, sentiasa ke arah yang sama, jadi dua puluh pusingan kemudian penunjuk anda sudah tersasar 36°. Inilah keseluruhan tujuan motor stepper: kedudukan terhasil daripada mengira, jadi kiraan itu wajib betul.

Kenapa susunan pin 8, 10, 9, 11 dan bukan 8, 9, 10, 11?
Empat fasa 28BYJ-48 duduk mengelilingi stator mengikut susunan connector, dan urutan pemacuan yang diterbitkan menghidupkan pasangan bersebelahan: IN1+IN2, kemudian IN2+IN3, IN3+IN4, IN4+IN1. Setiap langkah berkongsi satu coil dengan langkah sebelumnya, dan pertindihan itulah yang menggerakkan medan magnet selangkah demi selangkah mengelilingi gelang stator.
Library Stepper yang datang sekali dengan Arduino pula memandu empat pinnya dalam corak 1010, 0110, 0101, 1001 — iaitu ia menghidupkan (arg1,arg3), (arg2,arg3), (arg2,arg4), (arg1,arg4). Argumen 1 dan 3 yang berpasangan dahulu, bukan 1 dan 2.
Susun dua senarai itu bersebelahan dan pemetaannya terus jelas: arg1 = IN1, arg3 = IN2, arg2 = IN3, arg4 = IN4 — dalam nombor pin, Stepper(2038, 8, 10, 9, 11). Bukan typo yang semua orang salin: ia terjemahan antara konvensyen berpasangan library dengan susunan coil motor ini.
Beri susunan 8, 9, 10, 11 yang nampak paling logik itu dan setiap pasangan jatuh salah tempat. Langkah 1 dan 3 menjadi IN1+IN3 dan IN2+IN4 — fasa di sebelah bertentangan stator, tarik-menarik melawan satu sama lain sampai hampir tiada medan bersih langsung. Langkah 2 dan 4 pula memberi IN2+IN3 dan IN1+IN4: kedudukan yang sah, tetapi 180° bertentangan. Medan pergi ke mana-mana, ke satu sisi, ke mana-mana, ke sisi satu lagi, jadi rotor bergoyang antara dua titik dan bukannya melangkah mengelilingi gelang. Buktikan dalam sepuluh saat: tukar dua argumen tengah dan dengar bunyinya.
Apa sebenarnya yang ULN2003 buat?
ULN2003AN memuatkan tujuh pasangan Darlington yang serupa dalam satu cip 16-pin — sebab itulah silkscreen board sampai ke IN7 sedangkan hanya IN1–IN4 yang ada pin. Perkataan paling pentingnya ialah sink: setiap saluran hanya boleh menarik outputnya ke bawah ke ground, tidak pernah membekalkan arus. Itulah sebabnya wayar merah motor ialah centre tap sepunya yang dipegang pada +5V — arus keluar daripada rel 5V, mengalir melalui separuh coil, masuk ke cip dan keluar ke ground.
Setiap saluran hanyalah suis low-side, kerja yang sama dibuat oleh modul IRF520 dengan satu MOSFET — jadi arus tidak pernah boleh berbalik arah dalam separuh coil. Itulah pemacuan unipolar: separuh tembaga menganggur pada bila-bila masa, tork dikorbankan demi kesederhanaan.
Ia juga menjelaskan empat LED itu: LED duduk pada output, jadi setiap satu menyala tepat apabila coilnya bertenaga — logic analyser percuma. LED berkejar-kejaran tetapi shaft diam bermakna masalah mekanikal atau plug yang tak masuk penuh; LED yang langsung tak berkejaran bermakna masalah pada pin atau sketch anda.
Darlington terus mengalirkan arus selagi inputnya kekal HIGH, jadi dua coil terakhir kekal bertenaga selepas satu pergerakan tamat. Itulah holding torque, dan itulah sebabnya motor jadi suam walaupun diam. Tulis LOW pada keempat-empat pin semasa idle, dan jangan tinggalkan motor yang tersekat dalam keadaan bertenaga tanpa diawasi.

Macam mana rupa sketch yang lengkap?
Library Stepper datang sekali dengan Arduino IDE, jadi tiada apa yang perlu dipasang. Sketch ini membuat empat suku pusingan dengan jeda selepas setiap satu, kemudian pulang ke titik asalnya dalam satu pergerakan — ia bekerja daripada kiraan langkah mutlak, jadi ralat pembundaran tidak pernah terkumpul.
#include <Stepper.h>
// Board ULN2003 -> Arduino Uno (melalui pin S pada Sensor Shield)
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;
// Gearbox ini nominalnya 64:1, tetapi rangkaian gear sebenar berukuran
// 63.68395:1, jadi satu pusingan output ialah 32 * 63.68395 = 2037.9 langkah.
// 2038 angka yang jujur; 2048 terlebih kira-kira 1.8 darjah setiap pusingan.
const int STEPS_PER_REV = 2038;
// PENTING: argumennya ialah IN1, IN3, IN2, IN4 - bukan 8, 9, 10, 11.
// Library menghidupkan pasangan (arg1,arg3), (arg2,arg3), (arg2,arg4),
// (arg1,arg4); menukar dua argumen tengah membuatkan pasangan itu jatuh
// pada coil yang duduk bersebelahan di dalam stator.
Stepper motor(STEPS_PER_REV, IN1, IN3, IN2, IN4);
long currentStep = 0; // di mana sketch percaya shaft sedang berada
// Darlington mengalirkan arus selagi inputnya HIGH, jadi coil kekal
// bertenaga (dan suam) selepas satu pergerakan. Lepaskan semasa idle.
void releaseCoils() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
// Bergerak ke kedudukan MUTLAK dikira dari tempat kita bermula.
// Bekerja daripada satu titik asal dan bukan menambah kenaikan
// bermakna ralat pembundaran tidak pernah terkumpul.
void moveTo(long target) {
motor.step((int)(target - currentStep));
currentStep = target;
releaseCoils();
Serial.print(F("langkah "));
Serial.print(currentStep);
Serial.print(F(" ="));
Serial.print(currentStep * 360.0 / STEPS_PER_REV, 1);
Serial.println(F(" darjah"));
}
void setup() {
Serial.begin(9600);
motor.setSpeed(10); // rpm; motor ini stall di suatu tempat melebihi ~15 pada 5V
releaseCoils();
Serial.println(F("28BYJ-48 sedia"));
}
void loop() {
// Empat suku pusingan, dengan jeda supaya anda boleh tengok setiap satu sampai
for (int quarter = 1; quarter <= 4; quarter++) {
moveTo((long)STEPS_PER_REV * quarter / 4);
delay(600);
}
delay(1000);
moveTo(0); // terus balik ke titik asal dalam satu pergerakan
delay(2000);
}
Buka Serial Monitor pada 9600 baud: kiraannya patut berbaris 509, 1019, 1528, 2038 dan kembali ke sifar sementara shaft membuat empat suku pusingan yang kemas dan satu pusingan penuh untuk pulang. Kalau ia berdengung tetapi tak mahu berpusing, periksa susunan argumen dahulu. Perhatikan juga bahawa step() menyekat sehingga satu pergerakan tamat — tiada apa-apa lagi dalam loop() yang berjalan semasa shaft sedang berpusing.
Panduan pemula oleh Nikodem Bartnik menunjukkan motor dan board driver yang sama berjalan di atas meja kerja:
Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Kesilapan 28BYJ-48 yang paling kerap kami nampak, jauh mengatasi yang lain, ialah susunan pin berturutan — Stepper(2048, 8, 9, 10, 11) disalin daripada contoh generik. Ia compile, LED pun berkelip, dan shaft cuma duduk di situ berdengung.
Selepas itu, membiarkan 2048 dalam kerja yang berjalan berjam-jam, kemudian memanggil hasilnya sebagai lost step. Tiada apa-apa yang hilang: kiraan yang terlebih 0.5% muncul sebagai hanyutan sehala yang tetap, bukan lompatan rawak seperti langkah tertinggal yang sebenar.
Kemudian: refleks mahu cucuk ke breadboard; guna 12V sebab silkscreen tulis 5–12V; dan motor “mati” yang rupa-rupanya connector tak ditolak masuk penuh.
Soalan lazim tentang 28BYJ-48 dan ULN2003
Patutkah saya guna 2048 atau 2038 langkah setiap pusingan?
Guna 2038 di mana-mana kedudukan penting merentas masa — jam, penunjuk, slider kamera. Nisbah gear yang diukur ialah 63.68395:1, bukan 64:1, jadi 2048 terlebih kira-kira 1.8° setiap pusingan, sentiasa ke arah yang sama. Pada demo yang berpusing ke depan dan ke belakang, kedua-dua angka nampak sama sahaja.
Kenapa motor saya jadi suam walaupun tak bergerak?
Sebab ULN2003 terus mengalirkan arus selagi pin Arduino anda kekal HIGH, jadi dua coil terakhir kekal bertenaga selepas pergerakan tamat. Itulah holding torque — berguna apabila shaft mesti kekal di tempatnya, kalau tidak tulis LOW pada keempat-empat pin antara pergerakan.
Stepper atau servo untuk projek saya?
Servo apabila anda mahu sudut yang dipegang dalam lingkungan 180° dengan maklum balas kedudukan terbina dalam; stepper apabila anda mahu putaran tanpa had dalam langkah yang boleh dikira dan boleh terima hakikat bahawa tiada apa-apa memberitahu anda bila satu langkah tertinggal. Panduan servo 180 vs 270 vs 360 kami menerangkan sebelah sana pula.
ULN2003 driver yang betul, atau patut guna L298N atau A4988?
ULN2003 yang datang sekali dalam kit itu memang betul — 28BYJ-48 ialah motor unipolar dengan centre tap sepunya, tepat seperti yang dipandu oleh array sink Darlington. Board H-bridge seperti L298N dalam panduan robot line follower kami sesuai untuk stepper bipolar dan motor DC brushed; chopper seperti A4988 pula sesuai untuk stepper NEMA-17. Kelas motor yang berbeza, bukan naik taraf.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



28BYJ-48 Stepper Motor + ULN2003 Motor Driver 5V DC Motor For Arduino Robotic
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Sensor Shield V5.0 Arduino Uno R3 Shield For Arduino Protoype Application
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE F-F 20CM
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (5V2A)
5.5x2.1mm DC Power Male Connector Plug Jack Adapter for Arduino DIY Electronics Projects - 5.5x2.1 DC CONNECTOR (F)