Arduino ile robotu düz götürmek

HalilSenn

MB Üyesi
Kayıt
2 Ocak 2019
Mesajlar
13
Tepkiler
3
Yaş
28
Üniv
Adnan Menderes Üniversitesi
Merhabalar bitirme projem için aracımı tasarladım ancak düz götürmede problem yaşıyorum. Encoder kullanarak sorunu çözmeye çalıştım ama yinede olmadı. Kodlamada yardımcı olabilecek var mı? Her türlü öneriye açığım, önerileriniz varsa araç üzerinde denemek isterim.
Şimdiden teşekkürler.
 

Tolga Can

IEEE
MB Üyesi
Kayıt
24 Ocak 2019
Mesajlar
26
Tepkiler
9
Meslek
Öğrenci
Üniv
Pamukkale Üniversitesi
İlk neden düz götürmede sorun yaşadığınızı bulmak lazım. Size tavsiyem farklı eğimlerde aracı sürmeniz. Eğimlere göre ağırlık merkeziyle mi alakalı yoksa kontrol hakimiyeti mi bulunuz. Sensör ile çalışıyorsa sensörlerin yerlerini değiştiriniz, değişiklik varmı gözlemleyiniz. Eğer eğimde sorun yaşamıyorsanız, yani tüm eğimlerde davranış aynı ise muhtemelen dediğiniz gibi kod hatasıdır. Bu sonuca ulaşırsanız tekrardan iletişime geçelim, algoritmayı tekrar oluşturup kodları inceleriz
 

QuardGo

MB Üyesi
Kayıt
15 Mart 2019
Mesajlar
5
Tepkiler
1
Meslek
Yok
Üniv
Lise
Araç için yazdığınız kodları atarsanız yardımcı olabilirim.
 
Konu sahibi
Konu sahibi
HalilSenn

HalilSenn

MB Üyesi
Kayıt
2 Ocak 2019
Mesajlar
13
Tepkiler
3
Yaş
28
Üniv
Adnan Menderes Üniversitesi
const byte MOTOR_SAG = 3;
const byte MOTOR_SOL = 2;

const float stepcount = 20.00;
const float wheeldiameter = 60.00;

volatile int counter_A = 0;
volatile int counter_B = 0;

//Motor sağ
int enA = 10;
int in1 = 9;
int in2 = 8;

//Motor sol
int enB = 5;
int in3 = 7;
int in4 = 6;

//Motor sağ pulse counter
void ISR_countA()
{
counter_A++;
}
//Motor sol pulse counter
void ISR_countB()
{
counter_B++;
}

int CMtoSteps(float cm)
{
int result;
float circumference = (wheeldiameter * 3.14) / 10;
float cm_step = circumference / stepcount;

float f_result = cm / cm_step;
result = (int) f_result;
return result;
}

void MoveForward(int steps, int mspeed)
{
counter_A = 0; //reset counter A to zero
counter_B = 0; //reset counter B to zero

//Motor sağ ileri
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
//Motor sol ileri
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

//Sayılan sayı bitene kadar ilerle
while (steps > counter_A || steps > counter_B)
{ if(counter_B >= counter_A)
{ analogWrite(enA, mspeed);}
else
{ analogWrite(enA, 0); }
if (counter_A >= counter_B)
{ analogWrite(enB, mspeed); }
else
{analogWrite(enB, 0);}
}

// Bittiğinde durdur
analogWrite(enA, 0);
analogWrite(enB, 0);
//Sprint();
counter_A = 0;
counter_B = 0;
}
void setup() {
attachInterrupt(digitalPinToInterrupt (MOTOR_SAG), ISR_countA, RISING);
attachInterrupt(digitalPinToInterrupt (MOTOR_SOL), ISR_countB, RISING);

//cm sonra durdurur
MoveForward(CMtoSteps(1000),200);
delay(1000);

}

void loop() {


}
İlgili tarihte otomatik birleştirildi:

GitHub'ta kod araştırdım ancak bütün kodlar hareketsiz bir engelden kaçmaya yönelik, aracı hareketli bir engelin önünde nasıl durdurabilirim?
 
Son düzenleme:

Tolga Can

IEEE
MB Üyesi
Kayıt
24 Ocak 2019
Mesajlar
26
Tepkiler
9
Meslek
Öğrenci
Üniv
Pamukkale Üniversitesi
Pek görmezden geliniyorum, fakat yine de yardım etmekte ısrarcıyım sevgili arkadaşım. Hareketin durması demek koda tekrar başlamamak demektir, bunu biliyorsun.

//Gelen veri '?' ise arabayı durdur.
else if (state == '?'){
analogWrite(motor??, 0); analogWrite(motor??, 0);
}

veya uzaktan bir bağlantı ile çalışmıyorsa

analogWrite(Motor??, 0);

kodunu, motorların hareket etmesi için girdiğin kod kısmına ekleyebilirsin

veya

if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 0 && digitalRead(SensorSag) == 0){ // Orta sensör çizgiyi gördüğünde robot ileri gitmesin.
ileri();

bunları yukardaki sensöre göre uygun yere eklemelisin, digitaRead olduğu için sensör okuycuya göre eklemelisin. Kodun tam çalışmama sebebi doğru yazılmadığı için değil eksik yazıldığı için.
 
Konu sahibi
Konu sahibi
HalilSenn

HalilSenn

MB Üyesi
Kayıt
2 Ocak 2019
Mesajlar
13
Tepkiler
3
Yaş
28
Üniv
Adnan Menderes Üniversitesi
Çok teşekkür ederim Tolga Can. Şuan memlekete geldim oy kullanmak için. Geri döner dönmez deneyeceğim. Tekrar teşekkür ederim.
 
Yukarı Alt