Ardunio İle Step Motor Sürücü Kontrolü
Güncelleme 14/11/2024
Arduino ile step motor sürücü kontrolü yapmak için, genellikle A4988 ya da DRV8825 gibi step motor sürücüler kullanılır. Bu örnek için A4988 sürücü ve NEMA 17 step motor kullanarak nasıl kontrol edileceğini açıklayacağım.
Malzemeler:
1. Arduino Uno
2. A4988 Step Motor Sürücü
3. NEMA 17 Step Motor
4. Breadboard
5. Jumper kablolar
6. 12V Güç Kaynağı
7. 100uF 25V Elektrolitik Kondansatör
Bağlantı şeması:
1. A4988 sürücünün VDD ve GND pinleri, Arduino’nun 5V ve GND pinlerine bağlanır.
2. A4988 sürücünün VMOT ve GND pinleri, güç kaynağının + ve – uçlarına bağlanır. Bu bağlantıyı yapmadan önce, 100uF 25V kondansatörü paralel olarak bağlayın.
3. A4988 sürücünün STEP ve DIR pinleri, Arduino’nun dijital pinlerine bağlanır (örn. 3 ve 4).
4. A4988 sürücünün 1A, 1B, 2A ve 2B pinleri, NEMA 17 step motorunun ilgili bobinlerine bağlanır. Motorun bağlantı şemasına göre doğru bağlantıyı yapın.
Arduino kodu:
```cpp
// Pin tanımlamaları
const int stepPin = 3;
const int dirPin = 4;
// Parametreler
const int stepsPerRevolution = 200; // 1.8 derece/step olan NEMA 17 için
const int delayTime = 5; // 5 ms bekleme süresi
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
// Saat yönünde döndür
digitalWrite(dirPin, HIGH);
for (int i = 0; i < stepsPerRevolution; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(delayTime);
digitalWrite(stepPin, LOW);
delayMicroseconds(delayTime);
}
delay(1000); // 1 saniye bekle
// Saat yönünün tersine döndür
digitalWrite(dirPin, LOW);
for (int i = 0; i < stepsPerRevolution; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(delayTime);
digitalWrite(stepPin, LOW);
delayMicroseconds(delayTime);
}
delay(1000); // 1 saniye bekle
}
```
Yukarıdaki kod, motoru saat yönünde ve saat yönünün tersine döndürmek için basit bir örnektir. Daha gelişmiş kontrol için, “AccelStepper” gibi kütüphaneler kullanabilirsiniz. Bu kütüphane, ivmeli hareket ve daha hassas kontrol sağlar.
Ardunio İle Step Motor Sürücü Kontrolü Örnek 2
Arduino ile step motor kontrolüne daha fazla özellik eklemek istiyorsanız, öncelikle AccelStepper kütüphanesini kullanarak başlayabilirsiniz. Bu kütüphane, motor hızının ve ivmesinin daha hassas kontrolünü sağlar.
Öncelikle Arduino IDE’de “Sketch” > “Include Library” > “Manage Libraries” yoluyla “AccelStepper” kütüphanesini arayın ve yükleyin.
Aşağıda, AccelStepper kütüphanesini kullanarak motorun hızını ve ivmesini kontrol etmek için bir örnek bulunmaktadır.
```cpp
#include <AccelStepper.h>
// Pin tanımlamaları
const int stepPin = 3;
const int dirPin = 4;
// AccelStepper nesnesi oluşturma
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
// Motor hızı ve ivme ayarları
stepper.setMaxSpeed(1000); // Maksimum hız (adım/saniye)
stepper.setAcceleration(500); // İvme (adım/saniye^2)
// Hedef konum ayarlama
stepper.moveTo(2000); // 2000 adım ileri
}
void loop() {
// Motor hedef konumuna ulaşana kadar adım atar
if (stepper.distanceToGo() != 0) {
stepper.run();
} else {
// Hedefe ulaştığında, yeni bir hedef belirle ve 1 saniye bekle
stepper.moveTo(-stepper.currentPosition()); // Şu anki konumun tersine git
delay(1000);
}
}
```
Bu örnek, motorun hızını ve ivmesini kontrol ederken, motorun 2000 adım ileri ve geri hareket etmesini sağlar. İleri ve geri hareketler arasında 1 saniye bekleme süresi vardır.
AccelStepper kütüphanesi, birden fazla motorun kontrolünü de destekler. Örneğin, farklı eksenlerde hareket etmek için bir CNC makinesi veya 3D yazıcı inşa etmek istiyorsanız, bu kütüphane işinizi kolaylaştırır.
Daha fazla özellik eklemek istiyorsanız, örneğin motorun hareketini bir sensör veya düğmeye bağlamak gibi, gerekli bileşenleri bağlayın ve Arduino kodunu buna göre güncelleyin. Başka bir örnek olarak, motorun hızını ve ivmesini, potansiyometreler veya seri port üzerinden alınan komutlarla ayarlayabilirsiniz.
Ardunio İle Step Motor Sürücü Kontrolü Örnek 3
Arduino ile step motor kontrolünü daha da geliştirmek için, motorun hareketini kullanıcı girişiyle kontrol etmeyi düşünebilirsiniz. Bu örnekte, iki düğme kullanarak motorun saat yönünde ve saat yönünün tersinde döndürülmesini sağlayacağız.
Malzemeler:
1. Arduino Uno
2. A4988 Step Motor Sürücü
3. NEMA 17 Step Motor
4. Breadboard
5. Jumper kablolar
6. 12V Güç Kaynağı
7. 100uF 25V Elektrolitik Kondansatör
8. 2 adet 10K ohm direnç
9. 2 adet Push Button (düğme)
Bağlantı şeması:
1. İki düğmeyi breadboard’a yerleştirin.
2. Düğmelerin bir ucunu 10K ohm dirençlerle GND’ye bağlayın.
3. Düğmelerin diğer ucunu, Arduino’nun dijital pinlerine bağlayın (örn. 7 ve 8).
Arduino kodu:
```cpp
#include <AccelStepper.h>
// Pin tanımlamaları
const int stepPin = 3;
const int dirPin = 4;
const int buttonCWPin = 7;
const int buttonCCWPin = 8;
// AccelStepper nesnesi oluşturma
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
// Parametreler
const int stepsPerRevolution = 200; // 1.8 derece/step olan NEMA 17 için
void setup() {
pinMode(buttonCWPin, INPUT_PULLUP);
pinMode(buttonCCWPin, INPUT_PULLUP);
stepper.setMaxSpeed(1000); // Maksimum hız (adım/saniye)
stepper.setAcceleration(500); // İvme (adım/saniye^2)
}
void loop() {
if (digitalRead(buttonCWPin) == LOW) { // Saat yönünde döndürme düğmesi basılırsa
stepper.setSpeed(1000); // Saat yönünde hızı ayarla
} else if (digitalRead(buttonCCWPin) == LOW) { // Saat yönünün tersine döndürme düğmesi basılırsa
stepper.setSpeed(-1000); // Saat yönünün tersine hızı ayarla
} else {
stepper.setSpeed(0); // Düğmeler basılı değilse, motoru durdur
}
stepper.runSpeed(); // Ayarlanan hızda motoru çalıştır
}
```
Bu örnek, kullanıcı düğmeleriyle motorun saat yönünde veya saat yönünün tersine hareketini kontrol eder. Düğmeler basılı değilse, motor durur.
İsteğe bağlı olarak, potansiyometrelerle motorun hızını ve ivmesini ayarlamayı da ekleyebilirsiniz. Potansiyometreleri Arduino’nun analog pinlerine bağlayarak (örn. A0 ve A1) ve `analogRead()` fonksiyonunu kullanarak değeri okuyarak bu işlemi gerçekleştirebilirsiniz. Ardından bu değerleri kullanarak motorun hızını ve ivmesini ayarlayabilirsiniz.
Malzemeler:
1. 2 adet 10K ohm Potansiyometre
Bağlantı şeması:
1. Potansiyometrelerin orta bacaklarını Arduino’nun analog pinlerine bağlayın (örn. A0 ve A1).
2. Potansiyometrelerin diğer iki bacağını 5V ve GND’ye bağlayın.
Arduino kodu (önceki örneğe potansiyometre kontrolünü ekleyin):
```cpp
// Pin tanımlamaları
const int speedPotPin = A0;
const int accelPotPin = A1;
void setup() {
// Diğer setup kodları
pinMode(speedPotPin, INPUT);
pinMode(accelPotPin, INPUT);
}
void loop() {
// Potansiyometrelerden hız ve ivme değerlerini oku
int speedVal = analogRead(speedPotPin);
int accelVal = analogRead(accelPotPin);
// Okunan değerleri motor hızı ve ivme değerlerine dönüştür
int maxSpeed = map(speedVal, 0, 1023, 100, 2000);
int acceleration = map(accelVal, 0, 1023, 100, 2000);
// Motor hızı ve ivme ayarları
stepper.setMaxSpeed(maxSpeed);
stepper.setAcceleration(acceleration);
// Diğer loop kodları
}
```
Bu örnekte, iki potansiyometre kullanarak motorun hızını ve ivmesini ayarlayabilirsiniz. Potansiyometrelerin değerleri 0 ile 1023 arasında değişir, bu yüzden `map()` fonksiyonu ile bu değerleri motor hızı ve ivme değerlerine dönüştürürüz. Bu örnekte, hız ve ivme değerleri 100 ile 2000 arasında değişmektedir.
Sonuç olarak, bu gelişmiş örnek, kullanıcı girişiyle step motorun kontrolünü sağlar. Motorun dönüş yönünü düğmelerle, hızını ve ivmesini ise potansiyometrelerle ayarlayabilirsiniz. İhtiyacınıza göre daha fazla motor, sensör veya kontrol bileşeni ekleyerek projenizi daha da geliştirebilirsiniz.