Servo motorun pot ve butonlarla kontrolü hakkında..

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
Merhaba arkadaşlar,

Arduino üzerinden servo motor kontrolü devresi yapıyorum fakat bir yerde tıkandım kaldım. Yapmak istediğim kısaca ;

1 Servo motoru 5 buton ile her 90-45-0-(-)90-(-45) açılara pozisyonladım. Bunun yanı sıra pot ilede hareketini sağlayabiliyorum fakat tek motoru iki kontrollü şekilde ayarlayamadım.

Benim yapmak istediğim bir buton ile analog girişi aktif ettiğimde digital pinlerin inaktif olması. Aynı şekilde digital pin aktif olduğunda da analogun inaktif olması. if else ile alakalı bir yerde yanlışlık yapıyorum fakat çıkamadım işin içinden..

Yazdığım kodlar aşağidaki gibidir. Lütfen desteklerinizi rica ederim..
Kod:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <Servo.h>

Servo myservo;

int aci90 = 8;
int aci45 = 9;
int aci0 = 10;
int aci_45 = 11;
int aci_90 = 12;
int potpin = 0 ;
int val;

void setup()
{
  myservo.attach(4);
  pinMode(aci90, INPUT_PULLUP);
  pinMode(aci45, INPUT_PULLUP);
  pinMode(aci0, INPUT_PULLUP);
  pinMode(aci_45, INPUT_PULLUP);
  pinMode(aci_90, INPUT_PULLUP);
  pinMode (potpin, OUTPUT);
}

void loop()
{

if (analogRead(potpin), HIGH)     ( BURAYA HIGH VERDIGIMDE DIGITAL OLANLARIN INAKFIT OLMASI ICIN GEREKLI DONGUYU KURAMADIM )
{
  
  val = analogRead(potpin);          
  val = map(val, 0, 1023, 0, 179);  

  myservo.write(val);             

  delay(15);                        


  if(digitalRead(aci90) == LOW)
  {
    myservo.write(180);
  }

  if(digitalRead(aci45) == LOW)
  {
    myservo.write(117);
  }

  if(digitalRead(aci0) == LOW)
  {
    myservo.write(93);
  }

  if(digitalRead(aci_45) == LOW)
  {
    myservo.write(68);
  }

  if(digitalRead(aci_90) == LOW)
  {
    myservo.write(3);
  }
}

}
------------------------------------------------------------------------------------------------------------------------------------------
 
Son düzenleme:

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
Merhaba, Pot harekete geçince Butondan alınan dijital komutlarla pozisyonlanan servonun artık pota göre harekt etmesini mi istiyorsun. pot devreye girince buton komutları geçersiz olacak yani. Eğer böyleyse Pot a HIGH değerini verdiğinde hemen altına tüm butonlaın LOW olduğunu yazarsan sorun kalmaz diye düşünüyorum.
 

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
Merhaba, Pot harekete geçince Butondan alınan dijital komutlarla pozisyonlanan servonun artık pota göre harekt etmesini mi istiyorsun. pot devreye girince buton komutları geçersiz olacak yani. Eğer böyleyse Pot a HIGH değerini verdiğinde hemen altına tüm butonlaın LOW olduğunu yazarsan sorun kalmaz diye düşünüyorum.
Bahsettğim konunun üstesinden geldim şuan da pot ilede pır sensörler ile de çalıştırabiliyorum fakat şöyle bir problem oluştu;

1. PIR sensör ( int = 8 ) den sinyal aldığında motoru 90 derece de hareket ettiriyor fakat arkasından 2.PIR Sensör ( int = 9 ) a sinyal verdiğimde 8 nolu pinden sinyali hemen kesmediği için 45 dereceye dönmeye çalışıyor fakat 90 derece hala HIGH olduğunda ndolayı zorlama yapıyor. 4 5 saniye sonra 8 nolu pinden voltajı kestiği için 2.verdiğim komut olması gereken yere geliyor. Şuan benim yapamadığım nokta 8 nolu pine sinyal verdiğim de motor 90 derece açıya geldiğinde voltajı kessin ki diğer dedektöre sinyal geldiği zaman anlık tepkime yapabilsin. LOW ile ilgili olan kodu bir türlü oturtamadım.Proteusun simülasyonda problem olduğunu düsünüyorum ama farklı versiyon kurdum aynı problemi orada da yaşadım .
 

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
Not : iki adet servo motor Arduıno üzerinde usb den alınan voltajla çalışırken saçmalayabilir. çünkü bilgisayardan gelen 500ma lik akım yetersiz kalabiliyor. harici güç kaynaklarıyla deneme yapın: 120 volt 1 amper gibi.Bazen proteus da saçmalayabilir .bir de hareket başlangıç ve bitişlere belli miktarda bekleme süresi koyup sonra LOW yada HIGH yaparak deneyin derim.
 

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
Ayrca fazladan malzeme bağlıyorsanız çıkışlara transistör koyun çünkü arduınonun çıkışlarından çıkan akım yetersiz. iki pır dedektör iki de servo taksanız .tamam arduıno kafayı buldu :)) . o yüzden transistör le çıkışları destekleyin.
 

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
Not : iki adet servo motor Arduıno üzerinde usb den alınan voltajla çalışırken saçmalayabilir. çünkü bilgisayardan gelen 500ma lik akım yetersiz kalabiliyor. harici güç kaynaklarıyla deneme yapın: 120 volt 1 amper gibi.Bazen proteus da saçmalayabilir .bir de hareket başlangıç ve bitişlere belli miktarda bekleme süresi koyup sonra LOW yada HIGH yaparak deneyin derim.
Ben bunu simülasyon üzerinden deniyorum şuan fiziksel olarak henüz yapmadım. Burda hassasiyet önemli o yüzden delay vermek istemiyorum. Daha açıklayıcı olucaksa şöyle düşünün ;

5 adet pır var 90 45 0 -45 -90 derecede konumlandırılmış. Bu pırlara gelen sinyallere göre servo motor o yöne hareket sağlıyor. Şu yazdıklarıma kadar bir problem yok. Diyelim ki 90 derecelik dedekötre sinyal geldi ve servo 90 derece harekt etti ve durdu. İşte bu noktada 90 derecelik pirin bağlı olduğu pinden voltajı hemen kesmiyor. 4 5 saniye bekliyor. Bu bekleme yaptığı için 2. pira sinyal geldiğinde hareketini doğru yapabilmesi için 1. pirdan gelen sinyalin voltajının kesilmesini bekliyor. Benim istediğim 90 dereceyi yakaladığında direk voltajı kessin ki diğer dedektörler aktif şekilde hızlı devreye girebilsin.
 

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
if(digitalRead(aci90) == HIGH)
{
myservo.write(180) == LOW ?????? GİBİ
}

kod olarak açıklamam gerekirse HIGH dan sonra LOW vermem gerekiyor ama veremedim bir türlü 4 5 saniye bekletiyor çıkış volttajı kesmek için
 

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
pır dedöktörün nasıl bilmiyorum ama genelde üzerlerinde trimpot var . algılama yaptığında harekete geç veya erken geçmeyi değiştiriyor. bundan dolayı da olabilir.
 

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
pır dedöktörün nasıl bilmiyorum ama genelde üzerlerinde trimpot var . algılama yaptığında harekete geç veya erken geçmeyi değiştiriyor. bundan dolayı da olabilir.
Pır dedektörü simülasyon üzerinden kullanıyorum o şekilde bir ayar bende düşündüm ama bulamamıştım farklı kütüphaneler ile tekrar deneyeceğim. Yani motor hareketinden sonra HIGH kalmasının bir açıklamasını bulamadım.
 

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
Kod:
if(digitalRead(aci90) == LOW)
  {
    myservo.write(180);
  }


  if(digitalRead(aci90) == LOW)
  {
    myservo.write(180);
  }
bunların ikisi de aynı neden alt alta yazdın dikkatimi çekti.
 

seyyarbilimadamı

Saygı Değer Üye
Paylaşım Ekibi
24 Ara 2018
567
43
0
istanbul
Biraz uğraştırıyor ama ben önüme alıyorum arduınoyu birebir deniyorum :)) çalışan kodlar diye klasör yapıp saklıyorum.
 

coolvrelax

Yeni Üye
19 Ara 2018
12
0
0
istanbul
Biraz uğraştırıyor ama ben önüme alıyorum arduınoyu birebir deniyorum :)) çalışan kodlar diye klasör yapıp saklıyorum.
Tabi öyle daha sağlıklı olur fakat şuan simülasyondan denemeden yapmak istemiyorum. Şu voltaj işini çözdükten sonra bir kaç ekleme daha yaptım onlarla birlikte komplike birşey olacak. Çözersem burdan paylaşacağım. İlgin için teşekkürler aklına birşety gelirse yazarsan sevinirim.
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?

X Merhaba ziyaretçi Robotikforum.net adresine hoşgeldin. Robotikforum.net
adresi gelişen teknoloji ile günden güne yaygınlaşan robotik teknolojileri
hakkında yardımlaşabileceğin ve tartışabileceğin bir platformdur.
Aramıza katılmaya ne dersin?
Kayıt Ol