Çizgi izleyen robot (PCB gövde)

Çizgi izleyen robot kodu:

#include <QTRSensors.h>

//pinleri tanımla

#define AIN1 4 //A sağ motor
#define AIN2 3
#define PWMA 5

#define PWMB 6 //B sol motor
#define BIN1 7
#define BIN2 8
#define STBY 9

#define sensorSayisi 8
#define sensorOrnekSayisi 4
#define emiterPini 11
#define LED 13
#define MZ80 2

//hız ayarı
int maxhiz = 70;

boolean zemin=1; //1 siyah 0 beyaz

//PD’yi kullanmak için değişkenleri bildirme
int hata = 0; float KP=0.01; // hata
int turev = 0; float KD=0.1; // turev

unsigned int pozisyon = 0;

int fark = 0; // motorlara uygulanan fark
int son_hata; // Orantılı son değer (hatanın türevini hesaplamak için kullanılır)
int hedef = 3500; // Ayar noktası (8 sensör kullandığımız için pozisyon 0 ile 7000 arasında olmalıdır, bu yüzden ideal 3500)

//QTR-8A ayarla
QTRSensorsAnalog qtra((unsigned char[]){A0, A1, A2, A3, A4, A5, A6, A7},sensorSayisi);

unsigned int sensor[sensorSayisi];

void setup()
{
// çıkış pinleri
pinMode(AIN1 ,OUTPUT);
pinMode(AIN2 ,OUTPUT);
pinMode(PWMA ,OUTPUT);
pinMode(BIN1 ,OUTPUT);
pinMode(BIN2 ,OUTPUT);
pinMode(PWMB ,OUTPUT);
pinMode(LED ,OUTPUT);
pinMode(STBY ,OUTPUT);
pinMode(MZ80 ,INPUT);

// Dahili Led yanıp söndüğü sürece (3sn) Elle Kalibrasyon yap
for ( int i=0; i<70; i++)
{
digitalWrite(LED, HIGH); delay(20);
qtra.calibrate();
digitalWrite(LED, LOW); delay(20);
}

}

void loop()
{

pozisyon = qtra.readLine(sensor, true, zemin);
hata = pozisyon – hedef;

turev = hata – son_hata;

son_hata = hata;

int fark = ( hata * KP) + ( turev * KD );

if ( fark > maxhiz ) fark = maxhiz;
else if ( fark < -maxhiz ) fark = -maxhiz;

( fark < 0 ) ?
motor(maxhiz, maxhiz+fark) : motor(maxhiz-fark, maxhiz);
}

// sağ motor sürücü fonksiyonu
void sagmotor(int deger)
{
if ( deger >= 0 )
{
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
}
else
{
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
deger *= -1;
}
analogWrite(PWMA,deger);
}

// sol motor sürücü fonksiyonu
void solmotor(int deger)
{
if ( deger >= 0 )
{
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
}
else
{
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
deger *= -1;
}
analogWrite(PWMB,deger);
}

//motor sürücü
void motor(int sol, int sag)
{
digitalWrite(STBY,HIGH);
solmotor(sol);
sagmotor(sag);
}

qtr-sensors-arduino-3.0.0 kütüphane dosyası

QTR-8x datasheet

QTR_arduino_library

Hızlı Çizgi izleyen robot (PCB gövde)

araba_hizli proteus dosyası

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.