#include //Bluetooth kütüphanesi atıyoruz SoftwareSerial bt_iletisim(0, 1); // Tx,Rx Bluetooth için atatığımız pinleri belirliyoruz const int SensorSol =13; // IR takip sensörlerimizin pinlerini tanıtıyoruz const int SensorOrta =2; const int SensorSag =7; int sensol=0; // IR takip sensörlerini kumanda ile kontrol etmek için öncelikle bir değer atıyoruz. int sensag=0; int senorta=0; //L298N Bağlantısı const int sol_ileri = 3; // L298N'in IN1 Girişi const int sol_geri = 4; // L298N'in IN2 Girişi const int sol_hiz = 9; // L298N'in ENA Girişi const int sag_ileri = 5; // L298N'in IN3 Girişi const int sag_geri = 6; // L298'in IN4 Girişi const int sag_hiz = 10; // L298'in ENB Girişi //HC-SR04 Bağlantısı const int echoPin = 11; const int trigPin = 12; //HC-SR04 için süre ve mesafe diye iki fonksiyon atıyoruz int mesafe; long sure; int motorlar_hiz = 255; // Motorumuzun hız değişkenini tanımlıyoruz byte son_islem; // Yapılan son işlemi hafızada tutmak için atama yapıyoruz void setup() { pinMode(SensorSol, INPUT); //IR Sensörlerimizi giriş olarak tanımlıyoruz. pinMode(SensorOrta, INPUT); pinMode(SensorSag, INPUT); pinMode(sol_ileri, OUTPUT); //L298N motorlarını çıkış pini olarak tanımlıyoruz pinMode(sag_ileri, OUTPUT); pinMode(sol_geri, OUTPUT); pinMode(sag_geri, OUTPUT); pinMode(sol_hiz, OUTPUT); pinMode(sag_hiz, OUTPUT); pinMode(echoPin, INPUT); // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış), pinMode(trigPin, OUTPUT); // bu dalgaları Echo pini ile geri aldığı için INPUT (Giriş) olarak tanımlanır. digitalWrite(sol_ileri, LOW); //Araba başta çalışmaması için L298N pinlerine LOW(0) veriyoruz digitalWrite(sag_ileri, LOW); digitalWrite(sol_geri, LOW); digitalWrite(sag_geri, LOW); digitalWrite(sol_hiz, LOW); digitalWrite(sag_hiz, LOW); Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz. bt_iletisim.begin(9600); } void loop() { digitalWrite(trigPin, LOW); //sensör pasif hale getirildir delayMicroseconds(2); digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi delayMicroseconds(10); digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor mesafe = sure / 58.2; //ölçülen süre uzaklığa çevriliyor Serial.println(mesafe); if(mesafe<=25) // Eğer mesafe 25 küçük ise ilk araba yarım tur dönüp duruyor { sag(); delay(1000); dur(); } if (bt_iletisim.available()) //kumandadan sinyal geldiğinde, { char data = bt_iletisim.read(); // Gelen veriyi 'data' değişkenine kaydeliyor Serial.println(data); Serial.println(mesafe); if (data == '1') // İleri gidiyor { dur(); delay(10); ileri(); son_islem = 1; } else if (data == '2') //Geri gidiyor { dur(); delay(10); geri(); son_islem = 2; } else if (data == '3') //Sola gidiyor { dur(); delay(10); sol(); son_islem = 3; } else if (data == '4') //Sağ gidiyor { dur(); delay(10); sag(); son_islem = 4; } else if (data == '6') //Duruyor { dur(); } else if (data == '0') //Hızımızı artırıyoruz { motorlar_hiz = 200; } else if (data == '5') //Hızımızı düşüyoruz { motorlar_hiz = 150; } else if (data == 'G') { motorlar_hiz = 100 ; } else if (data == 'P') { motorlar_hiz = 250; } else if(data=='9') //Engelden kaçan robot kontrolüne giriliyor.. { while(1) { int mesafe_2; //HC-SR04 için süre ve mesafe diye iki fonksiyon atıyoruz long sure_2; digitalWrite(trigPin, LOW); //sensör pasif hale getirildir delayMicroseconds(2); digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi delayMicroseconds(10); digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi sure_2 = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor mesafe_2 = sure_2 / 58.2; //ölçülen süre uzaklığa çevriliyor char data_1=bt_iletisim.read(); //Tekrardan Data fonkiyonu oluşturuyoruz if (mesafe_2 < 15) // Uzaklık 15'den küçük ise, { geri_2(); // 150 ms geri git delay(150); sag_2(); // 250 ms sağa dön delay(250); } else if(mesafe_2>=15) // Uzaklık 15'den büyük ise, { // değil ise, ileri_2(); // ileri git } if(data_1=='6') // Komut gelince döngüden çıkılıyor.. { dur(); break; } } } else if(data=='8') //Şerit takip fonksiyonuna geçiş yapılıyor { while(1) { sensol=digitalRead(SensorSol); senorta=digitalRead(SensorOrta); sensag=digitalRead(SensorSag); char SensorSol=bt_iletisim.read(); if(sensol == 0 && senorta == 1 && sensag == 0){// Orta sensör çizgiyi gördüğünde robot ileri gitsin. ileri_1(); } if(sensol == 0 && senorta == 0 && sensag == 1){// Sağ sensör çizgiyi gördüğünde robot sağa dönsün. sag_1(); } if(sensol == 1 && senorta == 0 && sensag == 0){// Sol sensör çizgiyi gördüğünde robot sola dönsün. sol_1(); } if(SensorSol == '6') { dur(); break ; } } } } } //*********************************************************** void ileri() // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz. { digitalWrite(sol_ileri, 1); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, motorlar_hiz); analogWrite(sag_hiz, motorlar_hiz); } void geri() //Robotun geri hareketi için fonksiyon tanımlıyoruz. { digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 0); digitalWrite(sol_geri, 1); digitalWrite(sag_geri, 1); analogWrite(sol_hiz, motorlar_hiz); analogWrite(sag_hiz, motorlar_hiz); } void sol() //Robotun sola dönme hareketi için fonksiyon tanımlıyoruz. { digitalWrite(sol_ileri, 1); digitalWrite(sag_ileri, 0); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 1); analogWrite(sol_hiz, motorlar_hiz); analogWrite(sag_hiz, motorlar_hiz); } void sag() // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz. { digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 1); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, motorlar_hiz); analogWrite(sag_hiz, motorlar_hiz); } void dur() //Robotun durma hareketi için fonksiyon tanımlıyoruz. { digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 0); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, 0); analogWrite(sag_hiz, 0); } //*********************************************************************** void ileri_1() //Şerit takip için hızlarında azalma yapıyoruz. İleri gidiyor.IR Sensörü İçin.. { digitalWrite(sol_ileri, 1); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } void sol_1() //Şerit takip için hızlarında azalma yapıyoruz. Sola dönüyor.İleri gidiyor.IR Sensörü İçin.. { digitalWrite(sol_ileri, 1); digitalWrite(sag_ileri, 0); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 1); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } void sag_1() //Şerit takip için hızlarında azalma yapıyoruz. Sağa dönüyor.İleri gidiyor.IR Sensörü İçin.. { digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 1); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } //******************************************************************* void ileri_2(){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.Mesafe Sensörü İçin.. digitalWrite(sol_ileri, 1); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 0); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } void sag_2(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.Mesafe Sensörü İçin.. digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 1); digitalWrite(sol_geri, 1); digitalWrite(sag_geri, 0); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } void geri_2(){ // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz.Mesafe Sensörü İçin.. digitalWrite(sol_ileri, 0); digitalWrite(sag_ileri, 0); digitalWrite(sol_geri, 1); digitalWrite(sag_geri, 1); analogWrite(sol_hiz, 150); analogWrite(sag_hiz, 150); } void son_isleme_devam_et() //Son yapılan işlem hazıfada tutuluyor { if (son_islem == 1) { ileri(); } else if (son_islem == 2) { geri(); } else if (son_islem == 3) { sol(); } else if (son_islem == 4) { sag(); } }