Ardunio Kullanarak Soru Çözümleme

Leodamar

Üye
Katılım
5 Ocak 2016
Mesajlar
34
Puanları
1
Yaş
24
Konum
Ev
Analog A0 pininden bir potansiyometre üzerindeki gerilim değerleri okunacak ve motor hız kontrolü
yapılacaktır. Potansiyometre üzerinde okunan değer 0-5V arasında ölçeklendirilmelidir. 0V-2.5V arasında
belirli bir yönde dönen motor, 2.5V-5V arasında gerilim değerlerinde tam tersi yönde
dönmelidir. Motorunuzun hızı her 0.5V aralıkta biraz daha hızlanmalıdır. (0-0.5V arasında belli
bir hızda, 0.5-1V arasında daha hızlı olacak şekilde 2.5V’a kadar hızlanmalıdır. 2.5V’un üzerinde
ise diğer dönme yönünde yine aynı gerilim aralığı ile hızı giderek artmalıdır.)

Şu soruyu bir türlü kodlara dökemedim sizden ricam bu soruyu kodlara çözümlememde yardımcı olur musunuz ? Benim için çok önemli ödev günüm 26'sında son gün sizden ricam yardımcı olursanız duacınız olurum. Teşekkür ediyorum iyi günler dilerim sağlıcakla kalın..
 
1) 2) 3) 4)
3. veya 4. videodaki sürücülerden hangisini kullanırsan artık sadece entegre olan işini fazlaca görür bu arada(3. videodaki)

Bu videoları izleyerek if else vb. şeyleri biliyorsan yapabilirsin.

Benim ödevde anlamadığım nokta potun 0 noktasından %50 çevirinceye kadar hızlanırsa sonra da diğer yönde dönmeye başlayarak hızlanırsa %100 e kadar. Ortadaki geçiş noktasında bir şeyler arızalanabilir. Motor küt diye durmuyor sonuçta. Tavsiyem en sol ve sağ noktayı max kabul etmek orta nokta motorun durduğu nokta olsun ki bir yönden diğer yöne geçerken yavaşlayıp önce durmuş olsun sonra diğer yöne geçsin. Hocan ne der bilmiyorum ama böyle sağlıklı değil. Online ortamda yapacaksan salla gerçi.
 
Ödeve göre yapılması daha doğru. Bu soruda
püf noktası "map()" komutu. Adc girişi
0-1023 arası değer alır. Bunu map ile çözümleyin.
0-500 arası ve 525-1023 arasını değerlerndirin.
Sağ-sol için röle kullanın.
 
Yapıp da sonuçlandıramadığınız çalışma varsa çalışmayı paylaşın kalan tarafına yardımcı olayım.
 
Röle ile motora yön verilebilir ama pwm çıkış akımı motor sürmeye yetmeyeceği için sürücü gerekmez mi? sürücü kullanılınca da yön zaten yapılabiliyor üstünden diye biliyorum.
 

Kod:
int pot_pin = A0; //Potansiyometreyi A0 pinine tanımlıyoruz
int ileri_pin = 5;
int geri_pin = 3;

// DEGISKENLER
int pot_deger = 0;
int hiz = 0;
int voltaj = 0;

void setup()
{
  pinMode(pot_pin, INPUT);
  pinMode(ileri_pin, OUTPUT);
  pinMode(geri_pin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  pot_konumunu_oku_degerlendir();
}

void pot_konumunu_oku_degerlendir()
{
  pot_deger = analogRead(pot_pin);
  voltaj = map(pot_deger, 0, 1023, 0, 5000);
  Serial.print(" Voltaj: "); Serial.print(voltaj); Serial.print(" mV ");
  if(pot_deger < 10) {hiz = 180; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 10 && pot_deger < 102) {hiz = 195; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 102 && pot_deger < 207) {hiz = 210; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 207 && pot_deger < 307) {hiz = 225; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 307 && pot_deger < 409) {hiz = 240; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 409 && pot_deger < 500) {hiz = 255; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 500 && pot_deger < 524) {hiz = 0; dur(); Serial.print(" HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 524 && pot_deger < 614) {hiz = 180; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 614 && pot_deger < 716) {hiz = 195; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 716 && pot_deger < 818) {hiz = 210; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 818 && pot_deger < 920) {hiz = 225; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 920 && pot_deger < 1013) {hiz = 240; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 1013) {hiz = 255; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
}

void ileri_git()
{
  analogWrite(ileri_pin, hiz);
  digitalWrite(geri_pin, LOW);
}

void geri_git()
{
  digitalWrite(ileri_pin, LOW);
  analogWrite(geri_pin, hiz);
}

void dur()
{
  digitalWrite(ileri_pin, LOW);
  digitalWrite(geri_pin, LOW);
}
Transistör ve dirençler yerine motor sürücü kartı kullanılabilir. Bu durumda kullanılan motor sürücü modülüne uygun olarak setup bölümü ile ileri_git, geri_git ve dur fonksiyonları elden geçmelidir.
 

Ekli dosyalar

  • sema.PNG
    88.1 KB · Görüntüleme: 10
Son düzenleme:
Röle ile motora yön verilebilir ama pwm çıkış akımı motor sürmeye yetmeyeceği için sürücü gerekmez mi? sürücü kullanılınca da yön zaten yapılabiliyor üstünden diye biliyorum.
Röle ve tek mosfet yeterli pwm için.
Ayrıca köprü sistemlerde akım artınca
problemler çoğalır.
High side transistörlerin baz gerilimlerini
hesapedebilirsiniz.
Daha kolayı high side PNP kullanmak. Ama
yine de 5V üzerine çıkmak gerekli.
 
Ben sadece röle sanmıştım, yanıtınız için teşekkür ederim bu şekilde kullanmayı bilmiyordum.
 

Kod:
int pot_pin = A0; //Potansiyometreyi A0 pinine tanımlıyoruz
int ileri_pin = 5;
int geri_pin = 3;
int pwm_pin = 9;

// DEGISKENLER
int pot_deger = 0;
int hiz = 0;
int voltaj = 0;

void setup()
{
  pinMode(pot_pin, INPUT);
  pinMode(ileri_pin, OUTPUT);
  pinMode(geri_pin, OUTPUT);
  pinMode(pwm_pin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  pot_konumunu_oku_degerlendir();
}

void pot_konumunu_oku_degerlendir()
{
  pot_deger = analogRead(pot_pin);
  voltaj = map(pot_deger, 0, 1023, 0, 5000);
  Serial.print(" Voltaj: "); Serial.print(voltaj); Serial.print(" mV ");
  if(pot_deger < 10) {hiz = 180; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 10 && pot_deger < 102) {hiz = 195; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 102 && pot_deger < 207) {hiz = 210; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 207 && pot_deger < 307) {hiz = 225; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 307 && pot_deger < 409) {hiz = 240; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 409 && pot_deger < 500) {hiz = 255; ileri_git(); Serial.print(" iLERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 500 && pot_deger < 524) {hiz = 0; dur(); Serial.print(" HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 524 && pot_deger < 614) {hiz = 180; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 614 && pot_deger < 716) {hiz = 195; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 716 && pot_deger < 818) {hiz = 210; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 818 && pot_deger < 920) {hiz = 225; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 920 && pot_deger < 1013) {hiz = 240; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);}
  if(pot_deger >= 1013) {hiz = 255; geri_git(); Serial.print(" GERi HIZ: "); Serial.println(hiz);} 
}

void ileri_git()
{
  digitalWrite(ileri_pin, HIGH);
  digitalWrite(geri_pin, LOW);
  analogWrite(pwm_pin, hiz);
}

void geri_git()
{
  digitalWrite(ileri_pin, LOW);
  digitalWrite(geri_pin, HIGH);
  analogWrite(pwm_pin, hiz);
}

void dur()
{
  digitalWrite(ileri_pin, LOW);
  digitalWrite(geri_pin, LOW);
  digitalWrite(pwm_pin, LOW);
}

Bu da röleli ve mosfetli tasarım. Röleler ileri ya da geri yön için motora yol verir. Mosfet ise arduinodan gelen pwm sinyaline göre ile motor hızını ayarlar. Daha önce verdiğim devreden daha sağlıklı çalışır. Diğerinde 5 Volt motor kullanmak gerek. Bunda farklı voltajlarda çalışan motorları kullanabilirsin.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…