Merhaba, Arduino kullanarak motor kontrolü yapmak için bir uygulama üzerinde çalışıyorum. Aşağıdaki kodu kullandım, motorun sağa ve sola dönüşünü kontrol etmek için PWM değeriyle hız ayarı yaptım. Kod şu şekilde:
C++:
// Motor pin tanımlamaları
const int motorPin1 = 8; // IN1
const int motorPin2 = 9; // IN2
const int enablePin = 10; // ENA
// Motor hız ayarları
const int pwmValue = 50; // PWM değeri (0-255 arası, düşük değerlerle başla)
const unsigned long duration = 30000; // 30 saniye (ms)
void setup() {
// Motor pinlerini çıkış olarak ayarlama
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// Motoru açma
digitalWrite(enablePin, HIGH);
}
void loop() {
// Motoru sağa döndürme
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, pwmValue); // PWM ile motor hızını ayarlama
delay(duration); // 30 saniye döndür
// Motoru durdurma
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0); // Motoru durdurma
delay(10000); // 10 saniye bekle
// Motoru sola döndürme
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(enablePin, pwmValue); // PWM ile motor hızını ayarlama
delay(duration); // 30 saniye döndür
// Motoru durdurma
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0); // Motoru durdurma
delay(10000); // 10 saniye bekle
// Tekrar döngüyü başlat
}
Sorularım:
1. PWM değeri çok düşük olduğunda motor dönmüyor. Hangi minimum değeri önerirsiniz?
2. Motoru daha hızlı döndürmek için PWM değerini nasıl optimize edebilirim?
3. Kodda iyileştirme veya eklenebilecek önerileriniz var mı?
Kodunuzu daha modüler hale getirmek için bir motor kontrol fonksiyonu oluşturabilirsiniz. Örneğin, ileri, geri ve durma komutlarını bir fonksiyon içine alabilirsiniz.
PWM değeri motor türüne bağlı olarak değişir, ancak genellikle 100'ün altındaki değerler motoru çalıştırmakta yetersiz kalabilir. Motorunuzun çalışma eşiğini test ederek bulabilirsiniz.
Motorun hızını artırmak için pwmValue'yi kademeli olarak artırabilirsiniz. Ancak, motorun maksimum desteklediği değeri datasheet'ten kontrol edin ve bu değeri aşmayın.
Kodda durdurma işlemi sırasında delay kullanıyorsunuz, bunun yerine millis() fonksiyonuyla asenkron bir yapı kurarak daha akıcı bir kontrol sağlayabilirsiniz.
Eğer motorunuz düşük PWM değerlerinde çalışmıyorsa, güç kaynağınızın yeterli olduğundan emin olun. Daha yüksek bir akım sağlayan bir kaynak deneyebilirsiniz.
Kodunuzu daha modüler hale getirmek için bir motor kontrol fonksiyonu oluşturabilirsiniz. Örneğin, ileri, geri ve durma komutlarını bir fonksiyon içine alabilirsiniz.