L293D Motor Shield Kullanımı: AFMotor, 4 Motor, Step ve Servo
L293D motor shield nasıl kullanılır? AFMotor kütüphanesi, PWR jumper'ı, boş pinler, 4WD araba kodu, step ve servo, 0,6 A sınırı ve motor dönmüyor çözümleri.
L293D motor shield, Arduino Uno'nun üstüne doğrudan takılan ve tek kartla 4 DC motor, 2 step motor ve 2 servo sürmeni sağlayan bir motor sürücü kartıdır. Üzerindeki iki L293D yongası motorların ihtiyaç duyduğu akımı sağlar, dönüş yönlerini çevirir ve hızlarını PWM ile ayarlar; böylece tek bir jumper kablo kullanmadan dört tekerli bir robot arabanın bütün motorlarını yönetebilirsin. Piyasadaki kartların neredeyse hepsi Adafruit'in eski Motor Shield V1 tasarımının kopyasıdır ve aynı kütüphaneyle, yani AFMotor ile programlanır.
Bu rehberde shield'in içinde neler olduğunu, hangi Arduino pinlerini kullandığını ve hangilerinin sensörlere boş kaldığını, en çok kafa karıştıran PWR jumper'ını üç farklı besleme düzeniyle, AFMotor kütüphanesinin komutlarını ve telefondan sürülen dört tekerli bir robot arabanın tam kodunu öğreneceksin. Son bölümlerde 0,6 A'lik akım sınırını, yonganın neden ısındığını, L298N ile farklarını ve "motorlar dönmüyor" sorununun bilinen sebeplerini tek tabloda topladık.

L293D motor shield nedir, nasıl çalışır?
Bir DC motoru iki yöne döndürmek için H-köprüsü denen dört anahtarlı bir devre gerekir; bu mantığı L298N ile DC Motor Kontrolü yazısında ayrıntılı anlattık. L293D yongasının içinde iki H-köprüsü vardır; shield'de bu yongadan iki tane bulunduğu için toplam dört motor kanalı elde edilir. Adındaki "D" harfi, motor kapanırken oluşan ters gerilim sıçramalarını söndüren koruma diyotlarının yonganın içinde olduğunu gösterir. L293D ayrıca aşırı ısındığında çıkışlarını kendiliğinden kapatır.
Shield'in asıl püf noktası ortadaki 74HC595 kaydırmalı yazmaçtır (shift register). Dört motorun her biri yön için iki, hız için bir sinyal ister; bu da toplam 12 Arduino pini demektir. Shield sekiz yön sinyalini 74HC595'e seri olarak gönderip bunun için yalnızca 4 pin (D4, D7, D8, D12) harcar, hız için de 4 PWM pini (D3, D5, D6, D11) kullanır. Bu tasarım pin kazandırır ama bir bedeli vardır: motorları digitalWrite ile doğrudan süremezsin, yön bitlerini yazmaca gönderen bir kütüphane gerekir. O kütüphane de AFMotor'dur.
| Özellik | Değer |
|---|---|
| Sürücü yongaları | 2 adet L293D (toplam 4 H-köprüsü) |
| Yön kontrolü | 74HC595 kaydırmalı yazmaç (D4, D7, D8, D12) |
| Motor besleme gerilimi | 4,5–25 V (harici besleme klemensi) |
| Kanal başına akım | 0,6 A sürekli, 1,2 A çok kısa süreli tepe |
| Hız ayarı | 8 bit PWM, setSpeed(0–255) |
| Sürebildiği motorlar | 4 DC motor, 2 step motor ya da 2 DC + 1 step |
| Servo | 2 adet, Arduino'nun 5 V hattından beslenir (D9 ve D10) |
| Koruma | Dahili diyotlar, aşırı sıcaklıkta kapanma |
| Uyumlu kartlar | Arduino Uno R3 ve Mega 2560 (Uno R4 ve Leonardo desteklenmez) |
Kartın üzerinde neler var? Klemensler, başlıklar ve jumper
| Parça | Görevi |
|---|---|
| M1 ve M2 klemensi (sol) | 1. ve 2. DC motor; ortadaki GND ucu unipolar step motorun ortak kablosu içindir |
| M3 ve M4 klemensi (sağ) | 3. ve 4. DC motor ya da 2 numaralı step motor |
| EXT_PWR (+M ve GND) | Motorların besleme girişi: pil ya da adaptör |
| PWR jumper'ı | Takılıyken motor beslemesini Arduino'nun Vin hattına bağlar |
| SER1 ve SERVO_2 | İki servo başlığı (−, +, S); D10 ve D9 |
| PWR LED'i | Motor beslemesi var mı gösterir; sönükse motorlar dönmez |
| RESET düğmesi | Arduino'nun reset düğmesinin shield üstündeki kopyası |
| A0–A5 sırası | Boş analog pinler; çoğu kartta yanlarında +5V ve GND sıraları da vardır |
Shield hangi pinleri kullanır, hangileri boş kalır?
| Arduino pini | Shield'deki görevi | Ne zaman meşgul? |
|---|---|---|
| D3 | M2 hızı (PWM, Timer2) | M2 ya da 1. step motor kullanılınca |
| D4 | 74HC595 saat sinyali (CLK) | Herhangi bir DC ya da step motor kullanılınca |
| D5 | M4 hızı (PWM, Timer0) | M4 ya da 2. step motor kullanılınca |
| D6 | M3 hızı (PWM, Timer0) | M3 ya da 2. step motor kullanılınca |
| D7 | 74HC595 çıkış etkinleştirme (EN) | Herhangi bir motor kullanılınca |
| D8 | 74HC595 veri girişi (DATA) | Herhangi bir motor kullanılınca |
| D9 | SERVO_2 sinyali (Timer1) | Yalnızca o servo kullanılınca |
| D10 | SER1 sinyali (Timer1) | Yalnızca o servo kullanılınca |
| D11 | M1 hızı (PWM, Timer2) | M1 ya da 1. step motor kullanılınca |
| D12 | 74HC595 mandal (LATCH) | Herhangi bir motor kullanılınca |
| D0, D1 | Kullanılmaz (USB seri hattı) | Kod yüklerken ve Seri Monitör açıkken |
| D2 | Kullanılmaz; kartta küçük bir lehim noktası vardır | Hiçbir zaman |
| D13 | Kullanılmaz ama shield'in üstüne çıkarılmamıştır | Hiçbir zaman |
| A0–A5 (D14–D19) | Kullanılmaz; kartın kenarında sıra hâlinde | Hiçbir zaman |
Boşta kalan altı analog pin sensörler için fazlasıyla yeterlidir, çünkü Uno'nun A0–A5 pinleri gerektiğinde 14–19 numaralı dijital pinler gibi de çalışır. Pratik bir dağılım şöyle olabilir: A0 ve A1'e HC-SR04 mesafe sensörü ya da SoftwareSerial ile bir Bluetooth modülü, A2 ve A3'e çizgi izleme ya da engel sensörleri, A4 ve A5'e I2C hattı (OLED, LCD, MPU6050). attachInterrupt() ile kesme kullanan bir tekerlek enkoderi ya da buton için tek boş pin D2'dir; Uno'nun diğer kesme pini D3, M2'nin hız pinidir. Servo kullanmıyorsan D9 ve D10 da serbest kalır. Kartının pin düzenini Pinout aracında, pinlerin özelliklerini de Arduino Uno Pinleri yazısında görebilirsin.
Besleme ve PWR jumper'ı: doğru bağlantının üç yolu
Kartın alt kenarındaki iki uçlu EXT_PWR klemensi motorların besleme girişidir; artı ucu genellikle "+M" ya da "+", eksi ucu "GND" diye yazılıdır. Hemen yanındaki PWR jumper'ı bu motor hattını Arduino'nun Vin pinine bağlar. Jumper takılıyken iki kart tek kaynaktan beslenir: EXT_PWR'a verdiğin gerilim Vin üzerinden Arduino'yu da çalıştırır ya da Arduino'nun DC jakına taktığın adaptör motorları da besler. Jumper çıkarıldığında iki hat birbirinden tamamen ayrılır. Kartın üzerindeki PWR LED'i yalnızca motor beslemesi geldiğinde yanar; motorlarla uğraşmaya başlamadan önce ilk kontrol edeceğin şey bu LED'dir.
| Düzen | Arduino beslemesi | Motor beslemesi | PWR jumper'ı |
|---|---|---|---|
| Tek kaynak (7–12 V pil ya da adaptör) | Aynı kaynaktan, Vin üzerinden | EXT_PWR ya da Arduino'nun DC jakı | Takılı |
| Arduino USB'den, motorlar pilden | USB kablosu | EXT_PWR | Çıkarılmış |
| İki ayrı kaynak (en güvenlisi) | DC jakı ya da USB | EXT_PWR | Çıkarılmış |
Robot arabalarda en yaygın kullanım tek kaynaktır: 2 adet 18650 pilden oluşan paketi EXT_PWR'a bağlar, jumper'ı takarsın ve hem Arduino hem motorlar aynı pille çalışır. Bu düzen basittir, ama motorlar kalkışta çok akım çektiğinde pil gerilimi anlık olarak düşebilir ve Arduino yeniden başlayabilir. Bunu yaşıyorsan jumper'ı çıkarıp Arduino'yu ayrı bir kaynaktan (powerbank, USB ya da 9 V'luk bir adaptör) beslemek kesin çözümdür. Masada deneme yaparken ikinci düzen en pratiğidir: Arduino bilgisayara bağlı kalır, motorlar pilden çalışır ve jumper çıkarılmış olur.
Hangi pili seçmelisin? L293D'nin çıkış transistörleri akıma bağlı olarak yaklaşık 1,5–2,6 V yutar, yani motor pilin geriliminden bu kadar daha azını görür. Robot kitlerindeki sarı 3–6 V'luk TT motorlar için 2 adet 18650 lityum pil (nominal 7,4 V, dolu hâlde 8,4 V) idealdir: motorlar yaklaşık 5,5–6 V görür, jumper takılıyken Arduino'nun regülatörü de rahat çalışır. 4 adet AA pil (6 V) motorlara yalnızca 4 V civarı bırakır ve Arduino'yu Vin'den beslemeye yetmez. 9 V'luk kare pil ise birkaç yüz miliamperden fazlasını veremez; motorlar ya hiç dönmez ya da pil dakikalar içinde biter. Pil süresini Pil ömrü aracıyla hesaplayabilir, besleme seçeneklerinin tamamını Arduino Pil ile Çalıştırma yazısında okuyabilirsin.
AFMotor kütüphanesini kurmak
- Arduino IDE'de Kütüphane Yöneticisi'ni aç (Araçlar > Kütüphaneleri Yönet ya da Ctrl+Shift+I).
- Arama kutusuna Adafruit Motor Shield yaz. İki sonuç çıkar: açıklamasında "V1 firmware" yazan Adafruit Motor Shield library ve Adafruit Motor Shield V2 Library.
- L293D'li shield için V1 olanı kur. V2 kütüphanesi, I2C ile haberleşen ve TB6612 yongalı bambaşka bir kart içindir.
- Kodunun başına #include <AFMotor.h> satırını ekle.
- İstersen Dosya > Örnekler > Adafruit Motor Shield library > MotorTest örneğini açıp M1'e bağlı bir motorla kartı dene.
İlk program: bir DC motoru ileri, geri ve farklı hızlarda döndürmek
Motorun iki kablosunu M1 klemensinin iki ucuna vidalarla sık; ortadaki GND ucunu boş bırak. Pil paketini EXT_PWR'a bağla, Arduino'yu USB ile bilgisayara tak ve PWR jumper'ını çıkar (yukarıdaki ikinci düzen). PWR LED'i yanıyorsa aşağıdaki kodu yükle: motor önce yavaşça hızlanıp yavaşlar, sonra iki saniye geri döner ve durur.
1#include <AFMotor.h> // Adafruit Motor Shield V1 kütüphanesi / library
2
3AF_DCMotor motor(1); // M1 klemensi / M1 terminal
4
5void setup() {
6 Serial.begin(9600);
7 Serial.println(F("L293D motor testi / motor test"));
8 motor.setSpeed(200); // 0–255; bunu unutursan motor dönmez / skip this and the motor won't turn
9 motor.run(RELEASE); // başlangıçta dur / start stopped
10}
11
12void loop() {
13 motor.run(FORWARD); // ileri / forward
14 for (int s = 60; s <= 255; s++) { // yavaşça hızlan / ramp up
15 motor.setSpeed(s);
16 delay(10);
17 }
18 for (int s = 255; s >= 60; s--) { // yavaşça yavaşla / ramp down
19 motor.setSpeed(s);
20 delay(10);
21 }
22 motor.run(RELEASE); // dur / stop
23 delay(500);
24
25 motor.setSpeed(180);
26 motor.run(BACKWARD); // geri / backward
27 delay(2000);
28 motor.run(RELEASE);
29 delay(1000);
30}| Komut | Ne yapar? |
|---|---|
| AF_DCMotor motor(1); | M1 klemensindeki motoru tanımlar; 1–4 arası numara alır |
| AF_DCMotor motor(1, MOTOR12_64KHZ); | M1 ve M2 için PWM frekansını da seçer |
| motor.setSpeed(200); | Hızı 0–255 arasında ayarlar (0 dur, 255 tam hız) |
| motor.run(FORWARD); | İleri döndürür |
| motor.run(BACKWARD); | Geri döndürür |
| motor.run(RELEASE); | Motoru sürmeyi bırakır, motor durur |
| motor.run(BRAKE); | Kütüphanede tanımlıdır ama V1'de hiçbir şey yapmaz |
Hız, motorun enerjisinin saniyede binlerce kez açılıp kapatılmasıyla ayarlanır; ayrıntılar PWM Nedir? yazısında. M1 ve M2 Timer2'yi kullandığı için frekanslarını seçebilirsin: MOTOR12_64KHZ, MOTOR12_8KHZ (varsayılan), MOTOR12_2KHZ ve MOTOR12_1KHZ. 64 kHz motorun vınlamasını duyulmaz hâle getirir ama L293D bu hızda daha çok ısınır. M3 ve M4 ise Timer0'a bağlıdır; bu zamanlayıcı millis() ve delay()'i de çalıştırdığı için kütüphane onun frekansına dokunmaz ve bu iki kanal her zaman yaklaşık 1 kHz'de çalışır.
Dört tekerli (4WD) robot araba kodu

L293D motor shield'in en sevilen kullanımı dört tekerli robot arabadır, çünkü dört motorun her biri kendi klemensine bağlanır ve kablo karmaşası olmaz. Bu tür arabalarda direksiyon yoktur; araba bir tank gibi döner: sol taraftaki iki tekerlek bir yöne, sağdaki iki tekerlek diğer yöne dönerse araba olduğu yerde döner. Bu yüzden kodda dört motoru tek tek değil, sol taraf ve sağ taraf olarak iki grup hâlinde yönetiyoruz. Telefondan kontrol için HC-05 Bluetooth modülünü boş kalan A0 ve A1 pinlerine SoftwareSerial ile bağlıyoruz; modülün ayrıntıları HC-05 Bluetooth Modülü yazısında.
| Parça | Bağlantı |
|---|---|
| Sol ön motor | M1 |
| Sol arka motor | M2 |
| Sağ arka motor | M3 |
| Sağ ön motor | M4 |
| HC-05 TXD | A0 (SoftwareSerial RX) |
| HC-05 RXD | A1, 1 kΩ + 2 kΩ gerilim bölücüyle (5 V → 3,3 V) |
| HC-05 VCC ve GND | Shield'deki +5V ve GND sırası |
| 2 adet 18650 pil (7,4 V) | EXT_PWR (+M ve GND), PWR jumper'ı takılı |
1#include <AFMotor.h>
2#include <SoftwareSerial.h>
3
4AF_DCMotor frontLeft(1); // M1: sol ön / front left
5AF_DCMotor rearLeft(2); // M2: sol arka / rear left
6AF_DCMotor rearRight(3); // M3: sağ arka / rear right
7AF_DCMotor frontRight(4); // M4: sağ ön / front right
8
9SoftwareSerial bt(A0, A1); // RX = A0 (HC-05 TXD), TX = A1 (HC-05 RXD, bölücüyle / via a divider)
10
11int speed = 200; // 0–255 arası sürüş hızı / driving speed 0–255
12
13void setSide(AF_DCMotor &a, AF_DCMotor &b, int value) { // -255 … 255
14 uint8_t dir = value > 0 ? FORWARD : (value < 0 ? BACKWARD : RELEASE);
15 uint8_t pwm = constrain(abs(value), 0, 255);
16 a.setSpeed(pwm);
17 b.setSpeed(pwm);
18 a.run(dir);
19 b.run(dir);
20}
21
22void drive(int left, int right) { // sol ve sağ taraf / left and right side
23 setSide(frontLeft, rearLeft, left);
24 setSide(frontRight, rearRight, right);
25}
26
27void setup() {
28 Serial.begin(9600); // hata ayıklama / debugging
29 bt.begin(9600); // HC-05 varsayılan hızı / default baud rate
30 drive(0, 0);
31}
32
33void loop() {
34 if (!bt.available()) return;
35 char c = bt.read();
36 Serial.println(c);
37
38 switch (c) {
39 case 'F': drive(speed, speed); break; // ileri / forward
40 case 'B': drive(-speed, -speed); break; // geri / backward
41 case 'L': drive(-speed, speed); break; // yerinde sola / spin left
42 case 'R': drive(speed, -speed); break; // yerinde sağa / spin right
43 case 'G': drive(speed / 3, speed); break; // ileri-sola kavis / curve forward-left
44 case 'I': drive(speed, speed / 3); break; // ileri-sağa kavis / curve forward-right
45 case 'S': drive(0, 0); break; // dur / stop
46 case 'q': speed = 255; break; // tam hız / full speed
47 default:
48 if (c >= '0' && c <= '9') speed = map(c - '0', 0, 9, 90, 240); // hız kademesi / speed step
49 }
50}Kodun kalbi drive(sol, sağ) fonksiyonudur: her taraf için -255 ile 255 arasında bir değer alır; artı ileri, eksi geri, sıfır dur demektir. setSide() aynı taraftaki iki motora aynı hızı ve yönü verir. Komutlar, telefon mağazalarındaki "Arduino Bluetooth RC Car" türü uygulamaların gönderdiği tek harflerdir: F ileri, B geri, L ve R yerinde dönüş, G ve I kavisli dönüş, S dur. Uygulamadaki hız çubuğu 0–9 arası bir rakam gönderir; kod bunu 90–240 arasında bir PWM değerine çevirir ve alt sınırı 90'da tuttuğu için en düşük kademede bile motorlar kalkabilir. Bir tekerlek ters dönüyorsa kodu değiştirme, o motorun iki kablosunu klemenste yer değiştir. Şasi montajı ve iki motorlu sürüm için Arduino Araba Yapımı rehberine bakabilirsin.
Step motor sürmek: 28BYJ-48 ve NEMA 17
Shield aynı anda iki step motor sürebilir: 1 numaralı step portu M1 ve M2 klemenslerini, 2 numaralı port M3 ve M4'ü kullanır. Bipolar bir motorun (NEMA 17 gibi 4 kablolu) bir bobinini M1'e, diğer bobinini M2'ye bağlarsın. Unipolar bir motorda (5 ya da 6 kablolu) iki bobin yine M1 ve M2'ye gider, ortak uç da klemensin ortasındaki GND'ye bağlanır. Popüler 28BYJ-48 için bağlantı şöyledir: mavi ve sarı kablolar M1'e, pembe ve turuncu kablolar M2'ye, kırmızı ortak kablo GND'ye. Bu motorun ULN2003 kartıyla kullanımı Step Motor Nedir? yazısında.
| Adım türü | Nasıl çalışır? | Ne zaman kullanılır? |
|---|---|---|
| SINGLE | Her an tek bobin enerjilenir | En az akım, en düşük tork |
| DOUBLE | Her an iki bobin birlikte enerjilenir | Daha yüksek tork; en sık kullanılan |
| INTERLEAVE | Tek ve çift bobin sırayla (yarım adım) | İki kat çözünürlük, daha yumuşak dönüş |
| MICROSTEP | Bobin akımları PWM ile kademeli değişir, her tam adım 16 parçaya bölünür | Yavaş ve sessiz dönüş; tork düşer |
28BYJ-48 5 V'luk bir motordur; bu deney için motor beslemesini 4 adet AA pille (6 V) yap, jumper'ı çıkar ve Arduino'yu USB'den çalıştır. Motorun içindeki dişli kutusu yüzünden tam adımda bir tur 2048 adımdır:
1#include <AFMotor.h>
2
3// 28BYJ-48: tam adımda tur başına 2048 adım / 2048 full steps per revolution
4AF_Stepper stepper(2048, 1); // 1 = M1 + M2, 2 = M3 + M4
5
6void setup() {
7 stepper.setSpeed(10); // dakikada 10 tur / 10 RPM
8}
9
10void loop() {
11 stepper.step(2048, FORWARD, DOUBLE); // bir tur ileri, güçlü tork / one turn forward, more torque
12 delay(500);
13 stepper.step(4096, BACKWARD, INTERLEAVE); // yarım adımla bir tur geri / one turn back in half steps
14 stepper.release(); // bobinleri kapat, ısınmasın / de-energise the coils
15 delay(1000);
16}setSpeed() dakikadaki tur sayısını belirler; 28BYJ-48 dişli kutusu nedeniyle dakikada 10–15 turdan hızlı dönemez. Dikkat etmen gereken nokta, step() fonksiyonunun bloklayıcı olmasıdır: motor istenen adımları bitirene kadar loop() başka hiçbir şey yapmaz. Step motor dönerken sensör okumak ya da DC motor sürmek istiyorsan kütüphanenin onestep() fonksiyonunu AccelStepper kütüphanesiyle birlikte kullan; kütüphanenin örnekleri arasındaki AFMotor_ConstantSpeed tam olarak bunu gösterir. Motor beklerken release() ile bobinleri kapatmak ısınmayı önler, ama mil bu sırada tutma torkunu kaybeder.
Servo bağlamak: SER1 ve SERVO_2 başlıkları
Shield'in köşesindeki iki üç pinli başlık servolar içindir. Kartın üzerindeki işaretlere göre pinler − (GND), + (5 V) ve S (sinyal) şeklindedir; servonun kahverengi kablosu −, kırmızısı +, turuncusu S'ye gelir. Kartın devre şemasına göre SER1 başlığı D10'a, SERVO_2 başlığı D9'a bağlıdır (bazı kaynaklarda numaralar ters yazılır; servo kıpırdamıyorsa kodda diğer pini dene). Servolar standart Servo kütüphanesiyle sürülür ve bu kütüphanenin Uno'da kullandığı Timer1, motorların zamanlayıcılarıyla çakışmaz; yani DC motorlar ve servolar aynı anda sorunsuz çalışır.
Servoların beslemesi motor pilinden değil, Arduino'nun 5 V hattından gelir. Bir SG90 için bu sorun değildir, ama MG996R gibi büyük servolar hareket ederken 1 A'in üzerinde akım çekebilir; Arduino'nun regülatörü ısınır, gerilim çöker ve kart yeniden başlar. Büyük servolarda yalnızca sinyal kablosunu başlığa tak, servonun + ve − uçlarını ayrı bir 5–6 V kaynaktan besle ve kaynakların GND'lerini birleştir. Ayrıntılar MG996R Servo Motor ve Servo Motor Nedir? yazılarında. Aşağıdaki kod M3'teki motoru döndürürken SER1'deki servoyu sağa sola tarar:
1#include <AFMotor.h>
2#include <Servo.h>
3
4AF_DCMotor motor(3); // M3 klemensi / M3 terminal
5Servo servo1; // SER1 başlığı / SER1 header
6
7void setup() {
8 servo1.attach(10); // SER1 = D10, SERVO_2 = D9
9 motor.setSpeed(170);
10 motor.run(FORWARD); // motor dönerken servo tarar / servo sweeps while the motor runs
11}
12
13void loop() {
14 for (int a = 20; a <= 160; a += 2) { // sağa tara / sweep right
15 servo1.write(a);
16 delay(15);
17 }
18 for (int a = 160; a >= 20; a -= 2) { // sola tara / sweep left
19 servo1.write(a);
20 delay(15);
21 }
22}Akım sınırı (0,6 A) ve ısınma
L293D'nin veri sayfasındaki en önemli satır kanal başına 0,6 A sürekli ve 1,2 A tepe akımdır. Tepe değeri yalnızca çok kısa darbeler içindir; motor saniyelerce 1 A çekiyorsa yonga zorlanır. Isınmanın sebebi basit bir hesapla görülür: L293D eski tip, bipolar transistörlü bir sürücüdür ve 0,6 A'de üst transistörde tipik olarak 1,4 V, alt transistörde 1,2 V düşer. Yani bir motor 0,6 A çektiğinde yongada 0,6 A × 2,6 V ≈ 1,6 W ısı oluşur; aynı yongadaki iki motor birlikte bunun iki katını, yaklaşık 3 W üretir. Soğutucusuz küçük bir DIP yonga bu ısıyı uzaklaştıramaz, sıcaklığı hızla yükselir ve sonunda aşırı ısınma koruması çıkışları kapatır. Belirtisi tanıdıktır: motorlar bir süre çalışır, durur, yonga soğuyunca yeniden döner.
Sarı TT motorlar yüksüz yaklaşık 150 mA, yerde ilerlerken 200–300 mA çeker; bu değerler shield'in sınırları içindedir. Sorun, tekerleğin bir engele dayandığı ya da arabanın yerinde döndüğü anlardır: kilitlenen bir TT motor 1–1,5 A çekebilir ve 4WD bir arabada yerinde dönüş sırasında dört motor birden zorlanır. Motorunun gerçek akımını öğrenmek için multimetreyi motorla seri bağla ve tekerleği elinle kısa bir süre tutarken ölç; nasıl yapılacağı Multimetre Nasıl Kullanılır? yazısında. Shield'i serin tutmak için şunları yap:
- Yumuşak kalkış yap: Hızı 0'dan 255'e bir anda değil, 200–300 ms içinde kademeli olarak artır; kalkış akımı belirgin biçimde düşer.
- Motoru sıkıştırma: Engelden kaçan robotlarda arabayı engele dayanmadan durdur; kilitlenen motor en çok ısıyı üretir.
- Yongaların üstüne soğutucu yapıştır: Termal bantlı küçük alüminyum soğutucular L293D'nin sıcaklığını bir miktar düşürür.
- İkinci bir L293D lehimle: Adafruit de akım kapasitesini artırmak için mevcut yongaların üstüne ikinci bir L293D'nin bacak bacağa lehimlenebileceğini belirtir; iki yonga akımı paylaşır.
- Gerilimi gereğinden yüksek tutma: 6 V'luk motorlara 12 V vermek hem akımı hem ısıyı artırır.
- Doğru sürücüye geç: Motorun sürekli 0,6 A'in üzerinde çekiyorsa L298N ya da TB6612FNG tabanlı bir sürücü kullan.
L293D motor shield mi, L298N mi?

| Özellik | L293D motor shield | L298N modülü |
|---|---|---|
| Motor sayısı | 4 DC ya da 2 step + 2 servo | 2 DC ya da 1 step |
| Kanal başına akım | 0,6 A sürekli, 1,2 A tepe | 2 A sürekli, 3 A tepe |
| Motor gerilimi | 4,5–25 V | 5–35 V |
| Gerilim kaybı | Yaklaşık 1,5–2,6 V | Yaklaşık 2–3 V |
| Bağlantı | Uno'nun üstüne takılır, kablo yok | Jumper kablolarla; pinleri sen seçersin |
| Kullandığı pin | 8 sabit pin + servolar için D9 ve D10 | 6 pin (ENA, IN1–IN4, ENB) |
| Kütüphane | AFMotor şart | Gerekmez (digitalWrite, analogWrite) |
| ESP32 ve Pico | Uygun değil | Doğrudan kullanılabilir |
| En uygun kullanım | TT motorlu 4WD araba, öğrenme setleri | Daha güçlü motorlar, 2WD robotlar |
Kısacası, Arduino Uno ile TT motorlu bir 4WD araba yapıyorsan L293D shield kablolamayı en aza indirir ve dört motoru tek kartta toplar. Motorların daha güçlü, kartın ESP32 ya da Pico ise ya da pin seçimi senin için önemliyse L298N daha esnektir; ayrıntıları L298N ile DC Motor Kontrolü yazısında. İkisinden de verimli bir seçenek istiyorsan MOSFET tabanlı TB6612FNG'nin gerilim kaybı çok düşüktür ve pil ömrünü uzatır. Hangi motor türünün hangi işe uygun olduğunu DC, Servo ve Step Motor Farkı yazısında karşılaştırdık.
ESP32, Raspberry Pi Pico ve Mega ile kullanılabilir mi?
Arduino Mega 2560 ile sorunsuz çalışır: shield Mega'nın ilk dijital ve analog pinlerine oturur, AFMotor de Mega'nın zamanlayıcılarını tanır. Uno R4, Leonardo, ESP32 ve Raspberry Pi Pico ile ise çalışmaz, çünkü AFMotor doğrudan ATmega328P ve ATmega2560'ın zamanlayıcı kayıtlarına yazar. ESP32 seçiliyken derleme 'DC_MOTOR_PWM_RATE' was not declared in this scope, Leonardo seçiliyken #error "This chip is not supported!" hatasıyla durur. Uno biçimindeki ESP32 kartlar (ESPDuino-32 gibi) shield'e fiziksel olarak takılsa da pin numaraları ve 3,3 V'luk sinyal seviyesi farklıdır. Bu kartlarda shield yerine L298N, TB6612FNG ya da tek bir L293D yongası kullanmak çok daha kolaydır. L293D'nin girişleri 2,3 V'un üzerini HIGH kabul ettiği için 3,3 V'luk kartlarla doğrudan çalışır:
| L293D pini | Görevi | Raspberry Pi Pico | ESP32 |
|---|---|---|---|
| 1 (1,2EN) | Hız (PWM) | GP15 | GPIO 25 |
| 2 (1A) | Yön 1 | GP14 | GPIO 26 |
| 7 (2A) | Yön 2 | GP13 | GPIO 27 |
| 3 ve 6 (1Y, 2Y) | Motor uçları | Motora | Motora |
| 4, 5, 12, 13 | GND (ısı da bu pinlerden atılır) | GND | GND |
| 16 (VCC1) | Lojik besleme, 5 V | VBUS (pin 40) | 5V (VIN) |
| 8 (VCC2) | Motor beslemesi | Pilin artı ucu | Pilin artı ucu |
1from machine import Pin, PWM
2import time
3
4en = PWM(Pin(15)) # L293D pin 1 (1,2EN): hız / speed
5en.freq(1000)
6in1 = Pin(14, Pin.OUT) # L293D pin 2 (1A): yön / direction
7in2 = Pin(13, Pin.OUT) # L293D pin 7 (2A): yön / direction
8
9def motor(speed): # -100 … 100
10 in1.value(1 if speed > 0 else 0)
11 in2.value(1 if speed < 0 else 0)
12 en.duty_u16(int(abs(speed) * 655.35))
13
14while True:
15 motor(80) # ileri / forward
16 time.sleep(2)
17 motor(0) # dur / stop
18 time.sleep(0.5)
19 motor(-60) # geri / backward
20 time.sleep(2)
21 motor(0)
22 time.sleep(0.5)Pico'nun ve pilin GND'leri mutlaka birleşmeli. ESP32'de aynı mantığı Arduino diliyle kurarsın: tablodaki pinlere digitalWrite ile yön, analogWrite ile hız verirsin. Bu kartları yeni tanıyorsan ESP32 Nedir? ve Raspberry Pi Pico Nedir? yazılarıyla başlayabilirsin.
Motorlar dönmüyor: sık hatalar ve çözümleri
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Hiçbir motor dönmüyor, PWR LED'i sönük | Motor beslemesi yok: EXT_PWR boş ya da yalnızca USB bağlı | EXT_PWR'a 6–12 V pil bağla; LED yanmadan motorlar dönmez |
| LED yanıyor, kod yüklendi ama motor kıpırdamıyor | setSpeed() yazılmamış ya da koddaki numara klemensle uyuşmuyor | setup()'ta setSpeed(200) ekle; AF_DCMotor(1) ↔ M1 eşleşmesini kontrol et |
| Motor vınlıyor ama dönmüyor | PWM değeri düşük ya da pil zayıf | Hızı 100'ün üstünde başlat; pili şarj et ya da 2 adet 18650 kullan |
| "AFMotor.h: No such file or directory" | Kütüphane kurulu değil ya da V2 kurulmuş | Kütüphane Yöneticisi'nden V1 olan Adafruit Motor Shield library'yi kur |
| "This chip is not supported!" ya da "DC_MOTOR_PWM_RATE" hatası | Kart olarak Uno R4, Leonardo ya da ESP32 seçili | Araçlar > Kart menüsünden Uno ya da Mega seç |
| Motorlar çalışınca Arduino yeniden başlıyor | Kalkış akımı pil gerilimini düşürüyor (brownout) | Jumper'ı çıkarıp Arduino'yu ayrı besle; motor uçlarına 100 nF kondansatör lehimle |
| Motor bir süre dönüp duruyor, yonga çok sıcak | L293D'nin aşırı ısınma koruması devreye girdi | Yükü azalt, yumuşak kalkış yap, soğutucu ekle ya da L298N'e geç |
| Motorlar rastgele yön değiştiriyor | Kodda D4, D7, D8 ya da D12 başka bir iş için kullanılıyor | Sensörleri A0–A5'e taşı |
| M1 ve M2'nin hızı ayarlanmıyor, M3 ve M4 normal | tone() ya da IRremote Timer2'yi kullanıyor | Bu motorları M3 ve M4'e taşı ya da çakışan kodu kaldır |
| Tek tekerlek ters dönüyor | Motor kabloları klemenste ters | O motorun iki kablosunu yer değiştir |
| Shield takılınca kart garip davranıyor | Uno'nun USB soketi shield'in alt yüzündeki lehimlere değiyor ya da bir pin bükülmüş | USB soketinin üstüne yalıtım bandı yapıştır, pinleri düzeltip shield'i yeniden tak |
L293D motor shield ile proje fikirleri
- Bluetooth kumandalı 4WD araba: Yukarıdaki kodla telefondan sürülen, dört tekerden çekişli bir robot.
- Engelden kaçan robot: SER1'deki servoya takılı HC-SR04 ile önünü tarayıp en açık yöne dönen bir araba; tam rehber Engelden Kaçan Robot Yapımı yazısında.
- Çizgi izleyen robot: A0–A3'e bağlanan kızılötesi sensörlerle yerdeki siyah çizgiyi takip et; PID ayarları Çizgi İzleyen Robot yazısında.
- Kamera kaydırıcı: Step motorla kamerayı ray üzerinde yavaşça kaydırıp hızlandırılmış video çek.
- Pan-tilt kafa: İki servo başlığına iki servo bağlayıp bir kamerayı ya da lazeri iki eksende yönet; daha fazla servo için Arduino Robot Kol yazısına bak.
- Otomatik perde ya da konveyör bant: Bir DC motorla perdeyi ışığa göre aç-kapat ya da küçük bir taşıma bandı yap.
L293D motor shield'i doğru kullanmanın özeti şudur: V1 kütüphanesini kur, PWR LED'ini kontrol et, jumper'ı besleme düzenine göre ayarla, setSpeed()'i unutma, sensörleri A0–A5'e bağla ve motorlarını 0,6 A sınırının altında tut. Bu kurallarla küçük bir shield, dört motorlu bir robotun bütün kas gücünü tek başına taşır. BlueGrays uygulamasında Bluetooth kontrollü araba, engelden kaçan robot, step motor ve servo projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.
Sıkça sorulan sorular
L293D motor shield kaç motor sürer?
Shield aynı anda 4 DC motoru bağımsız olarak ileri-geri ve farklı hızlarda sürebilir. DC motorlar yerine 2 step motor (M1–M2 ve M3–M4 çiftleri) ya da 2 DC motorla 1 step motor da bağlanabilir. Bunlara ek olarak iki servo başlığı vardır; servolar motorlardan bağımsız olarak D9 ve D10'dan sürülür.
L293D motor shield'deki PWR jumper'ı ne işe yarar?
Jumper takılıyken shield'in motor beslemesi Arduino'nun Vin hattına bağlanır ve iki kart tek kaynaktan çalışır. Arduino'yu USB'den, motorları ayrı bir pilden besleyeceksen jumper'ı çıkarmalısın. Jumper takılıyken hem DC jakına hem EXT_PWR'a ayrı kaynak bağlamak iki kaynağı kısa devre eder.
L293D motor shield'e hangi pil bağlanmalı?
TT motorlu robot arabalar için en iyi seçim 2 adet 18650 lityum pildir (7,4 V); L293D yaklaşık 2 V kaybettiği için motorlar 5,5–6 V görür. 4 adet AA pil motorlara 4 V civarı bırakır, 9 V'luk kare pil ise motorları sürecek akımı veremez. Pili EXT_PWR'a bağlarken kutuplara dikkat et, çünkü klemenste ters bağlantı koruması yoktur.
"AFMotor.h: No such file or directory" hatası nasıl çözülür?
Bu hata, AFMotor kütüphanesinin kurulu olmadığını gösterir. Kütüphane Yöneticisi'nde Adafruit Motor Shield araması yap ve açıklamasında V1 yazan Adafruit Motor Shield library'yi kur. V2 kütüphanesi farklı bir kart içindir ve AFMotor.h dosyasını içermez.
L293D motor shield kaç amper verir, neden ısınıyor?
Her kanal sürekli 0,6 A, çok kısa süreli olarak 1,2 A verebilir. L293D'nin transistörleri 0,6 A'de yaklaşık 2,6 V düşürdüğü için motor başına 1,5 W'a yakın ısı oluşur; yonga bu yüzden ısınır ve sınır aşılırsa kendini kapatır. Motorların sıkışmamasına dikkat et ve sürekli 0,6 A'in üzerinde akım çeken motorlar için L298N gibi daha güçlü bir sürücü kullan.
L293D motor shield mi L298N mi daha iyi?
Arduino Uno ile TT motorlu 4WD bir araba yapıyorsan L293D shield, kablosuz takılması ve dört motor kanalıyla daha pratiktir. Daha güçlü motorlar, ESP32 ya da Pico kullanıyorsan veya pinleri kendin seçmek istiyorsan kanal başına 2 A veren L298N daha uygundur. İkisi de motor geriliminin yaklaşık 2 V'unu kaybeder.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
L298N ile Bluetooth Kontrollü Araba
Telefonunu kumandaya çevirip kendi robot arabanı sür. Arduino, Bluetooth modülü üzerinden telefondaki bir kumanda uygulamasından gelen komutları alır ve motor sürücüyle tekerlekleri döndürür; araba il

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

Step Motor Kullanımı
Saatin akrebi gibi adım adım, tam istediğin kadar dönen bir motor. Arduino, küçük bir step motoru sürücü kartı üzerinden önce bir yöne tam bir tur çevirir, bir saniye bekler, sonra ters yöne bir tur d

Step Motordan 360 Derecelik Servo Motor Yapımı
Sıradan bir step motora istediğin açıya gitmeyi öğret, üstelik tam bir tur boyunca. Arduino hangi açıya kaç adım düştüğünü hesaplar; motor sırayla 0, 90, 45, 180, 135 ve 360 dereceye gider, her durakt

Servo Motor Kullanım
Küçük bir servo motorun kolu sırayla üç konuma döner: en başa, tam ortaya ve en sona, her durakta iki saniye bekleyerek. Arduino motora hangi açıda durması gerektiğini söyler, motor da oraya gidip ora

Potansiyometre İle Servo Motor Kullanım
Potansiyometrenin düğmesini çevirdikçe servo motorun kolu da onunla birlikte döner; düğmenin bir ucu sıfır dereceye, öbür ucu yarım tura karşılık gelir. Arduino düğmenin konumunu sürekli okur ve servo

Bluetooth İle Telefondan Led Yakma
Telefonundan odadaki ışıkları açıp kapatmanın küçük bir provası. Bluetooth modülü telefondan gelen harfleri Arduino'ya iletir; bir harf kırmızı LED'i, başka bir harf yeşil LED'i yakar, aynı harflerin

TCRT5000 Siyah Beyaz Zemin Tespiti
Çizgi izleyen robotların gözü olan küçük bir sensörle zeminin siyah mı beyaz mı olduğunu anlarsın. TCRT5000 sensörü zemine gözle görülmeyen bir ışık gönderip ne kadarının geri döndüğüne bakar; beyaz z
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

