Kullanılan Malzemeler;
Arduino Uno
BreadBoard
HC-SR04 Ultrasonik Mesafe Sensor
Buzzer
Servo Motor
Kullanılan Yazılımlar;
C
Java
Kullanılan Yazılım Programları;
Proccessing
Arduino
Yapımı
İlk başta Breadboard üzerinde - ve + hatlarını bağladım ve bu - ve + hatlarını Arduino üzerinde 5V ve Gnd pinlerine bağladım.
Daha sonrasında ise Hcsr sensörümün + ve -(Gnd) pinlerini breadboard üzerinde - ve + hatlarına yerleştirdim.
Hcsr Sensörümde yer alan Trig ve Echo pinlerimi Arduinoda 3 ve 2 nolu pinlere bağladım.
Buzzerımın + Hattını breadboard üzerinde + ya ve ayrıyetten aynı + hattını arduino uno üzerinde 8 nolu pine bağladım.
Micro Servomdan çıkan - ve + hatlarını da aynı şekilde breadboarda bağladıktan sonra Micro Servomdan çıkan sinyal hattını ise arduinoda 9 nolu pine bağladım.
Yaptığım projede gücü bilgisayardan alacağı için ekstra bir pil veya batarya bağlama gereksinimi duymadım.
Parçalarımı bağladıktan sonra yaptığım radar projesinde radarımın 180 derecelik bir açıyı taraması gerektiği için micro Servomun üzerine HCSR sensörümü tutucu yardımıyla oturtturdum.
Arduino Kodu;
#include <Servo.h> // Servonun kütüphanesini ekliyoruz
const int trigPin = 3; // hcsr-04ümdeki trig pinimi arduinoda tanımlıyorum.
const int echoPin = 2; // hcsr-04ümdeki trig pinimi arduinoda tanımlıyorum.
const int piezoPin = 8; // Buzzer'ımı arduinodaki pinime tanımlıyorum
long sure; // Sureyi burda int yerine long olarak tanımlıyorum.Long int'e göre daha uzun aralıklara sahip olduğu için long kullanıyorum.
int uzaklik; // Buradada uzaklıgı int olarak tanımlıyorum.
int nota[] = {262, 462, 862, 1662, 3262}; // Notalarımı giriyorum. Notaları kat kat seçtim ki mesafe degiştikçe ton belirgin olsun diye.
Servo myServo; // Servo motorun ayarlarını girecegimiz bir servo oluşturup tanımlıyorum
void setup() {
pinMode(trigPin, OUTPUT); // TriggerPini Çıkış olarak ayarlıyorum
pinMode(echoPin, INPUT); // Echo pini ise giriş olarak ayarlıyorum
Serial.begin(9600); // Seri monitorumü tanımlıyorum.
myServo.attach(9); // Oluşturdugum servoyu arduinodaki 9.pine baglıyorum.
}
void loop() {
// Bu kısımda servo motoru 15 dereceden 165 dereceye döndürüyorum.
for(int i=15;i<=165;i++){ // Buradaki for döngüsünde açı değişkenimi 15 dereceden 180 dereceye kadar 1,1 arttırarak döndürüp servonun pozisyonunu ayarlıyorum.
myServo.write(i); // Buradada oluşturduğum servoyu i olarak yazdır diyorum.
uzaklik = uzaklikhesabi(); // Her açı için uzaklığı hesaplıyorum
if(uzaklik > 40){ // Eğer uzaklık 40dan büyükse buzzerımı 10mili saniyede kontrol ederek sustur diyorum.
noTone(piezoPin);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 40 && uzaklik > 30){ // Burada ise eger uzaklık 40 ve 40dan küçük ise VE uzaklık 30dan büyük ise note 1 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin, nota[1]);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 30 && uzaklik > 20){ // Burada ise eger uzaklık 30 ve 30dan küçük ise VE uzaklık 20dan büyük ise note 2 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin,nota[2]);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 20 && uzaklik > 10){ // Burada ise eger uzaklık 20 ve 20dan küçük ise VE uzaklık 10dan büyük ise note 3 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin,nota[3]);
delay(10);
noTone(piezoPin);
delay(30);
}
else {
tone(piezoPin,nota[4]); // Bunun haricinde ise buzzerımı nota 4 olarak 10ms kontrol ederek çal diyorum.
delay(10);
noTone(piezoPin);
delay(30);
}
Serial.print(i); // Verdigim iyi(açıyı) Serial printe gönderip gösteriyorum.
Serial.print(","); // Lazım olacak ek karakterleri serial printe gönderip gösteriyorum
Serial.print(uzaklik); // Burdada uzaklığımı Serial printe gönderip gösteriyorum.
Serial.print("."); // Lazım olacak ek karakterleri serial printe gönderip gösteriyorum
}
for(int i=165;i>15;i--){ // Yukarda girdiğim for döngüsünü açının geri dönüşü için tekrar ediyorum.
myServo.write(i); // Tekrar oluşturduğum servoyu dönüş için i olarak yazdır diyorum.
uzaklik = uzaklikhesabi(); // Her açı için uzaklığı tekrar hesaplıyorum
if(uzaklik > 40){ // Tekrar Eğer uzaklık 40dan büyükse buzzerımı 10mili saniyede kontrol ederek sustur diyorum.
noTone(piezoPin);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 40 && uzaklik > 30){ // Tekrar Burada ise eger uzaklık 40 ve 40dan küçük ise VE uzaklık 30dan büyük ise note 1 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin, nota[1]);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 30 && uzaklik > 20){ // Tekrar Burada ise eger uzaklık 30 ve 30dan küçük ise VE uzaklık 20dan büyük ise note 2 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin,nota[2]);
delay(10);
noTone(piezoPin);
delay(30);
}
else if (uzaklik <= 20 && uzaklik > 10){ // Tekrar Burada ise eger uzaklık 20 ve 20dan küçük ise VE uzaklık 10dan büyük ise note 3 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.
tone(piezoPin,nota[3]);
delay(10);
noTone(piezoPin);
delay(30);
}
else { // Tekrar bunun haricinde buzzerımı nota 4 olarak 10ms kontrol ederek çal diyorum.
tone(piezoPin,nota[4]);
delay(10);
noTone(piezoPin);
delay(30);
}
Serial.print(i); // Tekrar Verdigim iyi(açıyı) Serial printe gönderip gösteriyorum.
Serial.print(","); // Tekrar ek karakterleri serial printe gönderip gösteriyorum
Serial.print(uzaklik); // Tekrar Burdada uzaklığımı Serial printe gönderip gösteriyorum.
Serial.print("."); // Tekrar ek karakterleri serial printe gönderip gösteriyorum
}
}
int uzaklikhesabi(){ // Uzaklık hesabimi tanımlıyorum.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// trig pinimizi 2 saniyeligine devre dışı bırak diyorum.
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // // Trigpini 10mikro saniye için aktif et sonrasında ise devre dışı bırak diyorum
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH); //echoPin den değer oku,ses dalgasının yol alma süresini mikrosaniyeye çevir diyorum
uzaklik= sure*0.034/2; // // Burada uzaklıgın formülünü girip uzaklıgı buluyoruz.Sureyi burda 2 ve 34 ile bölüyoruz.Buradaki 2 bizim "git-gel olayımız oluyor."İlk bşata gidiyor uzaklıgı x oluyor birde geri geliyor 2x oluyor bu yüzden 2 ile bölüyoruz. 34 ise hcsr-04'ün sabit degeridir.Ses dalgasının sıcaklıga göre hızı degişir bu degerde 34 olduğu için 34 alıyoruz.
return uzaklik; // uzaklıgı geri döndürüyorum
}
PROCCESING KODU;
import
processing.serial.*; //Proccesinge seri
haberleşme kütüphanesini ekliyorum
import
java.awt.event.KeyEvent; // seri porttan veri okuma kütüphanesini ekliyorum
import
java.io.IOException; // giriş ve
çıkışdaki istinaslarının kütüphanesini
ekliyorum
Serial myPort; //
Burada seri obje tanımı yapıyorum
String aci="";
// Açımı string yani metin değeri olarak tanımlıyorum
String
uzaklik=""; // Uzaklıgıda metin olarak tanımlıyorum
String
data=""; // Datamıda string olarak tanımlıyorum
String obje; //
Objemide string olarak tanımlıyorum
float pixsuzaklik;
// int komutu tam sayı üretirken float hem tam sayı ve kesirli sayılar
üretiyor. Burada pixsuzaklık olarak yazdığım kod cm olarak alınan uzaklığı
piksele çevirdigi için.Float olarak tanımlıyorum
int iaci,
iuzaklik; // Tam sayı değerinde açımı ve
uzaklığımı tanımlıyorum.
int index1=0; //
1.dizinimi tanımlıyorum
int index2=0; //
2.dizinimi tanımlıyorum
PFont orcFont; //
Burada yazı fontumu orc font olarak giriyorum
void setup() {
size (1366, 750);
// Ekran çözünürlügümüzü giriyorum
smooth();
myPort = new
Serial(this,"COM4", 9600); // Port yardımıyla seri haberleşmeye başla
Port:Arduinomuzu bilgisayara bagladıgımız yerin tanımlaması
myPort.bufferUntil('.'); // Seri porttan '.' karakterine kadar değer oku
diyorum.
}
void draw() { //
Bu kısım radarın göstergesinin çizildigi kısım.
fill(98,245,31);
// Burda renk tanımı yapıyorum. Bu renk kodları yeşil rengin kodları.
noStroke(); //Bu
kısımda radar göstergesinde açıyı gösteren kısımın eski halinin görünümünü
belirliyorum.
fill(0,12); //
rect(0, 0,
width, height-height*0.065); // Rect
komutuyla x,y genişlik ve uzunluk olarak diktörtgen çiziyoruz.
fill(98,245,31);
// Tekrar yeşil kodları tanıtıyorum
// Bu kısımda
radarın görüntüsü için fonksiyonları
çağırıyorum.
drawRadar(); // radarı çiz göster diyorum
drawLine(); // çizgileri çiz göster diyorum
drawObject(); //
objeyi çiz göster diyorum
drawText(); // ve yazıları çiz göster diyorum
}
void serialEvent
(Serial myPort) { // seri porttan veriyi
oku diyorum
data =
myPort.readStringUntil('.'); // Seri
porttan '.' karakterine kadar değer oku ve "data" değişkenine bu
karakterleri ata diyorum.
data =
data.substring(0,data.length()-1); // 0 konumundan uzunluga kadar veri oku ve
data olarak tanımla diyorum.
index1 =
data.indexOf(","); // Dizinde
',' karakterini bul ve "index1" değişkenine ata diyorum.
aci=
data.substring(0, index1); // "0" konumundan index1 in konumuna kadar
veri oku ve açı değeri olarak tanı diyorum
uzaklik=
data.substring(index1+1, data.length()); // "index1" in konumundan
"data" nın konumuna kadar veri oku ve mesafe olarak seri porta yolla
// String olarak
metin olarak atadığım açı ve uzaklık komutlarımı parseint kullanarak tam sayıya
çeviriyorum.
iaci =
parseInt(aci);
iuzaklik =
parseInt(uzaklik);
}
void drawRadar()
{ // Burda radar göstergesini
çiziyorum.
pushMatrix(); // Kordinat
sistemini matrixe gönderiyoruz.
translate(width/2,height-height*0.074);
// başlangıç koordinatlarını yeni konuma taşı diyorum.
noFill();
strokeWeight(2);
// Radardaki çizginin dış kalınlığını 2 yapıyorum.
stroke(98,245,31); // Dış kalınlıgın rengini yeşil yapıyorum.
//Yayların çizgilerini
çiziyorum
arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); //Burda
radardaki göstergelerin 1. yay çizgisini çiziyorum
arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); //Burda
radardaki göstergelerin 2. yay çizgisini çiziyorum
arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
//Burda radardaki göstergelerin 3. yay çizgisini çiziyorum
arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); //Burda
radardaki göstergelerin 4. yay çizgisini çiziyorum
// Açı
çizgilerini çiziyoruz
line(-width/2,0,width/2,0);
line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30))); //Burda radardaki 30 derecelik açının
çizgisini çiziyorum
line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60))); //Burda radardaki 60 derecelik açının
çizgisini çiziyorum
line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90))); //Burda radardaki 90 derecelik açının
çizgisini çiziyorum
line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120))); //Burda radardaki 120 derecelik açının
çizgisini çiziyorum
line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150))); //Burda radardaki 150 derecelik açının
çizgisini çiziyorum
line((-width/2)*cos(radians(30)),0,width/2,0);
popMatrix(); //
Yukarıda çizgidimiz kordinat sistemini ilk haline getiriyorum.
}
void drawObject()
{ // Burada objeyi çiziyorum
pushMatrix(); // Çizdigimiz
objeyi kordinat sistemine gönderiyorum
translate(width/2,height-height*0.074); // başlangıç koordinatlarını
yeni konuma taşı
strokeWeight(9); // Objenin
kalınlıgını 9 olarak yapıyorum
stroke(255,10,10); // Obje algılarsa rengini kırmızı atıyorum
pixsuzaklik =
iuzaklik*((height-height*0.1666)*0.025); // sensörden alınan mesafe değerini cm
den piksele çevir diyorum
// Mesafeyi 40
olarak belirtme
if(iuzaklik<40){ // Eger uzaklık 40dan küçükse
// açı ve
mesafeye göre objeyi çiz diyorum
line(pixsuzaklik*cos(radians(iaci)),-pixsuzaklik*sin(radians(iaci)),(width-width*0.505)*cos(radians(iaci)),-(width-width*0.505)*sin(radians(iaci)));
}
popMatrix(); //
Objeyi kordinat sistemindeki ilk haline geri getiriyorum.
}
void drawLine() {
// Burda çizgimi çiziyorum.
pushMatrix(); // Çizdigim çizgiyi kordinat
sistemine gönderiyorum
strokeWeight(9);
// Kalınlıgını 9 olarak giriyorum
stroke(30,250,60); // Çizgimin rengini yeşil olarak atıyorum.
translate(width/2,height-height*0.074); // başlangıç koordinatlarını
yeni konuma taşı diyorum
line(0,0,(height-height*0.12)*cos(radians(iaci)),-(height-height*0.12)*sin(radians(iaci)));
// açıya göre çizgi çek diyorum.
popMatrix(); //
Çizgiyi kordinat sistemindeki ilk haline getir diyorum
}
void drawText() {
// Burda yazıları ekranda çiz diyorum
pushMatrix();
// Yazdıgımız yazıları kordinat sisteminde göster diyorum
if(iuzaklik>40) { // Eger uzaklık 40dan büyükse
obje =
"Menzil Disinda"; //Objeyi "menzil dışında" olarak yazdır
diyorum
}
else { //
Haricinde, 40dan küçükse
obje =
"Menzil Icinde"; // Objeyi "menzil içinde" olarak göster
diyorum
}
fill(0,0,0); //
siyah rengiyle doldur diyorum.
noStroke(); //
Kalınlık bildirmiyorum.
rect(0,
height-height*0.0648, width, height); // rect komutuyla yazıların buluncagı
alana dikdörtgen çizdiriyorum
fill(220,20,15); // Burada yeşil renk tanımlıyorum ve
çizdiriyorum
textSize(15); //
Yazıların boyutlarını 15 olarak giriyorum
// Ekranda
buluan yazıların ayarlamaları
text("10cm",width-width*0.3854,height-height*0.0833); //
Radarın göstergesinde yazan "10cm" yazısının konumunu ayarlıyorum
text("20cm",width-width*0.281,height-height*0.0833); // Radarın göstergesinde yazan
"20cm" yazısının konumunu ayarlıyorum
text("30cm",width-width*0.177,height-height*0.0833); // Radarın göstergesinde yazan
"30cm" yazısının konumunu ayarlıyorum
text("40cm",width-width*0.0729,height-height*0.0833); //
Radarın göstergesinde yazan "40cm" yazısının konumunu ayarlıyorum
textSize(25); //
Radar göstergesinde olan yazıların boyutlarını 25 olarak tanımlıyorum
text("Obje:
" + obje, width-width*0.875, height-height*0.0277); // Yukarda gösterdigim objeyi Ekranın
altında Obje olarak yazdırıp konumunu ayarlıyorum
text("Aci: " + iaci
+" °", width-width*0.508, height-height*0.0277); // Yukarda gösterdigim açiyi Ekranın altında
açi olarak yazdırıp konumunu ayarlıyorum
text("Uzaklık: ",
width-width*0.26, height-height*0.0277);
// Yukarda gösterdigim uzaklıgı Ekranın altında uzaklık olarak yazdırıp
konumunu ayarlıyorum
if(iuzaklik<40) { // Eger
uzaklık 40dan küçükse
text(" " + iuzaklik + "
cm", width-width*0.225, height-height*0.0277); // Ölçülen uzaklıgı
gösterip yanına cm ekliyorum
}
textSize(15);
// Gösterdigim uzaklıgın boyutunu 15
olarak giriyorum
fill(220,20,15);
// Burdada rengini yeşil olarak giriyorum.
translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30))); // başlangıçda verdigim 30 derece açısını yeni konuma taşı diyorum.
rotate(-radians(-60)); //Radyan 60 olarak verdigim açıyı döndür diyorum
text("30°",0,0); // Yazdırdığım 30 derecelik açıya
"30" yaz diyorum
resetMatrix();
//Kordinat sistemini tekrar sıfırla diyorum
translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));
// başlangıçda verdigim 60 derece
açısını yeni konuma taşı diyorum.
rotate(-radians(-30)); //Radyan 30 olarak verdigim açıyı döndür diyorum
text("60°",0,0); //
Yazdırdığım 30 derecelik açıya "60" yaz diyorum
resetMatrix();
//Kordinat sistemini tekrar sıfırla diyorum
translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0763)-width/2*sin(radians(90)));
// başlangıçda verdigim 90 derece
açısını yeni konuma taşı diyorum.
rotate(radians(0)); // Yazdırdığım 0 derecelik açıyı döndür diyorum
text("90°",0,0); //
Yazdırdığım 30 derecelik açıya "90" yaz diyorum
resetMatrix();
//Kordinat sistemini tekrar sıfırla diyorum
translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));
// başlangıçda verdigim 120 derece
açısını yeni konuma taşı diyorum.
rotate(radians(-30)); //Radyan 30 olarak verdigim açıyı döndür diyorum
text("120°",0,0); //
Yazdırdığım 30 derecelik açıya "120" yaz diyorum
resetMatrix(); //Kordinat sistemini tekrar sıfırla diyorum
translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));
// başlangıçda verdigim 150 derece
açısını yeni konuma taşı diyorum.
rotate(radians(-60));
//Radyan 60 olarak verdigim açıyı döndür diyorum
text("150°",0,0); //
Yazdırdığım 30 derecelik açıya "150" yaz diyorum
popMatrix(); //Kordinat sistemini
tekrar sıfırla diyorum
}
Yaptığımız Radar Projesinde bir Lcd panel kullanmadığım için direk radarın görüntüsünü bilgisayar veya laptop ekranına yansıtacağım için Proccesind adlı uygulamayı kullandım ve Processing uygulamasında radarın görüntüsü bu şekilde;
Radarın Çalışması



