Robot Kol İle İlgili Yardım

Katılım
12 Şub 2015
Mesajlar
3
Puanları
1
Yaş
34
merhaba arkadaşlar. ben bir robot kol yaptım. arduino uno r3, 6 servo motor ve 6 potansiyometre kullandım. ancak sürekli sistem reset atıyor. bir motoru çalıştırmak için sinyal gönderdiğimde başka bir motor sürekli titreşim yapıyor ve bu sebeple bi türlü stabil çalışamıyor. bu robot kolun stabil çalışabilmesi için ne yapmam gerekir öneride bulunabilir misiniz ?

Motor olarak 3 tane sg90 9g(kıskaçlar ve alt eklem) ve 3 tane mg90s servo(diğer eklemler) motor kullandım.

elektronik aksamın fotoğrafları.

8l1lpA.jpg
DlJlnZ.jpg


yardımcı olursanız çok sevinirim.

kullandığım kod aşağıda.

Kod:
#include <Servo.h>

Servo servo0;

Servo servo1;

Servo servo2;

Servo servo3;

Servo servo4;

Servo servo5;

int potpin0 = A0;
int onix0;

int potpin1 = A1;
int onix1;

int potpin2 = A2;
int onix2;

int potpin3 = A3;
int onix3;

int potpin4 = A4;
int onix4;

int potpin5 = A5;
int onix5;

void setup()
{
  servo0.attach(2); //1
 
  servo1.attach(3); //2
 
  servo2.attach(9); //SAĞ
 
  servo3.attach(10); //3
 
  servo4.attach(7); //4
 
  servo5.attach(5);  //SOL
}

void loop()
{
  onix0 = analogRead(potpin0);
  onix0 = map(onix0, 0, 1023, 0, 180);
  servo0.write(onix0);
  delay(5);
 
  onix1 = analogRead(potpin1);
  onix1 = map(onix1, 0, 1023, 0, 180);
  servo1.write(onix1);
  delay(5);
 
  onix2 = analogRead(potpin2);
  onix2 = map(onix2, 0, 1023, 0, 180);
  servo2.write(onix2);
  delay(5);
 
  onix3 = analogRead(potpin3);
  onix3 = map(onix3, 0, 1023, 0, 180);
  servo3.write(onix3);
  delay(5);
 
  onix4 = analogRead(potpin4);
  onix4 = map(onix4, 0, 1023, 0, 180);
  servo4.write(onix4);
  delay(5);
 
 
  onix5 = analogRead(potpin5);
  onix5 = map(onix5, 0, 1023, 0, 180);
  servo5.write(onix5);
  delay(5);
}
 
Sanırım bütün beslemeyi arduinodan almişsin, servolarin çektiği güç arduinonun gücünden muhtemelen fazla,
Arduinodan maximum güç çekerseniz arduino kendini resetler, onun için servolarin beslemesini harici bir kaynaktan alarak sorunu çözebilirsiniz.
Kolay gelsin..
 
teşekkür ederim cevabınız için. benim de aklıma böyle bir çözüm geldi lakin elektronik konusunda biraz tecrübesizim. sizce nasıl birşey işimi görür bu konuda yardım ederseniz sevinirim.
 
Servolarin max çekeceği akimi öğrenin ve bunların toplamının üstünde bir akü veya adaptör alıp servolarin beslemesine baglayacaksiniz.
Mesela servonun tanesi max 500ma akim çekip kaç tane var 6 yani 6x500den 3A 5v kaynak gerekir.
Servolarin max akımını hesapla ve ona gore hareket et.
Ayrica arduino ile kaynağın gndlerinide birbirine bağla.
Kolay gelsin..
 
resetleme birkaç servo birden çalışınca cslyas06 arkadaşın dediği gibi aşırı akım sonucu ardu resetleniyor.
resetleme olmadığı zamanlardada bir servoya komut gönderince o servo hareket halinde iken çekilen akım ve ardu besleme hattındaki ripple lar potların vcc si de buna dahil olduğundan adc çevrimine yansıyor ve servo sinyalleride bu yuzden değişiyor. bunu çözmenin iki yolu var.
1- pot okumayı 50 kez okuyup ortlama almak.
2-servo 5v beslemesini enaz 3-5 A bir supply ile ayrı yapıp gnd leri birleştirmek.

2 sini birden yaparsanda pot tepkimesi biraz yavaş olur fakat sorunsunz çalışır.
 
resetleme birkaç servo birden çalışınca cslyas06 arkadaşın dediği gibi aşırı akım sonucu ardu resetleniyor.
resetleme olmadığı zamanlardada bir servoya komut gönderince o servo hareket halinde iken çekilen akım ve ardu besleme hattındaki ripple lar potların vcc si de buna dahil olduğundan adc çevrimine yansıyor ve servo sinyalleride bu yuzden değişiyor. bunu çözmenin iki yolu var.
1- pot okumayı 50 kez okuyup ortlama almak.
2-servo 5v beslemesini enaz 3-5 A bir supply ile ayrı yapıp gnd leri birleştirmek.

2 sini birden yaparsanda pot tepkimesi biraz yavaş olur fakat sorunsunz çalışır.

teşekkür ederim cevaplarınız için. ama pot okumayı 50 kez okuyup ortalama almak derken nasıl yapacağım onu anlamadım biraz daha açabilirsen sevinirim.
 
potansiyometrelerin orta uclarından alınıp okunan analog değerlerin sayısal karşılıklarını 16 yada 32 bitlik bir değişken içerisine sürekli toplayıp (50 gibi) sayı tamamlanınca toplam değerin ortalamasını almak. (kaç kez toplandıysa o sayıya bölmek)

ortlama alma konusuyla ardunioda bir dünya kod örneği bulabilirsin. ben ardunio ile uğraşmıyorum pic yazdığım için kodlara aşina değilim ama mantığı aynı.

for i=0 to 49
toplam=toplam + analogdeger
next i

toplam=toplam / 50
gibi
 

Forum istatistikleri

Konular
128,120
Mesajlar
915,175
Kullanıcılar
449,825
Son üye
yasargokdemir

Yeni konular

Geri
Üst