Arduino Motor Kontrolü
Motor sürücüsü kullanarak DC motoru kontrol etmeyi öğrenin.
Bir DC motoru bir motor sürücüsü (motor driver) kullanarak yönlendirmek, mikrodenetleyiciler (örneğin Arduino) veya diğer düşük güçlü kontrolörlerin motorları doğrudan çalıştıramamasından kaynaklanan bir gerekliliktir. Motor sürücüleri, motorların ihtiyaç duyduğu yüksek akım ve voltajı sağlar ve aynı zamanda motorun dönüş yönünü ve hızını kontrol etmeye olanak tanır.
Bu rehberde, popüler bir motor sürücüsü olan **L298N**'i kullanarak bir DC motoru Arduino ile nasıl yönlendireceğinizi adım adım açıklayacağım.
---
### Neden Motor Sürücüsü Kullanıyoruz?
1. **Akım Sınırlaması:** Mikrodenetleyiciler genellikle çok az akım (birkaç miliamper) sağlayabilirken, DC motorlar çalışmak için çok daha yüksek akımlara (yüzlerce miliamperden birkaç ampere kadar) ihtiyaç duyar. Motor sürücüler bu akımı sağlayabilir.
2. **Voltaj Uyumsuzluğu:** Mikrodenetleyiciler genellikle 3.3V veya 5V ile çalışırken, DC motorlar 6V, 9V, 12V veya daha yüksek voltajlarda çalışabilir. Motor sürücüler farklı voltaj seviyelerini köprüleyebilir.
3. **Yön Kontrolü:** DC motorun yönünü değiştirmek için motorun terminallerine uygulanan voltajın polaritesini değiştirmek gerekir. Motor sürücülerindeki "H-köprüsü" denilen devre yapısı bunu otomatik olarak yapar.
---
### Gerekli Malzemeler
* **Arduino Kartı:** (Uno, Nano, Mega vb.)
* **L298N Motor Sürücüsü:** (Veya benzer bir H-köprüsü sürücüsü)
* **DC Motor:** (6V-12V arasında çalışan küçük bir motor)
* **Harici Güç Kaynağı:** DC motorunuzun voltaj ve akım ihtiyacına uygun (örneğin 9V veya 12V adaptör/pil, minimum 1A)
* **Bağlantı Kabloları:** (Jumper kablolar)
* **Breadboard (isteğe bağlı):** Bağlantıları daha düzenli yapmak için.
---
### Motor Sürücüsü (H-Köprüsü) Nasıl Çalışır?
L298N gibi motor sürücüleri, bir veya daha fazla H-köprüsü devresi içerir. Bir H-köprüsü, motorun iki terminaline uygulanan voltajın polaritesini tersine çevirerek motorun yönünü değiştirmeye olanak tanıyan dört anahtardan (genellikle transistörler) oluşur.
* **Motoru Bir Yöne Döndürmek:** İki çapraz anahtar kapatılır (örneğin sol üst ve sağ alt).
* **Motoru Diğer Yöne Döndürmek:** Diğer iki çapraz anahtar kapatılır (sağ üst ve sol alt).
* **Motoru Durdurmak:** Tüm anahtarlar açık bırakılır (boşta) veya her iki taraftaki anahtarlar aynı anda kapatılır (frenleme).
* **Hız Kontrolü:** PWM (Darbe Genişlik Modülasyonu) sinyalleri kullanılarak motorun ortalama voltajı değiştirilir ve böylece hızı kontrol edilir.
---
### Bağlantı Şeması (Arduino ve L298N ile)
Bu örnekte tek bir DC motoru kontrol edeceğiz. L298N iki motoru kontrol edebilir, bu yüzden "Motor A" tarafını kullanacağız.
**L298N Pinleri ve Açıklamaları:**
* **OUT1, OUT2:** Motor A bağlantı terminalleri
* **OUT3, OUT4:** Motor B bağlantı terminalleri
* **ENA:** Motor A'nın etkinleştirilmesi/hız kontrolü (PWM)
* **ENB:** Motor B'nin etkinleştirilmesi/hız kontrolü (PWM)
* **IN1, IN2:** Motor A yön kontrolü
* **IN3, IN4:** Motor B yön kontrolü
* **VCC:** Lojik devre (Arduino) güç girişi (genellikle 5V)
* **12V (veya VCC_MOTOR):** Motorlar için güç girişi (harici güç kaynağı)
* **GND:** Toprak bağlantısı
**Bağlantılar:**
1. **L298N ve Arduino GND Bağlantısı:**
* L298N **GND** pinini Arduino **GND** pinine bağlayın.
* Harici güç kaynağının **negatif (-)** terminalini de L298N **GND** pinine bağlayın. **Bu çok önemlidir: Tüm devrelerin ortak bir toprağa (GND) sahip olması gerekir.**
2. **L298N Lojik Güç (VCC) Bağlantısı:**
* L298N **VCC** pinini Arduino **5V** pinine bağlayın. (Bazı L298N modüllerinde 5V regülatörü vardır. Eğer harici güç kaynağınız 7V'tan yüksekse ve modülün 5V regülatör jumper'ı takılıysa, L298N modülü üzerindeki 5V çıkışından Arduino'ya güç verebilirsiniz. Ancak basitleştirmek için Arduino 5V'dan beslemek daha güvenlidir.)
3. **L298N Motor Gücü (12V) Bağlantısı:**
* L298N **12V** (veya VCC_MOTOR) pinini harici güç kaynağının **pozitif (+)** terminaline bağlayın. Motorunuz 6V ise 6V, 9V ise 9V güç kaynağı kullanın.
4. **L298N ve Arduino Kontrol Pinleri Bağlantısı:**
* L298N **IN1** pinini Arduino Dijital Pin **2**'ye bağlayın.
* L298N **IN2** pinini Arduino Dijital Pin **3**'e bağlayın.
* L298N **ENA** pinini Arduino PWM (~) Pin **9**'a bağlayın. (Eğer ENA üzerindeki jumper takılıysa çıkarın, aksi takdirde hız kontrolü çalışmaz).
5. **Motor Bağlantısı:**
* DC Motorun bir terminalini L298N **OUT1**'e bağlayın.
* DC Motorun diğer terminalini L298N **OUT2**'ye bağlayın.
---
### Arduino Kodu Örneği
Bu kod, motoru bir yöne döndürecek, durduracak, diğer yöne döndürecek ve farklı hızlarda çalıştıracaktır.
```cpp
// L298N motor sürücüsü pin tanımlamaları
const int motor1Input1 = 2; // L298N IN1 pinine bağlı Arduino pini
const int motor1Input2 = 3; // L298N IN2 pinine bağlı Arduino pini
const int motor1Enable = 9; // L298N ENA pinine bağlı Arduino PWM pini (hız kontrolü için)
void setup() {
// Motor kontrol pinlerini çıkış olarak ayarla
pinMode(motor1Input1, OUTPUT);
pinMode(motor1Input2, OUTPUT);
pinMode(motor1Enable, OUTPUT);
// Seri portu başlat (hata ayıklama için)
Serial.begin(9600);
Serial.println("DC Motor Kontrol Başladı!");
// Başlangıçta motoru durdur
stopMotor();
}
void loop() {
// Motoru bir yöne tam hızda döndür
Serial.println("Motor İleri Yönde (Tam Hız)...");
setMotorDirection(1); // 1 = ileri
setMotorSpeed(255); // 255 = tam hız (PWM değeri 0-255)
delay(3000); // 3 saniye bekle
// Motoru yavaşlat (yarım hız)
Serial.println("Motor İleri Yönde (Yarım Hız)...");
setMotorSpeed(120);
delay(3000);
// Motoru durdur
Serial.println("Motor Durdu...");
stopMotor();
delay(2000); // 2 saniye bekle
// Motoru diğer yöne tam hızda döndür
Serial.println("Motor Geri Yönde (Tam Hız)...");
setMotorDirection(0); // 0 = geri
setMotorSpeed(255);
delay(3000);
// Motoru yavaşlat (çeyrek hız)
Serial.println("Motor Geri Yönde (Çeyrek Hız)...");
setMotorSpeed(60);
delay(3000);
// Motoru durdur
Serial.println("Motor Durdu...");
stopMotor();
delay(2000); // 2 saniye bekle
}
// Motorun yönünü belirleyen fonksiyon
// direction: 1 = ileri, 0 = geri
void setMotorDirection(int direction) {
if (direction == 1) { // İleri yön
digitalWrite(motor1Input1, HIGH);
digitalWrite(motor1Input2, LOW);
} else { // Geri yön (veya 0)
digitalWrite(motor1Input1, LOW);
digitalWrite(motor1Input2, HIGH);
}
}
// Motorun hızını belirleyen fonksiyon (PWM kullanarak)
// speed: 0 (durdur) - 255 (tam hız) arası bir değer
void setMotorSpeed(int speed) {
analogWrite(motor1Enable, speed);
}
// Motoru durduran fonksiyon
void stopMotor() {
// Her iki girişi LOW yaparak motoru serbest bırak (coast)
// Veya her ikisini HIGH yaparak frenleme (brake) yapabilirsiniz
digitalWrite(motor1Input1, LOW);
digitalWrite(motor1Input2, LOW);
analogWrite(motor1Enable, 0); // ENA'yı 0 yaparak gücü kes
}
```
---
### Önemli Notlar ve Güvenlik İpuçları
1. **Ortak Toprak (Common Ground):** L298N, Arduino ve harici güç kaynağınızın tüm GND (toprak) pinlerinin birbirine bağlı olduğundan emin olun. Bu, devrenin düzgün çalışması için KRİTİKTİR.
2. **Harici Güç Kaynağı:** Motorlar için ayrı bir güç kaynağı kullanmak çok önemlidir. Arduino'nun 5V pini, motorları doğrudan çalıştırmak için yeterli akımı sağlayamaz ve Arduino'ya zarar verebilir.
3. **L298N Jumper:** L298N modülünüzde ENA ve ENB pinleri üzerinde küçük jumper'lar (köprüler) olabilir. Eğer hız kontrolü (PWM) kullanacaksanız, ENA/ENB pinine jumper takılıysa onu çıkarmanız ve ilgili Arduino PWM pinine bağlamanız gerekir. Jumper takılı kalırsa motor her zaman tam hızda çalışır.
4. **Isınma:** L298N çipi, özellikle yüksek akım çeken motorlarla veya uzun süreli çalışmalarda ısınabilir. Modülünüzde soğutucu (heatsink) varsa bu normaldir. Aşırı ısınma durumunda daha güçlü bir sürücü veya soğutma çözümü gerekebilir.
5. **Ters Voltaj Koruması (Diyotlar):** DC motorlar döndürülürken "geri EMF" (elektromotor kuvveti) üretebilir. L298N modüllerinde genellikle bu ters voltajı korumak için entegre diyotlar bulunur. Eğer el yapımı bir H-köprüsü kuruyorsanız, her anahtarın üzerine diyot eklemek önemlidir.
6. **Motor Sesleri:** PWM ile hız kontrolü yaparken motordan vızıltı sesi gelmesi normaldir.
7. **Test Etmeden Önce:** Tüm bağlantıları iki kez kontrol edin. Yanlış bağlantılar hem Arduino'ya hem de motor sürücüsüne zarar verebilir.
Bu rehberle, bir DC motoru motor sürücüsü kullanarak başarılı bir şekilde yönlendirebilmeli ve hızını kontrol edebilmelisiniz. Başarılar!
Son Paylaşımlar
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025