çizgi izleyen robot siyah zemine gelince durdurma

Kodla Büyü

permanganat

Seçkin Üye
Seçkin Üye
Mesajlar
395
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
 
Pinleriniz bunlar ise uygun kutuphane linki de atarım. Kullandığınız kütüphane çok eski kutuphane
 
ç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: 26
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
 
BBNET
Geri
Üst