Ana səhifə Robotexnika Arduino ilə maneədən qaçan robot maşın

Arduino ilə maneədən qaçan robot maşın

466

Son 2 ildə robotexnikanın inkişafı ötən onilliyin bütün uğurlarını geridə qoymaqla bərabər önəmli məktəblərin də açılmasına zəmin yaratdı. Bunlardan ən populyarı isə Arduino-dur. Bu məqalədə də Arduinodan istifadə edərək maneədən qaçan bir robot maşın quracağıq.

Lazım olan materiallar:

1 əd Arduino UNO

1 əd 2 çəkən smart maşın şassi kiti

1 əd L298N motor sürücü kartı

1 əd Ultrasonik sensor

1 əd 3-lü 18650 yuvası

Eyni zamanda materialların şəkillərini də yeni başlayan dostlarımızın anlaması üçün təqdim edirik:

Bir çox saytlarda 9V-luq bir güc qaynağı ilə işə salınan bu robot 1 dəfəlik uğurdan həzz almaq üçün layihələndirilib. Lakin biz bu maşınımızı növbəti məqalələrdə də işlədəcəyimiz üçün daha dayanıqlı və güclü dizayn edəcəyik. Bu yolla həm digər layihələrdə yeni materiallar almaq yaxud sökmək məcburiyyətində qalmayacağıq.

İndi isə bağlantı sxeminə nəzər salaq.

Sxemi bir də yazı ilə yeni başlayan oxuyucularımıza başa salaq.

3-lü 18650 batareya yuvasından çıxan naqilləri(mənfi və müsbət) Arduino-muzun 12V girişinə bi başlıq yardımı ilə qoşuruq və ona paralel bir xətt motor sürücümüzün 12V girişinə də bağlantı veririk.

Motor sürücünün idarəetmə bağlantılarını isə şəkildə gördüyünüz kimi sıra ilə Arduino-nun rəqəmsal 3, 4, 5, 6, 7 və 9 pinlərinə qoşuruq. Sonra da motor sürücünün çıxışlarını təkərlərə vağlı olan motorlara bağlayırıq. Diqqıt edin ki motor bağlantılarının müsbət və mənfiləri bir-birinin əksi istiqamətində bağlanmışdır. Bununla da motor sürücü bağlantılarını bitiririk.

Ultrasonik modulun bağlantıları da motor sürücü bağlantılarına bənzər şəkildədir. Lakin bu dəfə müsvəti Arduinonun 5V çıxışından məndini isə Arduinonun GND portundan alırıq. Geri qalan iki pini isə şəkildə gördüyünüz ardıcıllıqla Arduinonun 12 və 13 pinlərinə bağlayın.

Bütün bağlantıları bitirdiyimizə görə artıq kodlamaya keçə bilərik. Arduinomuzu USB vasitəsi ilə kompüterimizə qoşuruq və proqram təminatını(Arduino IDE) açırıq. Aşağıdadı kodları analiz edərək Arduino IDE-nin yazı sətirinə kopyalayırıq.

Daha yaxşı başa düşmək üçün kod sətirlərini tək-tək araşdırın ki, nəyin hansı kodla işlədiyini anlayasınız. Həçça pin çıxışlarını belə dəyişib yoxlayın.

Kopyalayacağınız kodları sizə təqdim edirik:

#define echoPin 12 //Ultrasonik sensorun echo pini Arduino-nun 12-ci pininə
#define trigPin 13 //Ultrasonik sensorun trig pini Arduino-nun 13-cü pininə tanıdılır.
#define MotorR1 7
#define MotorR2 6
#define MotorRE 9  // Motor pinlərini tanıdırıq. Diqqət edin ki, motor pinlərini dəyişdiyiniz zaman burada da dəyişməyi unutmayasınız.
#define MotorL1 5
#define MotorL2 4
#define MotorLE 3



long zaman, uzaqliq; //zaman ve uzaqlıq adı ilə iki dəyişən tərtib edirik.

void setup() {


  // ultrasonik sensor Trig pininden səs dalğaları göndərdiği üçün OUTPUT (Çıxış),
  // bu dalğaları Echo pini ilə geri aldığı üçün INPUT (Giriş) olarak göstərilir.
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  pinMode(MotorL1, OUTPUT);
  pinMode(MotorL2, OUTPUT);
  pinMode(MotorLE, OUTPUT); //Motorlarımızı çıxış olarak göstəririk.
  pinMode(MotorR1, OUTPUT);
  pinMode(MotorR2, OUTPUT);
  pinMode(MotorRE, OUTPUT);


  Serial.begin(9600);

}

void loop() {


  digitalWrite(trigPin, LOW); //sensör deaktiv edildi
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); //Sensora səs dalğası buraxması üçün əmr verildi
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW); //Yeni dalğaların buraxılmaması üçün trig pini LOW vəziyyətinə gətirildi

  zaman = pulseIn(echoPin, HIGH); //ses dalğasının geri dönməsi üçün keçən zaman ölçülür
  uzaqliq = sure / 29.1 / 2; //ölçülen zaman uzaqlığa çevrilir

  Serial.println(uzaqliq);

  if (uzaqliq < 15) // Uzaqlıq 15-dən kiçikdirsə,
  {
    geri();  // 150 ms geri get
    delay(150);
    sag();  // 250 ms sağa dön
    delay(250);
  }
  else {  // deyilsə,
    ireli(); // irəli get
  }

}



void ireli(){  // Robotun irəliyə doğru hərəkət etməsi üçün funksya yaradırıq.

  digitalWrite(MotorR1, HIGH); // Sağ motorun irəliyə doğru hərəkəti aktiv edilsin
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hərəkəti deaktiv edilsin
  analogWrite(MotorRE, 150); // Sağ motorun sürəti 150

  digitalWrite(MotorL1, HIGH); // Sol motorun irəli doğru hərəkəti aktiv edilsin
  digitalWrite(MotorL2, LOW); // Sol motorun geri hərəkəti deaktiv edilsin
  analogWrite(MotorLE, 150); // Sol motorun sürəti 150
  
  
}


void sag(){ // Robotun sağa dönmesi üçün funksya yazırıq.

  digitalWrite(MotorR1, HIGH); // Sağ motorun irəliyə doğru hərəkəti aktiv edilsin
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hərəkəti deaktiv edilsin
  analogWrite(MotorRE, 0); // Sağ motorun sürəti 0 (Motor dayandı)

  digitalWrite(MotorL1, HIGH); // Sol motorun irəli hərəkəti aktiv edilsin
  digitalWrite(MotorL2, LOW); // Sol motorun geri hərəkəti deaktiv edilsin
  analogWrite(MotorLE, 150); // Sol motorun sürəti 150
  
  
}


void geri(){ // Robotun geriyə hərəkəti üçün funksya yazırıq.

  digitalWrite(MotorR1, LOW); // Sağ motorun irəli hərəkətetməsi deaktiv edilir
  digitalWrite(MotorR2, HIGH); // Sağ motorun geri hərəkətetməsi aktivləşdirilir
  analogWrite(MotorRE, 150); // Sağ motorun sürəti 150

  digitalWrite(MotorL1, LOW); // Sol motorun irəli hərəkətetməsi deaktiv edilir
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hərəkətetməsi aktivləşdirilir
  analogWrite(MotorLE, 150); // Sol motorun sürəti 150
  
}