Arduino İle Kendi Kendine (Otonom) Park Eden Araba Yapımı

61 55.298

Kendi Robotunu Yap projelerimizin bu bölümünde arduino otonom park eden araba projesini yapacağız. Otonom park etme işleminde belirli varsayımlara göre algoritmayı oluşturup sensörleri konumlandırmamız gerekiyor. Varsayımlarımız bu projemizde şu şekilde olacak. Senaryoda yolun sol kısmı duvar ve park alanlarından oluşacak. Videoda da göreceğiniz üzere arabanın sol tarafında 2 tane, arka ve ön kısmında da birer tane olmak üzere toplamda 4 tane sensörle etrafı algılamaktadır. Araba harekete başladığında sol taraftaki sensörler sürekli mesafe ölçerek park alanına uygun genişlik ararlar. Her iki sensör de park için uygun mesafe tespit ederse park işlemi algoritması devreye girer. Bu projede arabanın nasıl park edeceği iki farklı yöntemden oluşuyor.

ürünü kurulu halde satın al

veya

demonte halde satın al

Sistemin Algoritması:

Arabanın sol kenarındaki iki sensörün ölçtüğü değer 15cm den küçük ise duvar olduğunu anlar ve ileri hareket eder.Bunu hafızasına kaydeder. Daha sonra park aramaya başlar.İleri giderken Kenardaki iki sensör sürekli ölçüm yapar ve bu ölçümler sonucu ikisinin de değeri aynı anda 15cm den büyük ise, nasıl park edeceğine karar vermesi gerekiyor.

Park Yöntemi Seçimi Algoritması
  • 1. durum : Eğer ölçülen değer arabanın eninden büyük ve arabanın uzunluğundan küçük ise paralel park sistemini çalıştıracak.
  • 2. durum : Eğer ölçülen değer arabanın uzunluğundan büyük ise robot dik şekilde park edecektir.
Paralel Park Etme Algoritması:

Bu durumda araba park alanını geçerek, kenardaki iki sensör tekrar duvar gördüğünde araba durur. Biraz geri gelir. ve sağa 45 derece döner. Geriye hareket ederken arka sensör ölçüm yaparak park alanına girer ve sola doğru dönemeye başlar. Sola hareketi sırasında kenarlardaki sensörler sürekli ölçüm yapar ve iki sensörün ölçtüğü değer birbirine eşit oluncaya kadar sola dönmeye devam eder. Eşit olduğunda durur. Ön sensör ölçüm yapar ve 10 cm den küçük olana kadar ileri gider. ve 10 cm den küçük ise durur. ve park etme işlemi sona erer.

Dik Park Etme Algoritması

Kenarlardaki sensörler aynı anda arabanın uzunluğundan fazla değer ölçmüş ise araba durur. ve sola 90 derece  dönüş yapar. Park alanına doğru hareket etmeye başlar. Bu esnada ön sensör sürekli ölçüm yapar ve ölçülen değer 10cm den küçük ise araba durur. park işlemi tamamlanmış olur.

Malzemeler:
  • Arduino Mega
  • Adafruit Motor Shield
  • 4 Dc Motorlu Robot Kit
  • 4 Adet HC-SR04 Ultrasonik Sensör
  • LM 393 Kızılötesi Hız Sensörü
  • Lipo Pil ( 7.4V 850 mah yeterlidir)
  • Jumper Kablolar

Mekanik Kısım:

Sistemde bulunan kızılötesi sensör motorun devrini ölçmektedir. Bu sayede park ederken tekerleklerin tur sayısını ölçerek hatasız park etmesini sağlamaktır. Robot kitinizde enkoder disk yoksa ek olarak alıp takabilirsiniz. Burada dikkat edilmesi gereken nokta enkoder disk üzerindeki delik sayısıdır. Bu projedeki enkoder diskin delik sayısı 20 dir. Sizdeki farklı sayıda ise arabanın dönüşlerini tekrar ayarlamanız gerekiyor.

LM393 Hız sensörünü yukarıdaki şekildeki gibi yerleştiriniz. Enkoder disk deliklerinin hızasında olmasına dikkat ediniz. 

Sol kenardaki sensörleri yukarıdaki gibi konumlandırın. Sensörlerin köşelerde olması arabanın uzunluğuna göre park alanı bulmasını sağlamaktadır. Diğer iki sensörün birini öne diğerini de arkaya yerleştiriniz. 

Devre Şeması:

Ultrasonik Sensörlerin Pin Bağlantıları

Ön Sensör => Trig Pin : D34 , Echo Pin : D35

Sol Ön Sensör => Trig Pin : D36 , Echo Pin : D37

Sol Arka Sensör => Trig Pin : D38 , Echo Pin : D39

Arka Sensör => Trig Pin : D40 , Echo Pin : D41

Motor Shield Dc Motor Pin Bağlantıları

Sol Ön Motor => M4

Sağ Ön Motor => M3

Sol Arka Motor => M1

Sağ Arka Motor => M2

LM393 Hız Sensörü Pin Bağlantıları

VCC => 5V : OUT => D21 : GND => GND

 

Yazılım Kısmı:

Ultrasonik Sensör Kütüphanesi : Ultrasonic.zip

Arduino Yazılımı:
// Otonom Park Eden Araba
// Developed by Sezgin GÜL

//motorların tanımları
#include <AFMotor.h>
AF_DCMotor Sol_On_Motor(4);
AF_DCMotor Sag_On_Motor(3);
AF_DCMotor Sol_Arka_Motor(1);
AF_DCMotor Sag_Arka_Motor(2);
#include <Ultrasonic.h>

Ultrasonic ultrasonic_arka(40,41),ultrasonic_sol_arka(38,39),ultrasonic_sol_on(36,37),ultrasonic_on(34,35);
// ultrasomik sensörlerin tanımlamamalrı

#define Sol 0 //sol yön komutu
#define Sag 1 //sağ yön komutu
#define Ileri 2 //ileri yön komutu
#define Geri 3 //geri yön komutu
#define minimum_limit 15 //Arabanın genişliği (cm)
#define minimum_limit1 28 //arabanın uzunluğu (cm)

byte park_durumu = 0;
int sinyalpin = 21;
volatile int val;

int sayac = 0;
int guncel_durum = 0;
int onceki_durum = 0;

void say(int saydir)
{
for (int i = 0 ; i <= saydir; i+1)
{
val = digitalRead(sinyalpin);
if (val == LOW) {

guncel_durum = 0;
}
else {

guncel_durum = 1;
}

if(guncel_durum != onceki_durum)
{
if(guncel_durum == 1)
{
sayac = sayac + 1;
Serial.println(sayac);
i = i+1;
}
else
{
i = i ;
}

onceki_durum = guncel_durum;

}
if (i == saydir)
{

Sol_On_Motor.run(RELEASE);
Sag_On_Motor.run(RELEASE);
Sol_Arka_Motor.run(RELEASE);
Sag_Arka_Motor.run(RELEASE);

}

}

}

void motor_pinSetup()
{

Sol_On_Motor.run(RELEASE);
Sag_On_Motor.run(RELEASE);
Sol_Arka_Motor.run(RELEASE);
Sag_Arka_Motor.run(RELEASE);
}

// Hareket fonksiyonları
void Robot_Hareket(byte motor, byte spd)
{
if (motor == Ileri)
{
Sol_On_Motor.setSpeed(spd);
Sag_On_Motor.setSpeed(spd);
Sol_Arka_Motor.setSpeed(spd);
Sag_Arka_Motor.setSpeed(spd);
Sol_On_Motor.run(FORWARD);
Sag_On_Motor.run(FORWARD);
Sol_Arka_Motor.run(FORWARD);
Sag_Arka_Motor.run(FORWARD);

}
if (motor == Geri)
{
Sol_On_Motor.setSpeed(spd);
Sag_On_Motor.setSpeed(spd);
Sol_Arka_Motor.setSpeed(spd);
Sag_Arka_Motor.setSpeed(spd);
Sol_On_Motor.run(BACKWARD);
Sag_On_Motor.run(BACKWARD);
Sol_Arka_Motor.run(BACKWARD);
Sag_Arka_Motor.run(BACKWARD);

}
if (motor == Sol)
{
Sol_On_Motor.setSpeed(spd);
Sag_On_Motor.setSpeed(spd);
Sol_Arka_Motor.setSpeed(spd);
Sag_Arka_Motor.setSpeed(spd);
Sol_On_Motor.run(BACKWARD);
Sag_On_Motor.run(FORWARD);
Sol_Arka_Motor.run(BACKWARD);
Sag_Arka_Motor.run(FORWARD);

}

if (motor == Sag)
{
Sol_On_Motor.setSpeed(spd);
Sag_On_Motor.setSpeed(spd);
Sol_Arka_Motor.setSpeed(spd);
Sag_Arka_Motor.setSpeed(spd);
Sol_On_Motor.run(FORWARD);
Sag_On_Motor.run(BACKWARD);
Sol_Arka_Motor.run(FORWARD);
Sag_Arka_Motor.run(BACKWARD);

}

}

void Robot_Dur()
{
Sol_On_Motor.run(RELEASE);
Sag_On_Motor.run(RELEASE);
Sol_Arka_Motor.run(RELEASE);
Sag_Arka_Motor.run(RELEASE);
}

// Park yeri araması
bool Park_Yeri_Kontrol()
{

long on_Sensor = ultrasonic_on.Ranging(CM);
long sag_Sensor = ultrasonic_sol_on.Ranging(CM);
long sag_arka_Sensor =ultrasonic_sol_arka.Ranging(CM);

if( (sag_Sensor <= minimum_limit)&&(sag_arka_Sensor <= minimum_limit)&&(park_durumu == 0))
{
Robot_Hareket(Ileri, 100);
park_durumu = 1; Serial.println(park_durumu);
}

if((sag_Sensor > minimum_limit)&&(sag_Sensor < minimum_limit1)&&(sag_arka_Sensor > minimum_limit)&&(sag_arka_Sensor < minimum_limit1)&&(park_durumu == 1))
{
Robot_Hareket(Ileri, 100);
park_durumu = 2;Serial.println(park_durumu);
}

if((sag_Sensor >= minimum_limit1)&&(sag_arka_Sensor >= minimum_limit1)&&(park_durumu == 1))
{
/* Dik Park Etme Kararı */
Robot_Dur() ;
delay(500);
park_durumu = 10;Serial.println(park_durumu);
}

if((sag_Sensor <= minimum_limit)&&(sag_arka_Sensor <= minimum_limit)&&(park_durumu == 2))
{
/* Paralel Park Etme Kararı */
park_durumu = 3; Serial.println(park_durumu);
}

return park_durumu;
}

void Park_bul()
{
Park_Yeri_Kontrol();
if(park_durumu == 3 )
{
Robot_Dur();Serial.println(park_durumu);
delay(400);
park_durumu = 4;
}
if(park_durumu == 4 )
{

Robot_Hareket(Geri,120);
say(18);
Robot_Dur();Serial.println(park_durumu);
delay(500);
Robot_Hareket(Sag,150);
say(9);
Robot_Dur();
delay(500);
park_durumu = 5;
}
if(park_durumu == 5)
{

Robot_Hareket(Geri,120);
long arka_Sensor = ultrasonic_arka.Ranging(CM);Serial.println(arka_Sensor);

if(arka_Sensor>0 && arka_Sensor <= 13)
{
Robot_Dur();
delay(400);
park_durumu = 6;
}
return arka_Sensor;
}

if(park_durumu == 6)
{
Robot_Hareket(Sol,150);
long sag_Sensor = ultrasonic_sol_on.Ranging(CM); Serial.println(sag_Sensor);
long sag_arka_Sensor = ultrasonic_sol_arka.Ranging(CM); Serial.println(sag_arka_Sensor);

if(sag_Sensor == sag_arka_Sensor)
{
Robot_Dur();
park_durumu = 7;
}

return sag_Sensor,sag_arka_Sensor;
}
if(park_durumu == 7)
{
long on_Sensor = ultrasonic_on.Ranging(CM);

if(on_Sensor<=6)
{
Robot_Dur();
park_durumu = 8;
}
else
{
Robot_Hareket(Ileri,100);
}
return on_Sensor;
}
if (park_durumu ==10)
{

Robot_Hareket(Sol,180);
say(14);
Robot_Dur();
delay(500);
park_durumu = 7;

}

}

void setup()
{
Serial.begin(9600);
attachInterrupt(5, say, CHANGE);
pinMode (sinyalpin, INPUT) ;

motor_pinSetup();
}

void loop()
{
Park_bul();
}

Projenin Bütün Yazılımını Buradan İndirebilirsiniz.>> Otonom Park Eden Araba

Kendi Robotunu Yap projelerimizin bu bölümünde otonom park eden araba yapımından bahsettik. Bir sonraki projede görüşmek üzere..

Bunlar da İlgini Çekebilir
Cevap bırakın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

61 Yorum
  1. Andy

    Hi sir. what are the lengths you used for the
    ultrasonic_on.Ranging(cm)
    ultrasonic_sol_on.Ranging(cm);
    ultrasonic_sol_arka.Ranging(cm);

    ultrasonic_arka.Ranging(cm)

  2. Andy

    Hi. Can you post which sections i need to put in the values for the length and width of the car

  3. hüseyinm

    Aşağıdaki hataları alıyorum yardımcı olurmusunuz

    Arduino:1.8.8 (Windows 10), Kart:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega
    2560)”
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino: In function ‘void Park_bul()’:
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino:242:10: warning: return-statement with a value, in function
    returning ‘void’ [-fpermissive]
    return arka_Sensor;
    ^
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino:257:21: warning: return-statement with a value, in function
    returning ‘void’ [-fpermissive]
    return sag_Sensor,sag_arka_Sensor;
    ^
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino:272:10: warning: return-statement with a value, in function
    returning ‘void’ [-fpermissive]
    return on_Sensor;
    ^
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino: In function ‘void setup()’:
    C:\Users\Hp\Desktop\meb robot\Arduino-ile-Kendi-Kendine—Otonom—Park-Eden-Arabamaster\
    otonom_park\otonom_park.ino:291:33: warning: invalid conversion from ‘void (*)(int)’ to
    ‘void (*)()’ [-fpermissive]
    attachInterrupt(5, say, CHANGE);
    ^
    In file included from sketch\otonom_park.ino.cpp:1:0:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:150:6: note:
    initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’
    void attachInterrupt(uint8_t, void (*)(void), int mode);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘void RobotMotorBoard::begin()’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:37:21:
    error: ‘MUXA’ was not declared in this scope
    uint8_t MuxPins[]={MUXA,MUXB,MUXC};
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:37:26:
    error: ‘MUXB’ was not declared in this scope
    uint8_t MuxPins[]={MUXA,MUXB,MUXC};
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:37:31:
    error: ‘MUXC’ was not declared in this scope
    uint8_t MuxPins[]={MUXA,MUXB,MUXC};
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:38:26:
    error: ‘MUX_IN’ was not declared in this scope
    this->IRs.begin(MuxPins,MUX_IN,3);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:39:10:
    error: ‘MUXI’ was not declared in this scope
    pinMode(MUXI,INPUT);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘uint8_t RobotMotorBoard::parseCodename(uint8_t)’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:136:11:
    error: ‘TK1’ was not declared in this scope
    return TK1;
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:138:11:
    error: ‘TK2’ was not declared in this scope
    return TK2;
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:140:11:
    error: ‘TK3’ was not declared in this scope
    return TK3;
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:142:11:
    error: ‘TK4’ was not declared in this scope
    return TK4;
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘void RobotMotorBoard::motorsWrite(int, int)’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:192:15:
    error: ‘IN_A1’ was not declared in this scope
    analogWrite(IN_A1,speedR);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:193:15:
    error: ‘IN_A2’ was not declared in this scope
    analogWrite(IN_A2,0);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:195:15:
    error: ‘IN_A1’ was not declared in this scope
    analogWrite(IN_A1,0);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:196:15:
    error: ‘IN_A2’ was not declared in this scope
    analogWrite(IN_A2,-speedR);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:200:15:
    error: ‘IN_B1’ was not declared in this scope
    analogWrite(IN_B1,speedL);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:201:15:
    error: ‘IN_B2’ was not declared in this scope
    analogWrite(IN_B2,0);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:203:15:
    error: ‘IN_B1’ was not declared in this scope
    analogWrite(IN_B1,0);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:204:15:
    error: ‘IN_B2’ was not declared in this scope
    analogWrite(IN_B2,-speedL);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘virtual void RobotMotorBoard::motorsStop()’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:212:14:
    error: ‘IN_A1’ was not declared in this scope
    analogWrite(IN_A1,255);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:213:14:
    error: ‘IN_A2’ was not declared in this scope
    analogWrite(IN_A2,255);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:215:14:
    error: ‘IN_B1’ was not declared in this scope
    analogWrite(IN_B1,255);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:216:14:
    error: ‘IN_B2’ was not declared in this scope
    analogWrite(IN_B2,255);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘void RobotMotorBoard::_readTrim()’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:271:23:
    error: ‘TRIM’ was not declared in this scope
    int value=analogRead(TRIM);
    ^
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp: In
    member function ‘void RobotMotorBoard::_refreshMotorAdjustment()’:
    C:\Program Files (x86)\Arduino\libraries\Robot_Motor\src\ArduinoRobotMotorBoard.cpp:278:33:
    error: ‘TRIM’ was not declared in this scope
    motorAdjustment=map(analogRead(TRIM),0,1023,-30,30)/100.0;
    ^
    exit status 1
    Error compiling for board Arduino/Genuino Mega or Mega 2560.
    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  4. Ali

    arduino ve motor sürücü arasındaki bağlantı paylaşılmamış rica etsem alabilir miyim

  5. Ali

    motor sürücüyü ve arduinoyu nasıl bağnacakğı anlatılmamış, rica etsem görselini ya da pin girişlerini alabilirmiyim

  6. Uğur

    Böyle hatalar alıyorum sebebi nedir ?
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino: In function ‘void Park_Find()’:
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino:231:16: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino:245:31: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino:259:18: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino: In function ‘void setup()’:
    C:\Users\UĞUR CAVNAR\Documents\Arduino\sketch_nov27a\sketch_nov27a.ino:273:43: warning: invalid conversion from ‘void ()(int)’ to ‘void ()()’ [-fpermissive]
    In file included from sketch\sketch_nov27a.ino.cpp:1:0:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note: initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’
    void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
    ^~~~~~~

    1. Erkutay

      Sorunu çözebildiniz mi acaba Uğur Bey? Aynı sorunu yaşıyorum

    2. Nur

      Merhaba bu projeyi yapmaya çalışıyoruz yardımcı olabilecek var mı?
      Normal uno kart ile yapılabilir mi hız sensörü de yok.

  7. Giray

    Merhaba, aşağıdaki hatayı alıyorum ve robot güç düğmesini açınca ışık yanmasına rağmen çalışmıyor.

    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino: In function ‘void Park_bul()’:
    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino:217:8: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    return arka_Sensor;
    ^~~~~~~~~~~
    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino:232:19: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    return sag_Sensor,sag_arka_Sensor;
    ^~~~~~~~~~~~~~~
    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino:247:8: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
    return on_Sensor;
    ^~~~~~~~~
    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino: In function ‘void setup()’:
    C:\Users\GKAYNAK\Desktop\Autonomous_vehicle\Autonomous_vehicle.ino:265:31: warning: invalid conversion from ‘void (*)(int)’ to ‘void (*)()’ [-fpermissive]
    attachInterrupt(2, say, CHANGE);
    ^
    In file included from sketch\Autonomous_vehicle.ino.cpp:1:0:
    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note: initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’
    void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
    ^~~~~~~~~~~~~~~

  8. musa

    merhabalar kodu arduinoya attığımda derlediğimde “arduino mega için derleme hatası” alıyorum port seçimim doğru kart seçimim doğru ama elimde arduino mega olmadığı takıp derleyemiyorum.Arduino kartı takılı olmadığı için mi hata alıyorum.

  9. Burak

    İyi günler derleme yap dedikten sonra bu problem çıktı nasıl düzelir

    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino: In function ‘void Park_bul()’:
    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino:238:10: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
       return arka_Sensor;
              ^~~~~~~~~~~
    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino:261:21: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
       return sag_Sensor,sag_arka_Sensor;
                         ^~~~~~~~~~~~~~~
    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino:273:10: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]
       return on_Sensor;
              ^~~~~~~~~
    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino: In function ‘void setup()’:
    C:\Users\CASPER\AppData\Local\Temp\Rar$DIa21124.421\otonom_park\otonom_park.ino:292:33: warning: invalid conversion from ‘void (*)(int)’ to ‘void (*)()’ [-fpermissive]
       attachInterrupt(5, say, CHANGE);
                                     ^
    In file included from sketch\otonom_park.ino.cpp:1:0:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note:   initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’
     void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
          ^~~~~~~~~~~~~~~

    1. Erkutay

      Burak Bey sorunu çözebildiniz mi ?

  10. Murat ATİLA

    Merhabalar
    Kodu derleme yaparken aşağıdaki hatayı veriyor
    exit status 1
    Arduino Mega or Mega 2560 kartı için derleme hatası.

    1. Murat ATİLA

      TEKRARDAN MERHABALAR
      MEGA SORUNUNU HALLETTİM
      ARABA ŞUAN SADECE DİK OLARAK PARK EDİLİYOR
      PARALEL PARK OLMUYOR
      YARDIMCI OLABİLİR MİSİNİZ

  11. rahul

    sir, pls explain the use of speed sensor and encoder .I didnt understand this

  12. Yousung Doh

    LM393 sensörü olmadan aynı kodu kullanamaz ve çalışamaz mıyım? LM393 sensörü olmadan sürüm kodunu istiyorum.

  13. mek39

    Araba hiç hareket etmiyor ve böyle bir hata alıyorum:

    C:\Users\gurka\Desktop\otonom_park\otonom_park.ino: In function ‘void setup()’:

    C:\Users\gurka\Desktop\otonom_park\otonom_park.ino:286:34: warning: invalid conversion from ‘void (*)(int)’ to ‘void (*)()’ [-fpermissive]

    attachInterrupt( 5, say, CHANGE);

    ^

    In file included from sketch\otonom_park.ino.cpp:1:0:

    C:\Users\gurka\Desktop\arduino\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note: initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’

    void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);

  14. Halil Seven

    Öncelikle elinize sağlık çok güzel bir proje tüm malzemeleri satın alıp kendim projeyi yaptım. Fakat şöyle bir sorum var öncelikle park yeri algılamasında bazen algılıyor bazen algılamıyor. Algılandığında ise mesela dikey parkta 90 derece dönmeli ama araç kafasına göre dönüyor bazen çok bazen az. Yardımcı olabilecek var mı?

  15. Yaman

    benim sol ön ve sol arka sensörlerin girişlerini voltaj değerlerini ölçtüğümde 0.68 degerini alıyorum diger sensörlerde 5.68 değerini alıyorum. Bide motor sürücünün çıkış voltaj değerlerini ölçtüğümde herhangi bir değer alamadım .

  16. Gökhan Tilki

    iyi günler kolay gelsin. Biz bitirme projesi olarak bu projeyi yapıyoruz bütün malzemeleri aldık mekanik kurulumu da tamamladık fakat kodları yüklediğimizde araba da hiçbir hareket olmuyor ne gibi bir hata olabilir acaba? Kod yüklenirken de hiçbir hata vermiyor. Yardımcı olursanız çok mutlu oluruz.

    1. Robimek

      Videodaki gibi park yeri oluşturun. Robotun sol taraftaki iki sensör duvarı aynı anda görmesi gerekmektedir. Duvara yakınlığı 15cm den az olmalı.

      1. GÖKHAN

        Dediğiniz gibi de yaptım fakat pili bağladıktan sonra çok zayıf bir ses dışında hiçbir tepki vermiyor

        1. Robimek

          Güç kaynağınız yetersiz olduğundan kaynaklanabilir. Koddaki motor hız değerlerini arttırın ya da güç kaynağı olarak 7.4v 1000 mah civarı lipo pil kullanın.

          1. GÖKHAN

            Sorunu anlamanıza yardımcı olabilir belki bizde mesela hız sensöründede herhangi bir ışık yanmıyor

    2. Gökhan Tilki

      hız sensörünün ışığı yanıyor ama siz de ki gibi yeşil değil sadece kırmızı yanıyor

      1. Robimek

        Gökhan bey, modül üreticileri farklı olduğundan ışık renkleri farklı olabilir. Enkoder diski çevirdiğinizde ışık yanıp sönüyorsa çalışıyor demektir.

        1. Gökhan Tilki

          sorunu görebilmeniz için sizinle nasıl bir iletişime geçebilirim ? video olarak size göstersem veya görüntülü arama tarzında nasıl bir şey yapabiliriz ?

        2. Faruk K.

          Benzer sıkıntı bende de var ses geliyor, ışık yanıp sönüyor dediğiniz gibi, sadece sol arka tekerlek dönmeye çalışıyor ama o da çok güçsüz havaya kaldırınca dönüyor sadece. 4 tane AA pil kullandım Lipo almadan çözemez miyiz acaba ?

        3. Gökhan Tilki

          herşey çalıştı sonunda tam anlamıyla parkı her seferinde düzgün yapmasa da yapıyor artık fakat birşey sormak istiyorum bu kodlar da kesme var mı?

    3. Mehmet Akif

      Hocam aynı şekilde bizimde bitirme projemiz siz hangi duruma geldiniz yapılabiliyor mu yada hiç bulaşmayalım mı bu arada Instagram adresinizi verirseniz tecrübeleriniz hakkında bilgi almak istiyorum

  17. tunahan

    Arduino:1.8.10 (Windows 10), Kart:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino: In function ‘void Park_bul()’:

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino:240:10: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino:257:21: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino:272:10: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino: In function ‘void setup()’:

    C:\Users\Tunahan KARAGÜL\Documents\Arduino\otonompark\otonompark.ino:291:31: warning: invalid conversion from ‘void (*)(int)’ to ‘void (*)()’ [-fpermissive]

    In file included from sketch\otonompark.ino.cpp:1:0:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:150:6: note: initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’

    void attachInterrupt(uint8_t, void (*)(void), int mode);

    ^~~~~~~~~~~~~~~

    bu hata mesajını alıyorum nasıl çözebilirim?

  18. Oğuzhan

    ‘class Ultrasonic’ has no member named ‘Ranging’
    hatasını veriyor bunun için ne yapmak gerekiyor

    1. Robimek

      Ultasonik sensör kütüphanesini eklemeniz gerekir. Buradan indirip ekleyebilirsiniz : https://www.robimek.com/wp-content/uploads/Ultrasonic.zip

  19. okan

    Bu proje için kaç adet hız sensörü lazım. Eğer bir tane yeterli ise hız sensörü hangi tekere takılmalı.

    1. Robimek

      Merhaba, bir adet hız sensörünü istediğiniz motorun enkoder diskine takabilirsiniz.

  20. Veysel

    Merhaba, otonom mayın tarama robotu yapmak istiyorum sitenizde bulamadım yardımcı olabilir misiniz rica etsem fikirlerinizi öğrenmek istiyorum.

  21. Batuhan

    byte park_durumu = 0;
    int sinyalpin = 21;
    volatile int val;

    int sayac = 0;
    int guncel_durum = 0;
    int onceki_durum = 0;

    void say(int saydir)
    {
    for (int i = 0 ; i <= saydir; i+1)
    {
    val = digitalRead(sinyalpin);
    if (val == LOW) {

    guncel_durum = 0;
    }
    else {

    guncel_durum = 1;
    }

    if(guncel_durum != onceki_durum)
    {
    if(guncel_durum == 1)
    {
    sayac = sayac + 1;
    Serial.println(sayac);
    i = i+1;
    }
    else
    {
    i = i ;
    }

    onceki_durum = guncel_durum;

    }
    if (i == saydir)
    {

    Sol_On_Motor.run(RELEASE);
    Sag_On_Motor.run(RELEASE);
    Sol_Arka_Motor.run(RELEASE);
    Sag_Arka_Motor.run(RELEASE);

    }

    }

    }

    void motor_pinSetup()
    {

    Sol_On_Motor.run(RELEASE);
    Sag_On_Motor.run(RELEASE);
    Sol_Arka_Motor.run(RELEASE);
    Sag_Arka_Motor.run(RELEASE);
    }

    Bu bölümde yaptığımız işlem tam olarak nedir ?

  22. atharv

    please tell me that in the command attachInterrupt(5,say,CHANGE) , nothing has been connected to the digital pin 5. can you explain it?

  23. Maria

    Projenin malzemelerini satın alırsak eğer , hepsi elimize ulaşacak mı ?

    1. Robimek

      Merhaba , Proje malzeme kiti, projeyi yapmak için gerekli bütün malzemeleri içermektedir.

  24. Mustafa BAĞCI

    ARDUİNO sürümü ile alakalı bir durum imiş. Yeni sürümde kodlar çalışıyor.
    Sezgin bey bu güzel çalışmanız çok teşekkür ediyorum.

  25. Mustafa BAĞCI

    Kod derlenince aşağıdaki hatayı veriyor:
    Arduino:1.6.5 Hourly Build 2015/05/14 11:25 (Windows 8.1), Kart:”Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    OtomatikPark.ino: In function ‘void Park_bul()’:
    OtomatikPark:219: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
    OtomatikPark:234: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
    OtomatikPark:249: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
    OtomatikPark.ino: In function ‘void setup()’:
    OtomatikPark:267: error: invalid conversion from ‘void (*)(int)’ to ‘void (*)()’ [-fpermissive]
    In file included from OtomatikPark.ino:8:0:
    C:\arduino-nightly\hardware\arduino\avr\cores\arduino/Arduino.h:141:6: error: initializing argument 2 of ‘void attachInterrupt(uint8_t, void (*)(), int)’ [-fpermissive]
    void attachInterrupt(uint8_t, void (*)(void), int mode);
    ^
    return-statement with a value, in function returning ‘void’ [-fpermissive]

    Rapor daha fazla veri içermeli
    “Derleme sırasında ayrıntılı çıktı göster”
    Dosya > Tercihler’de etkinleştirilmiş.

  26. Muhammet

    Öncelikle böyle bir proje yaptığınız için teşekkür ederim. Yapabilirsem aynısını yapmak istiyorum.Kullanılan motor shield hangisi acaba? Ben hangisi olduğunu çözemedim de 🙂
    1 Numara
    robotistan.com/arduino-motor-surucu-shield-arduino-motor-driver-shield

    2 Numara
    robotistan.com/adafruit-motorstepperservo-shield-for-arduino-v2-kit

    3 Numara
    robotistan.com/adafruit-dcstep-motor-shield

    1. BARIŞ

      İlk Baştaki Kardeşim

  27. Burak

    Arduino uno ile yapılabilirmi

  28. yusu

    4 ultrasonic hepsinden deger alamıyoruz nasıl sorunu cözecegiz en fazla 2 tane ultrasonicten deger alabiliyoruz.

  29. sinan

    herşeyi yaptık tek sorun 4 ultrasonic aynı anda algılamyor en fazla 2 tane algılıyor

  30. my

    öncelikle tebrik ederim elinize sağlık. Adafruit Motor Shield yerine l293d shild kullanabilirmiyiz ?

  31. yusuf

    2 dc motorlu robot kit için en değerleri nsıl olur?

  32. yusuf

    2 DC motorlu kit,boy kodları nasıl olur?

  33. mustafa özdemir

    Öncelikle böyle bir projeyi paylaştığınız için teşekkürler. fakat kodu yüklemeye çalışınca hata veriyor.

  34. kubilay

    acaba arduino uno kullanabilirmyiz bu projede yoksa mega kullanmak şart mı?

  35. yusuf

    böylesi bir projeyi paylaştığınız için öncelikle teşekkür ederim
    bu kodu alıp derlediğimde hatalar çıkıyor kütüphanelerden başka birşey eklemelimiyim

  36. sinan

    4 dc motorlu robot kit yerine 2 dc motorlu robot kit kullansak işe yarar mı?

    1. Sezgin GÜL

      Kullanabilirsin Sinan. Sol ve sağ taraftaki motorlar ikili olarak aynı hareketi yapıyor. Kodda değişiklik yapmak istemiyorsan bir motor sol diğerini de sağ girişlerden birine takabilirsin. Diğer önemli nokta ise robotun boy ve en değerleridir. Arabanın boyutları farklı ise kodda belirtilen değişkenlere yeni değerleri yazmalısın.

      1. Umut küçük

        Merhaba bu projeyi başlatma tuşu nedir yardimci olurmusunuz.

  37. Evren

    Çok güzel , lm393 ve kızılötesi vericilerden 4 tane mi kullandınIz? O kısmın mantığını biraz açıklarsanız çok sevinirim…amaç 4 tekerleğinde aynı hızda gitmesini sağlamak mı? Pwm yerine bu şekilde mi hız ayarlaması yapıyoruz2?

    1. Sezgin GÜL

      sadece bir motora bağlamanız yeterli. Amaç ne kadar hızda gitmesi değil ne kadar mesafe gideceğini belirlemek Örneğin dikey parkta 90 derece dönmesi için tekerleklerin ne kadar tur atması gerektiğini kodda belirtmek. Enkoder delik sayısına göre her delik arası mesafeyi bir adım olarak adlandırabiliriz. Tıpkı step motorlardaki gibi . Kodda da ne kadar adım atacağını belirterek o kadar hareket etmesini sağladım.

  38. ÖZgür

    Tebrik ederim güzel bir çalışma olmuş. elinize sağlık. Paylaşım için de ayrıca teşekkür ederim.

    1. Sezgin GÜL

      teşekkürler. rica ederim.

      1. Cem

        Sezgin yaptım fakat yatay park etmiyor.