Arduino otomatik drift aracı

FERDİ İKİZ

Çalışkan Uye
Katılım
9 Ocak 2015
Mesajlar
615
Tepkime puanı
345
Konum
Elazığ
İlgi Alanı
Heli
Arduino'mu edindikten sonra bir yandan led, potansiyometre gibi temel çalışmaları ilerletiyorum bir yandan da kendi projemi yapıyorum.

Benim projem oyuncak arabaya bazı drift figürleri yaptırmaya yönelik. Bir kontrolcü olmayacak, araç koddaki sıraya göre hareketleri yapacak.

Takıldığım nokta ise kodlama. Yazdığım program servo ve motora karışık bir sırayla komut veriyor, ama Arduino uno yalnızca servo komutlarını çalıştırıyor.

Motor sürücü L298n ve tek motor bağlı.
Ayrıca ayrı bir programla denediğim de sağlıklı bir şekilde çalışıyor.

Sorunu nasıl düzeltebilirim?

Kep yerleştirilmemiş:

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Edit: Görsel eklendi
 
Son düzenleme:
Arduino'mu edindikten sonra bir yandan led, potansiyometre gibi temel çalışmaları ilerletiyorum bir yandan da kendi projemi yapıyorum.

Benim projem oyuncak arabaya bazı drift figürleri yaptırmaya yönelik. Bir kontrolcü olmayacak, araç koddaki sıraya göre hareketleri yapacak.

Takıldığım nokta ise kodlama. Yazdığım program servo ve motora karışık bir sırayla komut veriyor, ama Arduino uno yalnızca servo komutlarını çalıştırıyor.

Motor sürücü L298n ve tek motor bağlı.
Ayrıca ayrı bir programla denediğim de sağlıklı bir şekilde çalışıyor.

Sorunu nasıl düzeltebilirim?
Duzeltmektense sana kod yazmaktan daha basit ve daha eglenceli bir yol onerebilirim: Visuino. Bahsettigin sorununda cozumu visuino ile mevcut. Deneme olarak fakli frekansta cakan birden fazla yanip sonen led yapabilirsin.( Blink gibi ama bir suru led ve ayri frekansta yanip sonuyor) Bu proje onemli ise arduino yerine jetson nano oneririm. Jetson nano CV (Kompeter gorusu) uygulamalarina ozel olarak gelistirildigi icin otonom arac uygulamalarina daha uygun. Ayrica drift yapan ornek projeleri de forumlarda fazlasiyla bulabilirsin.
 
  • Beğen
Tepkiler: FERDİ İKİZ
Arduino'mu edindikten sonra bir yandan led, potansiyometre gibi temel çalışmaları ilerletiyorum bir yandan da kendi projemi yapıyorum.

Benim projem oyuncak arabaya bazı drift figürleri yaptırmaya yönelik. Bir kontrolcü olmayacak, araç koddaki sıraya göre hareketleri yapacak.

Takıldığım nokta ise kodlama. Yazdığım program servo ve motora karışık bir sırayla komut veriyor, ama Arduino uno yalnızca servo komutlarını çalıştırıyor.

Motor sürücü L298n ve tek motor bağlı.
Ayrıca ayrı bir programla denediğim de sağlıklı bir şekilde çalışıyor.

Sorunu nasıl düzeltebilirim?
Hocam kodu paylaşabilirsiniz inceleyip yorum yapabiliriz.
Birde drifti daha sağlıklı ve ezbere yapmadan bir pusula sensörü ve accelometre ile daha sağlıklı olabilir. Yanlış bilmiyorsam gerçek arabalardaki Esp Kayma önleme sistemide yine bir pusula ve accelometre ile kaymayı algılıyor
 
  • Beğen
Tepkiler: FERDİ İKİZ
Kodları alta ekliyorum:

#include <Servo.h>
Servo servo;

int servoPin = 9;
const int in3 = 6;
const int in4 = 7;
const int e2 = 10;

void setup() {
servo.attach(9);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);

//MEKANİK İÇİN TEST HAREKETLERİ
servo.write(0);
delay(1000);
servo.write(180);
delay(1000);
servo.write(90);
analogWrite(e2, 60);
//FORWARD: in3, low and in4, high
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(1000);
analogWrite(e2, 60);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(1000);
//MEKANİK İÇİN TEST HAREKETLERİ BİTTİ
}


void loop() {

//FİGÜR 1 KODLAR(SIFIR ÇİZME)
servo.write(0);
delay(15);
analogWrite(e2,60);
//Forward in3,LOW in4,HIGH
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(3000);
servo.write(180);
delay(500);
servo.write(90);
delay(15);
analogWrite(e2,60);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(10);
}
 
Duzeltmektense sana kod yazmaktan daha basit ve daha eglenceli bir yol onerebilirim: Visuino. Bahsettigin sorununda cozumu visuino ile mevcut. Deneme olarak fakli frekansta cakan birden fazla yanip sonen led yapabilirsin.( Blink gibi ama bir suru led ve ayri frekansta yanip sonuyor) Bu proje onemli ise arduino yerine jetson nano oneririm. Jetson nano CV (Kompeter gorusu) uygulamalarina ozel olarak gelistirildigi icin otonom arac uygulamalarina daha uygun. Ayrica drift yapan ornek projeleri de forumlarda fazlasiyla bulabilirsin.
Öneriniz için teşekkür ederim. Arduino platformunu öğrenmek için bir müddet daha bu platformda kalacağım, zaten yeni başladığım için öğreneceğim şeyler var.
Proje kişisel bir uygulama yalnızca, o yüzden Arduino yeterli.
 
Hocam kodu paylaşabilirsiniz inceleyip yorum yapabiliriz.
Birde drifti daha sağlıklı ve ezbere yapmadan bir pusula sensörü ve accelometre ile daha sağlıklı olabilir. Yanlış bilmiyorsam gerçek arabalardaki Esp Kayma önleme sistemide yine bir pusula ve accelometre ile kaymayı algılıyor
Olabildiğince basit ama işini de yapabilen bir araç yapmak planım. Sensörlerle projeyi geliştirmek mümkün tabi önce o kodları işlemeyi tam olarak öğrenmeliyim. Şimdilik hareketler ile kodlar arasındaki ilişkiyi anlamak için en temel sistemi kullanacağım.
 
Kodları alta ekliyorum:

#include <Servo.h>
Servo servo;

int servoPin = 9;
const int in3 = 6;
const int in4 = 7;
const int e2 = 10;

void setup() {
servo.attach(9);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);

//MEKANİK İÇİN TEST HAREKETLERİ
servo.write(0);
delay(1000);
servo.write(180);
delay(1000);
servo.write(90);
analogWrite(e2, 60);
//FORWARD: in3, low and in4, high
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(1000);
analogWrite(e2, 60);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(1000);
//MEKANİK İÇİN TEST HAREKETLERİ BİTTİ
}


void loop() {

//FİGÜR 1 KODLAR(SIFIR ÇİZME)
servo.write(0);
delay(15);
analogWrite(e2,60);
//Forward in3,LOW in4,HIGH
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(3000);
servo.write(180);
delay(500);
servo.write(90);
delay(15);
analogWrite(e2,60);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(10);
}
Hocam anladığım kadarıyla bu kodu çalıştırdığınız zaman motor dönmüyor ama servonun olmadığı bir kod olduğunda dönüyor.
Belki servo kütüphanesi pinler üzerinde sorun yaratabilir. Kütüphane olmadan direkmen pwm kullanarak servoyu hareket ettirmeyi deneyin veya. Motor sürücüde nasılsa sadece high low yapıyorsunuz dijital pinler yerine analog pinleri kullanın.
Belki sorununuz çözülebilir
 
  • Beğen
Tepkiler: FERDİ İKİZ
Hocam anladığım kadarıyla bu kodu çalıştırdığınız zaman motor dönmüyor ama servonun olmadığı bir kod olduğunda dönüyor.
Belki servo kütüphanesi pinler üzerinde sorun yaratabilir. Kütüphane olmadan direkmen pwm kullanarak servoyu hareket ettirmeyi deneyin veya. Motor sürücüde nasılsa sadece high low yapıyorsunuz dijital pinler yerine analog pinleri kullanın.
Belki sorununuz çözülebilir
Deneyeceğim bunları, teşekkür ediyorum:)
 
Arduino Uno'da yani daha doğrusu ATMega328'de 10 numaralı porta analogWrite() komutu verildiğinde bu komut Timer1'i kullanır. Servo kütüphanesi de Timer1'i kullandığı için muhtemelen bir çakışma söz konusu. Mümkün olduğunca hazır kütüphane kullanmama sebebim de budur benim.

Önerilerim;
analogWrite(e2, 60); satırını digitalWrite(e2, HIGH); olarak değiştirip denemen. Motor abartılı hızlı çalışacaktır ama en azından düşündüğüm çakışmayı doğrulamış olursun.
Bir başka seçenek, e2'yi 3-5-6-11'den birine aktarman. 6'yı in3 için kullanmışsın. O halde 3-5-11'den biri düşünülebilir.

Genel öneriler:
Değeri değişmeyen değişkenleri const int olarak tanımlamak yerine #define olarak tanımlamak daha uygun ve profesyonel olur
 
  • Beğen
Tepkiler: FERDİ İKİZ
Arduino Uno'da yani daha doğrusu ATMega328'de 10 numaralı porta analogWrite() komutu verildiğinde bu komut Timer1'i kullanır. Servo kütüphanesi de Timer1'i kullandığı için muhtemelen bir çakışma söz konusu. Mümkün olduğunca hazır kütüphane kullanmama sebebim de budur benim.

Önerilerim;
analogWrite(e2, 60); satırını digitalWrite(e2, HIGH); olarak değiştirip denemen. Motor abartılı hızlı çalışacaktır ama en azından düşündüğüm çakışmayı doğrulamış olursun.
Bir başka seçenek, e2'yi 3-5-6-11'den birine aktarman. 6'yı in3 için kullanmışsın. O halde 3-5-11'den biri düşünülebilir.

Genel öneriler:
Değeri değişmeyen değişkenleri const int olarak tanımlamak yerine #define olarak tanımlamak daha uygun ve profesyonel olur
Bunları deneyip sonucu buraya yazacağım. Teşekkür ederim Sümer abi
 
Hocam anladığım kadarıyla bu kodu çalıştırdığınız zaman motor dönmüyor ama servonun olmadığı bir kod olduğunda dönüyor.
Belki servo kütüphanesi pinler üzerinde sorun yaratabilir. Kütüphane olmadan direkmen pwm kullanarak servoyu hareket ettirmeyi deneyin veya. Motor sürücüde nasılsa sadece high low yapıyorsunuz dijital pinler yerine analog pinleri kullanın.
Belki sorununuz çözülebilir
Motor sürücüsünün 3 pinini de değiştirerek denedim. Aynı sorun var.
 
Arduino Uno'da yani daha doğrusu ATMega328'de 10 numaralı porta analogWrite() komutu verildiğinde bu komut Timer1'i kullanır. Servo kütüphanesi de Timer1'i kullandığı için muhtemelen bir çakışma söz konusu. Mümkün olduğunca hazır kütüphane kullanmama sebebim de budur benim.

Önerilerim;
analogWrite(e2, 60); satırını digitalWrite(e2, HIGH); olarak değiştirip denemen. Motor abartılı hızlı çalışacaktır ama en azından düşündüğüm çakışmayı doğrulamış olursun.
Bir başka seçenek, e2'yi 3-5-6-11'den birine aktarman. 6'yı in3 için kullanmışsın. O halde 3-5-11'den biri düşünülebilir.

Genel öneriler:
Değeri değişmeyen değişkenleri const int olarak tanımlamak yerine #define olarak tanımlamak daha uygun ve profesyonel olur
E2'yi High yapmayı ve pin değiştirmeyi denedim. Ne yazık ki durum aynı.
Bu arada in3 ve in4 ve e2'yi define ile yazdığımda " = işaretinden önce açıklama beklenir" gibi bir uyarı geldi.

#define in3 = 2; . Yazmıştım.

Define ile servo pini tanımlama da sorun çıkmadı.