ardino uno servo motor cozemedim takildim

Başlatan kado17, 17 Ocak 2021, 03:35:43

kado17

merhaba arkadaslar elimde bir proje var ama yarida takildim kaldim projemde ardino uno potansiyo metre ile servo suruyorum motoru 0 dan 90 derece potansiyo metre map komutu ile aliyorum sorun yok ama bana lazim olan potansiyo metre 0 ile 1023 arasi bir deger veriyor oda tamam benim potansiyometre 512 den 0 yani ortasindan geriye motoru saat yonu tersi 0 dan 90 dereceye dondurecek 512 potansiyometre yani ortaya gelince motor acisi 0 olup potdegeri 512 den 1023 gidince motor tekrar ayni yone saat yonu tersinde 0 dan 90 dereceye gidicek map komutu ile yapamadim potu ortadan ikiye bolup 512 den 0 - 512 den 1023 motoru tek yonde 0 - 90 dereceye yapamadim hangi yoldan gitmeliyim sizce

ete

Anladığım kadarı ile POT'u MAP komutu ile okuyorsun ve sana 0-1023 aralığında konuma göre bir değer veriyor. Orta noktası 512 oluyor. Ortdan sola doğru 512 den sıfıra gidiyorsun (pot değeri açısından)ve Ortadan sağa doğru 512 den 1023 e doğru gidiyorsun.
Servolar ise genelde 2 ms lik peryot ile çalışırlar.Değişen miktar 2000-500=1500us dir.
O halde Orta nokta sıfır noktası ise motoru bu konuma getirmek için 1500/2=750+500us lik bir puls verilmesi gerekir. Motoru sağa doğru 90 derece çevirmek için ise 1500+500=2000us lik puls verilmesi gerekiyor. Bu konumdaki pot değişen miktarını pot değerine bölersek 1500/1023=1,466275659824047 parametresini elde ederiz. İşte hangi konumda ise okudğun pot değerini bu parametre ile çarpıp üzerine 500 eklersen motora , pot konumuna göre konum vermiş olursun.
Hemen deneyelim Pot okunan değeri 512 olsun konum=512*1,466275659824047=750 bulunur buna 500 eklersek toplam puls süresi 1250 olarak bulunur buda motoru sıfır noktasına alır.
Şimdi pot=0 iken aynı hesabı yapalım Konum=0 * 1,466275659824047+500= 500 bulunur ki bu puls, motoru soldaki yatay konuma (-90 derece) alır.
2ms lik motor puls süresi standart motorlar için geçerlidir Elime şimdiye kadar pek çok servo geçti ve farklı değere sahip 1 adet motor gördüm. Genelde bu aralığı kullanıyor servolar.
Elindeki motor farklı ise soldaki yatay konumdan (Pot sıfır değeri) ile sağdaki yatay konuma (Pot 1023 değeri) gelmek için ne kadar süre istiyor ise ondan soldaki konum değerini çıkartırsan benim bulduğum 1500 değerinin karşılığını bulmuş olursun. Gerisi aynı hesaba dayanır.
Motorun zaten 2ms lik motor ise verdiğim rakamları uygularsın olur biter. Parametre bol küsüratlı çıkıyor. Gerekirse yuvarlayabilirsin.

Ete

kado17

hocam bilginize emeginize saglik aciklama cok iyi olmus hata bende suan fazla yazilim kod tecruben olmadigi icin sizin yazdiklarinizi anladim ama yazilim haline getirmekte sorunum var eksik bilgimden kaynakli oda


#include<Servo.h>

Servo sg90;

const byte pot_pini = A0;

int pot_deger;

void setup()
{
  Serial.begin(9600);
  sg90.attach(3);
}

void loop()
{

  pot_deger = analogRead(pot_pini);
  int yeni_deger = map(pot_deger , 0, 1023, 0, 90);
  delay(15);
}


bu kodu kullandim pot 0 dan 1023 kadar 90 derece donuyor tek olayim kodu ekliyim potu tam ortadan sinirlayabilmek mantik olarak anladim ama kod dilinde cikamadim isin icinden hocam

ete

Ne yazıkki C dilinden çok fazla anlamıyorum. Anladığım yanlzıca genel anlamdadır. Bu nedenle komutları çok iyi bilmiyorum ve bu yazdıklarından çok fazla şey anlamadım maalesef.
Anlayan varsa cevaplasın lütfen.
Ete

Blue High

Servo kontrolünü bilmiyorum ama şu şekil de yapılamaz mı?

İf(potdeger < 512)
int saat_tersi = map(potdeger,0,512,90,0)

else if(potdeger > 512)
int saat_yonu = map(potdeger,513,1023,0,90)

Tahmin yürütüyorum sadece. Belki olabilir.
Düşündüklerin kadar değil, yaptıkların kadarsın.

Serk@n

#5
Evet bu şekilde olması gerekir. Sadece komutun başındaki <512 yerine <513 yazılırsa, 512 değeri de kaçırılmamış olur.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Blue High

Alıntı yapılan: serkanzey - 20 Ocak 2021, 12:01:51Evet bu şekilde olması gerekir. Sadece komutun başındaki <512 yerine <513 yazılırsa, 512 değeri de kaçırılmamış olur.

Bu şekilde olması kararsız çalışmasına da neden olabilir hocam. Bana kalırsa biraz hata payıda verilmesi lazım.
Düşündüklerin kadar değil, yaptıkların kadarsın.

Serk@n

Evet, olabilir. Tecrübe etmek gerekir.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Powered by EzPortal