-MİNİ RADAR PROJESİ-
bugünkü projemizde kendi mini radar istasyonumuzu oluşturucaz.
MALZEMELER
*HCSR-04(ultrasonic mesafe sensörü)
*servo motor
*arduino uno
*jumper kablo
Bu projemizde ultrasonik radar yapacağız, bildiğiniz üzere askeri radarlar radyo frekanslarının yansıtılmasıyla ölçülmektedir.Çok geniş bir alanda tarama yapan bu radarlar hava araçlarının tespitinde kullanılır.Bizde bu projede buna benzer ama daha küçük ölçeklisini yapacağız.Bizim radarımız radyo dalgalarıyla değil ses dalgalarıyla ölçüm yapmaktadır.Bizim yaptığımız radar 150º lik bir alanda tarama yapabilmektedir.
Projemiz arduino ve prosesing tabanlı çalışmaktadır.Arduino bölümü c++ ile yazıldı.Prosesing bölümü ise java ile hazırlandı.Kodları açık kaynaklı olarak paylaşmaktayız bu sayede geliştirme yapabilirsiniz.
Projenin devresini kurduktan sonra usb ile bilgisayarınıza arduino kartınızı bağlayın , daha sonra bağlandı ibaresini görünce prosesing programını çalıştırın , program com portu hatası verirse yanlış portu yazmışsınız demektir.Bu yüzden kendi portunuzu girmeniz gerekiyor aşağıdaki prosesing kodunda bunu açıkladık.
Projenin arduino kodları aşağıdadır bu kodları kopyalayıp arduino kartınıza yüklemeniz gerekiyor.
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
|
// ALTIKOD-Mini radar projesi // MİRAÇ ÇAKAR #include <Servo.h>. // Ultrasonik Sinyal pinleri const int trigPin = 10; const int echoPin = 11; long duration; int distance; Servo myServo; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); myServo.attach(12); // Servo motor sinyal pini } void loop() { // 15 derece ile 165 derece arasında dön for ( int i=15;i<=165;i++){ myServo.write(i); delay(30); distance = calculateDistance(); Serial.print(i); Serial.print( "," ); Serial.print(distance); Serial.print( "." ); } for ( int i=165;i>15;i--){ myServo.write(i); delay(30); distance = calculateDistance(); Serial.print(i); Serial.print( "," ); Serial.print(distance); Serial.print( "." ); } } int calculateDistance(){ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance= duration*0.034/2; return distance; } |
Projenin prosesing kodları , burada 23. satırda com portunu kendinize göre ayarlayın,Arduino kartınız hangi porttan haberleşiyorsa onu yazın.
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
131
|
// ALTIKOD-Mini radar projesi // MİRAÇ ÇAKAR import processing.serial.*; // kütüphane entegresi import java.awt.event.KeyEvent; import java.io.IOException; Serial myPort; String angle= "" ; String distance= "" ; String data= "" ; String noObject; float pixsDistance; int iAngle, iDistance; int index1= 0 ; int index2= 0 ; PFont orcFont; void setup() { size ( 1366 , 700 ); smooth(); myPort = new Serial( this , "COM3" , 9600 ); // Com portunu seçin myPort.bufferUntil( '.' ); } void draw() { fill( 98 , 245 , 31 ); noStroke(); fill( 0 , 4 ); rect( 0 , 0 , width, 1010 ); fill( 98 , 245 , 31 ); // yeşil renk drawRadar(); drawLine(); drawObject(); drawText(); } void serialEvent (Serial myPort) { data = myPort.readStringUntil( '.' ); data = data.substring( 0 ,data.length()- 1 ); index1 = data.indexOf( "," ); angle= data.substring( 0 , index1); distance= data.substring(index1+ 1 , data.length()); iAngle = int (angle); iDistance = int (distance); } void drawRadar() { pushMatrix(); translate( 683 , 700 ); noFill(); strokeWeight( 2 ); stroke( 98 , 245 , 31 ); // draws the arc lines arc( 0 , 0 , 1300 , 1300 ,PI,TWO_PI); arc( 0 , 0 , 1000 , 1000 ,PI,TWO_PI); arc( 0 , 0 , 700 , 700 ,PI,TWO_PI); arc( 0 , 0 , 400 , 400 ,PI,TWO_PI); // draws the angle lines line(- 700 , 0 , 700 , 0 ); line( 0 , 0 ,- 700 *cos(radians( 30 )),- 700 *sin(radians( 30 ))); line( 0 , 0 ,- 700 *cos(radians( 60 )),- 700 *sin(radians( 60 ))); line( 0 , 0 ,- 700 *cos(radians( 90 )),- 700 *sin(radians( 90 ))); line( 0 , 0 ,- 700 *cos(radians( 120 )),- 700 *sin(radians( 120 ))); line( 0 , 0 ,- 700 *cos(radians( 150 )),- 700 *sin(radians( 150 ))); line(- 700 *cos(radians( 30 )), 0 , 700 , 0 ); popMatrix(); } void drawObject() { pushMatrix(); translate( 683 , 700 ); strokeWeight( 9 ); stroke( 255 , 10 , 10 ); // kırmızı renk pixsDistance = iDistance* 22.5 ; // 40 cm ye kadar ölçer if (iDistance< 40 ){ line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)), 700 *cos(radians(iAngle)),- 700 *sin(radians(iAngle))); } popMatrix(); } void drawLine() { pushMatrix(); strokeWeight( 9 ); stroke( 30 , 250 , 60 ); translate( 683 , 700 ); line( 0 , 0 , 700 *cos(radians(iAngle)),- 700 *sin(radians(iAngle))); popMatrix(); } void drawText() { pushMatrix(); if (iDistance> 40 ) { noObject = "Out of Range" ; } else { noObject = "In Range" ; } fill( 0 , 0 , 0 ); noStroke(); rect( 0 , 1010 , width, 1080 ); fill( 98 , 245 , 31 ); textSize( 25 ); text( "10cm" , 800 , 690 ); text( "20cm" , 950 , 690 ); text( "30cm" , 1100 , 690 ); text( "40cm" , 1250 , 690 ); textSize( 40 ); text( "Object: " + noObject, 240 , 1050 ); text( "Angle: " + iAngle + " °" , 1050 , 1050 ); text( "Distance: " , 1380 , 1050 ); if (iDistance< 40 ) { text( " " + iDistance + " cm" , 1400 , 1050 ); } textSize( 25 ); fill( 98 , 245 , 60 ); translate( 390 + 960 *cos(radians( 30 )), 780 - 960 *sin(radians( 30 ))); rotate(-radians(- 60 )); text( "30°" , 0 , 0 ); resetMatrix(); translate( 490 + 960 *cos(radians( 60 )), 920 - 960 *sin(radians( 60 ))); rotate(-radians(- 30 )); text( "60°" , 0 , 0 ); resetMatrix(); translate( 630 + 960 *cos(radians( 90 )), 990 - 960 *sin(radians( 90 ))); rotate(radians( 0 )); text( "90°" , 0 , 0 ); resetMatrix(); translate( 760 + 960 *cos(radians( 120 )), 1000 - 960 *sin(radians( 120 ))); rotate(radians(- 38 )); text( "120°" , 0 , 0 ); resetMatrix(); translate( 840 + 900 *cos(radians( 150 )), 920 - 960 *sin(radians( 150 ))); rotate(radians(- 60 )); text( "150°" , 0 , 0 ); popMatrix(); } |