Joystick ile DC motorun hız kontrolü

Joystick kullanımı kolay olması ile birlikte çok yaygın kullanım alanına ulaştı. Projemizin asıl amacı joystick az miktarada hareket ettirilmesine göre motorumuzun hızının kontrol edilmesidir.
Bunun için bilinmesi gereken Joystickler potansiyometreden oluşur ve herzaman orta noktada durur. Bu da arduinomuzun ADC sinde şu şekilde oluşur.

0 —————— 512 ——————–1023

Joystick orta noktasında arduino 512 değeri ölçer dolayısıyla sağa kaydırırsak değer 512-1023 arasında olacaktır. Tersi istikametindeyse 0-512 arasında değer olacaktır.
Programlama yaparken MOTOR sürücüsü olduğunu varsayarak motorun sağa ve sola dönmesini ve hızının kontrolünü yapacağız. Hızının kontrolünde PWM çıkışından yararlanılmaktadır ki buda PWM değerinin 0-255 arasında olmasını sağlamamız gerekir.

Arduinomuzun
9.pini motorun yönünü,
10.pin ise motorun hız kontrolünü (Herhangi PWM çıkışı kullanılabilir.) ,
A0 pini ise joysticktir.

PROGRAMIMIZ AŞAĞIDAKİ GİBİDİR:
intanalog_pin=A0;  //Joystick analog okuma yapılacak pin
intpwm_pin=10;     //Pwm çıkış pini
intdir_pin=9;          //Motorun yönünü belirleyeceğimiz dijital çıkış

intanalog_val=512;
intpwm_val=0;
voidsetup() {
pinMode(dir_pin, OUTPUT);
pinMode(pwm_pin, OUTPUT);
}
voidloop() {
analog_val=analogRead(analog_pin);                  
if(analog_val> 530)                         // İleri                                
{
pwm_val = map(analog_val, 530, 1023, 0, 255);    //Değeri 0-255 arasına oranla
digitalWrite(dir_pin,HIGH);
analogWrite(pwm_pin,pwm_val);                        
}
elseif(analog_val< 494)                                // Geri
{
pwm_val = map(analog_val, 0, 494, 255, 0);
digitalWrite(dir_pin,LOW);
analogWrite(pwm_pin,pwm_val);
}
else
{
analogWrite(pwm_pin,0);                          // Dur
}
delay(50);

}

Boş zamanlarda arduino ile uğraşan kendi halinde bir Öğretmen.

  1. kralFaruk 28 Nisan 2016 21:21

    Bu programı yükledim, 2 gündür çözmeye çalışıyorum. bir noktanın bile yanlış çıktı verdiği programda bu kod bu haliyle çalışmaz. düzenlemek gerekir. düzelttim 2 günün sonunda.
    1. boşlukları ayarlayın (intanalog_pin=A0; yi int analog_pin=A0; gibi)
    2. digitalWrite(dir_pin,HIGH); kodunu digitalWrite(dir_pin,LOW); yapalım)
    3.
    elseif(analog_val< 494) // Geri
    {
    pwm_val = map(analog_val, 0, 494, 255, 0);
    digitalWrite(dir_pin,LOW); digitalWrite(pwm_pin,LOW);
    analogWrite(pwm_pin,pwm_val); bu kısımın sadece analogWrite(dir_pin,pwm_val); bu şekilde yazın
    // pwm_pin ile dir_pin yer değiştirin. programı bu şekilde düzenlerseniz işe yarayan bişiler oluyor.
    mail adresden ulaşabilirsiniz. kolay gelsin…

    Cevapla

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.