Step Motor Nedir? 28BYJ-48 ve ULN2003 ile Arduino'da Hassas Dönüş
Step motor nasıl çalışır? 28BYJ-48 ve ULN2003 sürücü bağlantısı, tur başına adım (2048), Stepper ve AccelStepper kütüphaneleri, açıyla döndürme, A4988 ile NEMA 17, ESP32 ve Pico kullanımı.
Step motor (adım motoru), dönüşünü küçük ve eşit adımlara bölen bir motordur. Her komutla belirli bir açı kadar döner; bu yüzden ek bir sensör kullanmadan motorun tam olarak nerede durduğunu bilirsin. 3D yazıcılar, CNC makineleri, kamera kaydırıcıları ve otomatik perdeler bu hassasiyet sayesinde step motor kullanır. Arduino'yla öğrenmeye başlamanın en ucuz yolu ise 28BYJ-48 motoru ve onunla birlikte satılan ULN2003 sürücü kartıdır.

Step motor nasıl çalışır?
Step motorun içinde, dişli bir mıknatıs rotorun etrafına dizilmiş birkaç bobin vardır. Bobinlere belirli bir sırayla akım verildiğinde rotor her seferinde en yakın bobine çekilir ve bir adım ilerler. Sırayı hızlı uygularsan motor hızlı, yavaş uygularsan yavaş döner; sırayı tersine çevirirsen ters yöne döner. Motor her adımı saydığı için konumu bilinir, ama aşırı yüklenirse adım kaçırabilir ve bunu kendisi fark edemez.
Step motor mu, servo mu, DC motor mu?
| Özellik | DC motor | Servo motor | Step motor |
|---|---|---|---|
| Hareket | Sürekli döner | Belirli bir açıya gider (genelde 0–180°) | Sınırsız tur, adım adım |
| Konum bilgisi | Yok | Var (içinde geri besleme) | Adımlar sayılarak bilinir |
| Hız | Çok hızlı | Orta | Düşük–orta |
| Düşük hızda tork | Düşük | Orta | Yüksek |
| Tipik kullanım | Tekerlek, fan, pompa | Robot kol, kilit, direksiyon | 3D yazıcı, CNC, kaydırıcı, saat |
Belirli bir açıya gidip orada durmak yeterliyse servo daha basittir; ayrıntılar Servo Motor Nedir? yazısında. Hızlı ve sürekli dönüş gerekiyorsa DC motor ve L298N motor sürücü daha uygundur. Hem birden fazla tur dönmesi hem de konumunu bilmesi gereken işlerde ise step motor rakipsizdir.
28BYJ-48 teknik özellikleri
| Özellik | Değer |
|---|---|
| Tür | 4 fazlı, unipolar step motor |
| Çalışma gerilimi | 5 V DC |
| İç dişli oranı | Yaklaşık 1:64 |
| Tur başına adım | 2048 (tam adım), 4096 (yarım adım) |
| Adım açısı | Yaklaşık 0,18° (tam adım) |
| Akım tüketimi | Yaklaşık 200–250 mA |
| En yüksek hız | Yaklaşık 10–15 devir/dakika |
| Kablo | 5 adet (kırmızı ortak uç) |
ULN2003 sürücü bağlantısı
Motorun 5 kablolu soketi ULN2003 kartındaki yuvaya yalnızca tek yönde girer, yanlış takamazsın. Kartın IN1–IN4 pinlerini Arduino'nun 8–11. pinlerine, + ve – uçlarını ise 5 V beslemeye bağla. ULN2003, Arduino pininden gelen küçük sinyali bobinin ihtiyaç duyduğu akıma yükselten bir Darlington transistör dizisidir; kartın üzerindeki dört LED de bobinlerin sırayla çalıştığını gösterir.
| ULN2003 pini | Arduino Uno |
|---|---|
| IN1 | D8 |
| IN2 | D9 |
| IN3 | D10 |
| IN4 | D11 |
| + (5–12 V) | Harici 5 V (tek motor için Uno'nun 5V pini de olur) |
| – (GND) | GND (Arduino ile ortak) |
Stepper kütüphanesiyle ilk dönüş
Arduino IDE ile birlikte gelen Stepper kütüphanesi ek kurulum gerektirmez. Dikkat etmen gereken tek nokta pin sırasıdır: 28BYJ-48 için nesne 8, 10, 9, 11 sırasıyla (IN1, IN3, IN2, IN4) tanımlanmalıdır. Sırayı 8, 9, 10, 11 yazarsan motor dönmek yerine yerinde titrer; bu, en sık yapılan hatadır.
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}Potansiyometreyle konum kontrolü
Motorun şu anki konumunu bir değişkende tutarsan onu istediğin noktaya götürebilirsin. Aşağıdaki kod potansiyometrenin konumunu 0–2048 adıma çevirir ve motor, düğmeyi takip eder gibi aynı noktaya döner. Küçük titreşimleri yok saymak için 10 adımlık bir tolerans kullanılır. Potansiyometrenin bağlantısı Potansiyometre Nedir? yazısında.
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: yumuşak hızlanma ve bekletmeden çalışma
Stepper kütüphanesindeki step() komutu dönüş bitene kadar programı bekletir; bu sırada buton okuyamaz, ekran güncelleyemezsin. Kütüphane Yöneticisi'nden kurabileceğin AccelStepper ise motoru arka planda adım adım ilerletir ve hızlanma-yavaşlama ekleyerek ani kalkışları önler. 28BYJ-48 için yarım adım modu (HALF4WIRE) kullanılır, bu modda bir tur 4096 adımdır:
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}Daha güçlü motorlar: NEMA 17 ve A4988

3D yazıcı ve CNC gibi güç gerektiren işlerde NEMA 17 gibi bipolar step motorlar kullanılır. Bu motorlar turda 200 adım (1,8°) atar ve 28BYJ-48'den çok daha güçlüdür. Onları A4988 ya da DRV8825 gibi sürücülerle sürersin: her STEP darbesinde motor bir adım atar, DIR pini yönü belirler. Sürücü 8–35 V ile beslenir ve mikro adım ayarıyla adımları 16'ya kadar bölerek daha yumuşak dönüş sağlar.
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}ESP32 ve Raspberry Pi Pico ile step motor
ULN2003'ün girişleri 3,3 V sinyalle sorunsuz çalışır; motor beslemesini yine 5 V'tan ayrı olarak ver. ESP32'de AccelStepper kütüphanesi aynen çalışır; 6–11 ve 34–39 dışındaki pinleri, örneğin GPIO 19, 18, 5 ve 17'yi kullanabilirsin. Pico'da MicroPython ile dört pine yarım adım dizisini sırayla yazarak motoru döndürürsün:
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 backStep motor ile proje fikirleri
- Analog saat: Akrep ve yelkovanı step motorlarla döndüren bir masa saati.
- Kamera kaydırıcı: Zaman atlamalı (timelapse) çekimler için kamerayı çok yavaş kaydıran bir ray.
- Otomatik balık yemleyici: Günde iki kez döner haznesini çevirip yem bırakan bir düzenek.
- Güneş takip paneli: İki ışık sensörüyle paneli en parlak yöne çevir; ışık tarafı için LDR Işık Sensörü.
- Döner tabla: Ürün fotoğrafı ya da 3D tarama için nesneyi eşit açılarla döndüren tabla.
- Otomatik perde: Perde ipini sararak açıp kapatan, konumunu hatırlayan bir motor.
Sık yapılan hatalar ve çözümleri
- Motor titreşiyor ama dönmüyor: Stepper kütüphanesinde pin sırası yanlış; 8, 9, 10, 11 yerine 8, 10, 9, 11 yaz.
- Motor adım kaçırıyor: Hız çok yüksek ya da yük çok ağır; 28BYJ-48'i 15 devir/dakikanın altında tut ve AccelStepper ile hızlanma ekle.
- Arduino yeniden başlıyor: Besleme yetersiz; motoru harici bir 5 V kaynaktan besle ve GND'leri birleştir.
- Motor dururken ısınıyor: Bobinler enerjili kalıyor; hareket bitince dört pini LOW yap.
- Tur sayısı tutmuyor: Tam adımda 2048, yarım adımda 4096 adım vardır; NEMA 17'de ise 200 adım. Kullandığın modu ve motoru karıştırma.
- A4988 ile motor dönmüyor: Akım sınırı çok düşük ayarlanmış, motor beslemesi yok ya da RESET ile SLEEP pinleri birbirine bağlanmamış.
Step motor, "tam olarak şu kadar dön" demenin en kolay yoludur ve CNC, 3D yazıcı gibi makinelerin temelini oluşturur. BlueGrays uygulamasında 28BYJ-48 ile step motor kullanımı ve step motordan 360 derece dönen servo yapımı projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.
Sıkça sorulan sorular
28BYJ-48 bir turda kaç adım atar?
Tam adım modunda yaklaşık 2048, yarım adım modunda yaklaşık 4096 adım atar. Motorun iç dişli oranı tam olarak 1:64 olmadığı için çok uzun dönüşlerde küçük bir sapma oluşabilir; hassas işlerde konumu ara sıra bir sınır anahtarıyla sıfırlamak iyi olur.
Step motor neden titreşiyor ama dönmüyor?
En sık sebep bobinlerin yanlış sırayla sürülmesidir. Arduino'nun Stepper kütüphanesinde 28BYJ-48 için pinler 8, 10, 9, 11 (IN1, IN3, IN2, IN4) sırasıyla yazılmalıdır. Hız çok yüksekse ya da besleme yetersizse de motor dönmek yerine titreyebilir.
ULN2003'ü Arduino'nun 5V pininden besleyebilir miyim?
Tek bir 28BYJ-48 için genellikle evet; motor yaklaşık 240 mA çeker ve USB bunu karşılar. İki motor, servo ya da başka yükler varsa Arduino'nun regülatörü ve USB portu zorlanır; bu durumda harici bir 5 V kaynak kullanıp GND'leri birleştir.
Step motor konumunu nasıl bilir?
Step motor konumunu ölçmez, atılan adımları sayarak bilir. Bu yüzden açılışta motoru bir referans noktasına (örneğin bir sınır anahtarına) götürüp sıfırlamak ve aşırı yük ya da yüksek hız nedeniyle adım kaçırmasını önlemek gerekir.
Step motor mu servo motor mu kullanmalıyım?
0–180 derece arasında bir açıya gidip orada durmak yetiyorsa servo daha basittir ve kendi sürücüsü içindedir. Birden fazla tur dönmesi, düşük hızda güçlü tork vermesi ya da çok hassas konumlanması gereken işlerde step motor seçilir.
28BYJ-48 ile NEMA 17 arasındaki fark nedir?
28BYJ-48 küçük, ucuz, 5 V ile çalışan ve dişli kutusu sayesinde yavaş ama hassas dönen bir motordur. NEMA 17 ise turda 200 adım atan, çok daha güçlü ve hızlı bir bipolar motordur; A4988 gibi bir sürücü ve 12–24 V besleme ister. Hobi projeleri için 28BYJ-48, 3D yazıcı ve CNC gibi makineler için NEMA 17 kullanılır.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Step Motor Kullanımı
28BYJ-48 step motoru ULN2003A sürücü kartı ile saat yönünde ve tersine tam tur döndüren temel proje. Step motor adımlama ve yön kontrolünü öğretir.

Step Motordan 360 Derecelik Servo Motor Yapımı
Step motoru belirli açılara (0°-360°) konumlandırabilen, adım başına derece hesaplaması yapan servo benzeri kontrol projesi. Hassas açı hesaplama ve konum takibi mantığını öğretir.

Joystick İle Servo Kontrol
Joystick modülü ile iki servo motoru X ve Y eksenlerinde bağımsız olarak kontrol eden pan-tilt projesi. Joystick-servo entegrasyonu ve konum takibi mantığını öğretir.

ESP32 Servo Motor (Potansiyometre Kontrolü)
Bu projede potansiyometre ile SG90 servo motoru kontrol ediyoruz. Potansiyometreden okunan analog değeri 0-180 derece aralığına map'leyerek servo açısını ayarlıyoruz. ESP32Servo kütüphanesi sayesinde ESP32'nin herhangi bir GPIO'su PWM sinyali üretebiliyor. Bu, robotik kollar, kamera gimbal'ları ve otomatik kapı mekanizmaları için temel bir kontrol yöntemidir.

L298N ile Bluetooth Kontrollü Araba
Arduino ve HC-05 Bluetooth modülü ile telefondan kontrol edilebilen 2WD (iki motorlu, dört tekerlekli) robot araba projesi. L298N motor sürücü kartı üzerinden her bir taraftaki iki motor paralel bağla

Engelden Kaçan Robot
Kendi yolunu bulan akıllı bir araç yapmaya ne dersin? Engelden Kaçan Robot, önündeki ultrasonik sensör sayesinde çevresini sürekli tarar. Bir engelle karşılaştığında durur, servo motoruyla sağına ve s

Joystick İle Led Kontrol
Joystick modülünün X ve Y eksen değerlerine göre 4 farklı yönde LED'leri yakan kontrol projesi. Analog joystick okuma ve yön algılama mantığını öğretir.

ESP32 Park Sensörü (HC-SR04 + 5 LED Bar + Buzzer + OLED)
Otomobil park sensörünün ESP32 versiyonu! HC-SR04 ultrasonik sensör ile önündeki nesneye olan mesafeyi ölçüyoruz. Mesafe azaldıkça 5 LED'lik bar dolar (yeşil → sarı → kırmızı) ve buzzer bip aralığı kısalır. Çok yakınlaşınca (10 cm altında) sürekli alarm çalar ve tüm LED'ler yanar. SSD1306 OLED ekranda büyük fontla anlık cm değeri, durum metni (SAKIN / DIKKAT / YAKIN / DUR! / TEHLIKE) ve LED bar simülasyonu gösterilir. Klasik ve öğretici bir proje — HC-SR04 pulseIn, digital multi-output, buzzer P
Diğer yazılar
Step motorun adım adım nasıl döndüğünü, 28BYJ-48'i ULN2003 ile Arduino'ya bağlamayı, istediğin açıya döndürmeyi, AccelStepper ile yumuşak hızlanmayı ve güçlü NEMA 17 motorları öğren.

