çizgi izleyen robot siyah zemine gelince durdurma

Kodla Büyü

permanganat

Seçkin Üye
Seçkin Üye
Mesajlar
396
QT8-RC İLE sensör ile çizgi izleyen robot yaptım. Robot çizgi izliyor ancak siyah zemine gelince yani tüm sensörler siyahı algılayınca robotun durmasını istiyorum ancak ardunio kodunu bir türlü yazamadım ne yazmam gerekiyor bide nereye yazmam gerekiyor yardımcı olurmuusunuz?
 
Hocam PID için ve motor sürmek için iki fonksiyonununuz oldugunu varsayıyorum;
********************
uint16_t position = qtr.readLineBlack(Sensor);
if (Sensor[0] > 300 && Sensor[1] > 300 && Sensor[2] > 300 && Sensor[3] > 300 && Sensor[4] > 300 && Sensor[5] > 300 && Sensor[6] > 300 && Sensor[7] > 300 ) //tüm sensörler siyah gördü ise duracak
{
while(1)
{
Motor(0,0);
}
}
else
{

PID(); //sensörlerden biri beyazda ise PID ile çizgizleyecek

}

*********************

Aynı yöntem 90 derece dönmeler içinde kullanılır.
 
hocam 6 sensör algılayıcı kullanıyorum 2 tanesi bozuk olduğu için kod şu şekilde
#include <QTRSensors.h>
// QTR sensör pinleri: 3, 4, 7, 8, 11, 12
QTRSensorsRC qtrrc((unsigned char[]){3, 4, 7, 8, 11, 12}, 6, 2500, QTR_NO_EMITTER_PIN);
unsigned int sensorDegerleri[6];
// Motor pinleri
const int motor1Pin1 = 5;
const int motor1Pin2 = 6;
const int motor2Pin1 = 10;
const int motor2Pin2 = 9;
// PID değişkenleri
float Kp = 0.4;
float Ki = 0.0;
float Kd = 2.0;
float hata = 0;
float oncekiHata = 0;
float toplamHata = 0;
int motorHizTemel = 100;
int maxHiz = 150;
void setup() {
Serial.begin(9600);
// Motor pinlerini çıkış olarak ayarla
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
// Kalibrasyon başlat
Serial.println("Sensör kalibrasyonu başlıyor...");
delay(1000);
for (int i = 0; i < 400; i++) {
qtrrc.calibrate();
delay(10);
}
Serial.println("Kalibrasyon tamamlandı.");
}
void loop() {
int konum = qtrrc.readLine(sensorDegerleri); // 0-5000 arası, ortası 2500
int pozisyonHatasi = konum - 2500;
pidKontrol(pozisyonHatasi);
}
void pidKontrol(int pozisyonHatasi) {
hata = pozisyonHatasi;
toplamHata += hata;
float fark = hata - oncekiHata;
oncekiHata = hata;
float pidDegeri = (Kp * hata) + (Ki * toplamHata) + (Kd * fark);
int motorHizSol = motorHizTemel + pidDegeri;
int motorHizSag = motorHizTemel - pidDegeri;
motorHizSol = constrain(motorHizSol, 0, maxHiz);
motorHizSag = constrain(motorHizSag, 0, maxHiz);
motorSur(motorHizSol, motorHizSag);
}
void motorSur(int hizSol, int hizSag) {
analogWrite(motor1Pin1, hizSol);
analogWrite(motor1Pin2, 0);
analogWrite(motor2Pin1, hizSag);
analogWrite(motor2Pin2, 0);
}
buraya bana eklermisiniz hocam
 
çok hayra geçersiniz hocam bi arkadaşdan aldım kodları kütüphane ve ino dosyası atarsanız çok mutlu edersiniz teşekkürler hocam şimdiden :=)
 
ino dosyası yüklenmiyor sanırım buraya uygun zamanda atarsanız çok memnun olurum hocam selamlar
 
sensörün algıladığı değere göre hız belirliceksiniz, basit bir çizgi izleme işlemi için neden bu kadar kod var ve neden kütüphane kullanıyorsunuz?
 
Hocam PID için ve motor sürmek için iki fonksiyonununuz oldugunu varsayıyorum;
********************
uint16_t position = qtr.readLineBlack(Sensor);
if (Sensor[0] > 300 && Sensor[1] > 300 && Sensor[2] > 300 && Sensor[3] > 300 && Sensor[4] > 300 && Sensor[5] > 300 && Sensor[6] > 300 && Sensor[7] > 300 ) //tüm sensörler siyah gördü ise duracak
{
while(1)
{
Motor(0,0);
}
}
else
{

PID(); //sensörlerden biri beyazda ise PID ile çizgizleyecek

}

*********************

Aynı yöntem 90 derece dönmeler içinde kullanılır.
Peki hocam
Hocam PID için ve motor sürmek için iki fonksiyonununuz oldugunu varsayıyorum;
********************
uint16_t position = qtr.readLineBlack(Sensor);
if (Sensor[0] > 300 && Sensor[1] > 300 && Sensor[2] > 300 && Sensor[3] > 300 && Sensor[4] > 300 && Sensor[5] > 300 && Sensor[6] > 300 && Sensor[7] > 300 ) //tüm sensörler siyah gördü ise duracak
{
while(1)
{
Motor(0,0);
}
}
else
{

PID(); //sensörlerden biri beyazda ise PID ile çizgizleyecek

}

*********************

Aynı yöntem 90 derece dönmeler içinde kullanılır.
Hocam hazır konusu geçmişken ben de bir şey sormak istedim. Görselde işaretli yerlerde robotumuz dönmekte zorlanıyor. Çoğu zaman geri dönüyor. Bu işaretli yerler için nasıl bir ince ayar yapmalıyız. qtr8 sensör kullanıyoruz. Şimdiden teşekkür ederim.
 

Ekli dosyalar

  • Pist.webp
    Pist.webp
    8 KB · Görüntüleme: 36
Hocam öncelik ile bir kaç konuya değinip kodu atacağım;
1- analog pinler yani A0,A1,A2... pinleri 10 bit ile çalışır bu yzden qtr sensörleri buraya bağlamanız gerekir.
2- l298n motor sürücü için konuşuyorum ENA ve ENB pinlerini kesinlikle bağlamalısınız. koddaki yazdığım pin değerlerine göre Nano ise A0....A7 ye kadar
uno ise D3,A0....A5, D9 ( qtr8rc Köşelere pwm pinleri)

kütüphane adresi:

eski kütüphaneyi silip 4.0.0 kutuphanesini yükleyin.

90 dönme koduda içinde ama 6 sensörlü
 

Ekli dosyalar

Peki hocam

Hocam hazır konusu geçmişken ben de bir şey sormak istedim. Görselde işaretli yerlerde robotumuz dönmekte zorlanıyor. Çoğu zaman geri dönüyor. Bu işaretli yerler için nasıl bir ince ayar yapmalıyız. qtr8 sensör kullanıyoruz. Şimdiden teşekkür ederim.
hocam 6 sensörde zor ama 8 sensör için 90 dönü değiştirerek yazabilirsiniz.
çizgi izleyen yapımı tozkoparan yapımı v.s. için canlı dersler yapmıştık telagram gurubumuzda kaçırmışsınız.
 
sensörün algıladığı değere göre hız belirliceksiniz, basit bir çizgi izleme işlemi için neden bu kadar kod var ve neden kütüphane kullanıyorsun

Hocam öncelik ile bir kaç konuya değinip kodu atacağım;
1- analog pinler yani A0,A1,A2... pinleri 10 bit ile çalışır bu yzden qtr sensörleri buraya bağlamanız gerekir.
2- l298n motor sürücü için konuşuyorum ENA ve ENB pinlerini kesinlikle bağlamalısınız. koddaki yazdığım pin değerlerine göre Nano ise A0....A7 ye kadar
uno ise D3,A0....A5, D9 ( qtr8rc Köşelere pwm pinleri)

kütüphane adresi:

eski kütüphaneyi silip 4.0.0 kutuphanesini yükleyin.

90 dönme koduda içinde ama 6 sensörlü
teşekkürler hocam herşey için :)
 
hocam bide bir yerde gördüm doğrumudur size sorayım QTR8-RC digital pinlere QTR-8A analog pinlere takılıyor diye böyle bir şart var mı yoksa qtr8c yide analog pine takabiliyoruz sanırım
 
hocam bide bir yerde gördüm doğrumudur size sorayım QTR8-RC digital pinlere QTR-8A analog pinlere takılıyor diye böyle bir şart var mı yoksa qtr8c yide analog pine takabiliyoruz sanırım
RC hem pwm pinlerine hem analog pinelere takılır hocam . Qtr8a ise sadece analog pinlere takılır. Ama ikisinide analog pinlere takmak en mantiklisidir. Sebebi ise analog pinler 10 bit olduğu için veri taşıma hızı daha hızlıdir. Diğer pinler 8 bit tır.
Motor pinleri için ise 5 ve 6 pin UNO ve Nano icin genellikle motorun hız kontrolü yani ena ve enb için kullanılır. Bunun sebebi ise bu iki pini inceler iseniz diğer dijital pinlerden daha yüksek bir Hz de çalışır bu da zaten zayıf bir denetleyici olan Arduinonun daha rahat çalışmasını sağlar.
Son olarak küçük bir tiyo l298n kullanıyor iseniz örnek veriyorum motorlara 200,200 pwm ile sürüyorsunuz 10v piliniz var.
Her iki Motora gitmesi gereken voltaj 8v olması gerekir. Fakat ölçüm yaparsanız bir motora 8v diğerine ise 7.2 v gibi bir voltaj gider. Bunun sebebi ise l298 entegredinin köprü yapısındaki kayipdir.
Yani 200 200 verdigimizde düz gitmez robot.
180,200 gibi bir değerde düz gider. Bu yüzden motor test kodu ile önce pwmlere eşitler aradaki farkı buluruz.
Bir elektronik i değilim ama biraz anlarım. Takıldığınız yerlerde sorabilirsiniz sayın hocam. Meslekdaşlarima bı nebze faydamin dokunması mutlu eder benide.
Kolay gelsin tekrar
 
RC hem pwm pinlerine hem analog pinelere takılır hocam . Qtr8a ise sadece analog pinlere takılır. Ama ikisinide analog pinlere takmak en mantiklisidir. Sebebi ise analog pinler 10 bit olduğu için veri taşıma hızı daha hızlıdir. Diğer pinler 8 bit tır.
Motor pinleri için ise 5 ve 6 pin UNO ve Nano icin genellikle motorun hız kontrolü yani ena ve enb için kullanılır. Bunun sebebi ise bu iki pini inceler iseniz diğer dijital pinlerden daha yüksek bir Hz de çalışır bu da zaten zayıf bir denetleyici olan Arduinonun daha rahat çalışmasını sağlar.
Son olarak küçük bir tiyo l298n kullanıyor iseniz örnek veriyorum motorlara 200,200 pwm ile sürüyorsunuz 10v piliniz var.
Her iki Motora gitmesi gereken voltaj 8v olması gerekir. Fakat ölçüm yaparsanız bir motora 8v diğerine ise 7.2 v gibi bir voltaj gider. Bunun sebebi ise l298 entegredinin köprü yapısındaki kayipdir.
Yani 200 200 verdigimizde düz gitmez robot.
180,200 gibi bir değerde düz gider. Bu yüzden motor test kodu ile önce pwmlere eşitler aradaki farkı buluruz.
Bir elektronik i değilim ama biraz anlarım. Takıldığınız yerlerde sorabilirsiniz sayın hocam. Meslekdaşlarima bı nebze faydamin dokunması mutlu eder benide.
Kolay gelsin tekrar
teşekkür ederim hocam arada sizden yardım alırız bazı konularda :=)
 
RC hem pwm pinlerine hem analog pinelere takılır hocam . Qtr8a ise sadece analog pinlere takılır. Ama ikisinide analog pinlere takmak en mantiklisidir. Sebebi ise analog pinler 10 bit olduğu için veri taşıma hızı daha hızlıdir. Diğer pinler 8 bit tır.
Motor pinleri için ise 5 ve 6 pin UNO ve Nano icin genellikle motorun hız kontrolü yani ena ve enb için kullanılır. Bunun sebebi ise bu iki pini inceler iseniz diğer dijital pinlerden daha yüksek bir Hz de çalışır bu da zaten zayıf bir denetleyici olan Arduinonun daha rahat çalışmasını sağlar.
Son olarak küçük bir tiyo l298n kullanıyor iseniz örnek veriyorum motorlara 200,200 pwm ile sürüyorsunuz 10v piliniz var.
Her iki Motora gitmesi gereken voltaj 8v olması gerekir. Fakat ölçüm yaparsanız bir motora 8v diğerine ise 7.2 v gibi bir voltaj gider. Bunun sebebi ise l298 entegredinin köprü yapısındaki kayipdir.
Yani 200 200 verdigimizde düz gitmez robot.
180,200 gibi bir değerde düz gider. Bu yüzden motor test kodu ile önce pwmlere eşitler aradaki farkı buluruz.
Bir elektronik i değilim ama biraz anlarım. Takıldığınız yerlerde sorabilirsiniz sayın hocam. Meslekdaşlarima bı nebze faydamin dokunması mutlu eder benide.
Kolay gelsin tekrar
Verdiğiniz bilgiler için teşekkür ederiz hocam, L298n yerine T6612 motor sürücü tercih etsek aynı durum bunun için de geçerli midir?
 
BBNET
Geri
Üst