Arduino İle Labirent Çözen Robot Yapımı

Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ tarafından herhangi birisini referans alırsa, labirenttin çıkışını bulacaktır. Bu işlem sadece labirentin çözümünün temeli. Peki labirent yolunda ilerlerken yolun bittiğini ve hangi tarafa dönmesini nasıl anlayacak ? . İşte bu noktada iki sensör daha devreye girecek. Birinci sensör öne bakarak sürekli mesafeyi kontrol edecek ve yolun bitip bitmediği anlaşılacak. Diğer sensör ise diğer duvarı takip edecek. Kısacası sensörler sol ön ve sağ tarafları kontrol edecek. Sağ ve sol sensörler duvarın devamlılığını kontrol edecek. Örneğin sol tarafta boşluk var iken sağ tarafta duvar varsa ve ön taraf da boş ise robot ileri hareket edecektir. Robotun karşılaşacağı her durum için ayrı bir senaryo oluşturularak robotun hareketleri belirlenecek.

Malzemeler:

  • Arduino Uno
  • 3 Adet Hc-Sr04 Ultrasonik Sensör
  • L293D Motor Sürücü
  • Robot Kiti ( 2 DC Motor, Robot Şasesi , Sarhoş Tekerlek)
  • Batarya

Devre Şeması:

Devre şemasına bakarak bağlantıları yapalım. Motor sürücünün 8. pini motor volatjı 16. pini ise 5v lojik voltajdır. Aşağıdaki şekilden de pinlerine bakabilirsiniz.

Sensörleri aşağıdaki şekildeki gibi konumlandırın.

Arduino Kodu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#define sol_motor_hiz 11 // Sol motor hız pini
#define sag_motor_hiz 10 // Sağ motor hız pini
#define sol_motor_1 8 // Sol motor pin 1
#define sol_motor_2 9 // Sol motor pin 2
#define sag_motor_1 7 //Sağ motor pin 1
#define sag_motor_2 6 // Sağ motor pin 2
 
intsag_sensor_echo = A0;// sağ sensör
intsag_sensor_trigger = A1;// sağ sensör
intsol_sensor_echo = A2;// sol sensör
intsol_sensor_trigger = A3;// sol sensör
inton_sensor_echo = A4; // Ön sensör
inton_sensor_trigger = A5; // Ön sensör
 
voidsetup()
{
pinMode(on_sensor_trigger, OUTPUT);
pinMode(on_sensor_echo, INPUT);
pinMode(sol_sensor_trigger, OUTPUT);
pinMode(sol_sensor_echo, INPUT);
pinMode(sag_sensor_trigger, OUTPUT);
pinMode(sag_sensor_echo, INPUT);
pinMode(sol_motor_hiz, OUTPUT);
pinMode(sag_motor_hiz, OUTPUT);
pinMode(sol_motor_1, OUTPUT);
pinMode(sol_motor_2, OUTPUT);
pinMode(sag_motor_1, OUTPUT);
pinMode(sag_motor_2, OUTPUT);
delay(5000);
}
 
voidloop()
{
longon_sensor_zaman, sol_sensor_zaman, sag_sensor_zaman, sag_mesafe, sol_mesafe, on_mesafe;
digitalWrite(on_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(on_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(on_sensor_trigger, LOW);
on_sensor_zaman = pulseIn(on_sensor_echo, HIGH);
on_mesafe = on_sensor_zaman/29/2;
digitalWrite(sol_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sol_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(sol_sensor_trigger, LOW);
sol_sensor_zaman = pulseIn(sol_sensor_echo, HIGH);
sol_mesafe = sol_sensor_zaman/29/2;
digitalWrite(sag_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sag_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(sag_sensor_trigger, LOW);
sag_sensor_zaman = pulseIn(sag_sensor_echo, HIGH);
sag_mesafe = sag_sensor_zaman/29/2;
analogWrite(sol_motor_hiz, 0);
analogWrite(sag_motor_hiz, 0);
analogWrite(sol_motor_1, 0);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 0);
 
if(on_mesafe >8)
{
if(sag_mesafe >7 && sag_mesafe< 13)
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 150);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
if(sag_mesafe >=13)
{
analogWrite(sol_motor_hiz, 255);
analogWrite(sag_motor_hiz, 60);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
if(sag_mesafe <=7)
{
analogWrite(sol_motor_hiz, 60);
analogWrite(sag_motor_hiz, 255);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
}
if(sol_mesafe <=20 && sag_mesafe>20 && on_mesafe <=8) { sag();}
if(sol_mesafe >20 && sag_mesafe>20 && on_mesafe <=8) { sag(); }
if(sag_mesafe <=20 && sol_mesafe>20 && on_mesafe <=8) { sol(); }
if(sag_mesafe<=20 && sol_mesafe<=20 && on_mesafe<=8) { tam_donus(); }
}
 
voidsol()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 0);
analogWrite(sol_motor_2, 255);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
delay(700);
}
 
voidsag()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 255);
analogWrite(sag_motor_2, 0);
delay(800);
}
 
voidtam_donus()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 255);
analogWrite(sag_motor_2, 0);
delay(1200);
}

 

Kaynak : Robimek

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir