Arduino Ultrasonik Radar Projesi
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.
Proje Malzemelerimiz
Projenin Malzemelerini Satın Al
İlk önce projemizin devresini kurun aşağıdaki şekilde hazırlayın düzgün görünmesi açısından breadboard üzerinde hazırladık siz isterseniz kullanamayabilirsiniz.
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.
// Proje Hocam - Radar Projesi // Murat DURAN - V2 #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.
// Proje Hocam - Radar Projesi // Murat DURAN - V2 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(); }
Merhaba Murat BEy
Projeniz arduino radar çok başarılı teşekkür ederim iki konuda sorum olacaktı
1- 40 cm e kadar ölçüm yapılıyor daha uzak mesafe mesela (100 metre 200 metre) için ne yapmamız gerekiyor
2- bu radarı wifi veya blutood ile usb bağlantısı olmadan çalışanı varmı böyle bir proje yayınlamayı düşünüyormusunuz
teşekkür ederim
100 – 200 metre mesafeli sensör varmı bilgim yok.Bizim kullandığımız sensörler maksimum 3-5 metre mesafeli.Ultrasonik sensör de 2-3 metreye kadar ölçüm yapabiliyor ama net sonuçları genelde 40 cm den düşükken veriyor o yüzden 40 cm olarak ayarlandı.Wifi veya Bluetooth ile başka biryerden veri alınıp bilgisayara yazdırılabilir ilerleyen günlerde bununla ilgili bir uygulama yapıp paylaşırız
Wifi veya Bluetooth uygulamasını sabırsızlıkla bekliyoruz
teşekkürler
hocam kodu yukledım arduıno ya dıgerıde tamam. çalıştı ama cubuk hızı çok yavaş ve izi siyah. bunun sebebi arduıno da sensor baglı degıl bu olabilirmi ?
çok güzel bir proje elinize sağlık, ben bu projeyi proje ödevinde yapacağım ama biraz farklılık katmalıyım mevcut projeye ne gibi bi değişiklik uygulayabilirim
teşekkür ederim
Alarm ekleyebilirsiniz, menzilde bir hedef gördüğünde buzzer çalar.Sensörden gelen verileri kablosuz olarak uzaktaki bilgisayara akrarabilirsiniz.
ben birşey daha sormak istiyorum elimdeki arduino mega değil onun bi küçüğü acaba olurmu..
Arduino UNO da olur.
hocam ekrandaki goruntuyu alabilmek olusturabilmek icin hangi programi kullanmak lazim
saygilarimla
Processing programını kullanmanız gerekiyor. Buradan indirebilirsiniz : https://processing.org/download/
Çok güzel ve faydalı bir paylaşım olmuş. Teşekkürler
İyi güzelde bu radar değil sonar.
Bu uygulamada port okuma kullandınız anladığım kadarıyla,peki port okuyarak gelen bilgilere göre istediğimiz görsel üzerinde (prosesing kodlarıyla) değişiklik yapabilir miyiz? Hazır nesneler yerine prosesingde bizim programladığımız nesneleri kullanarak ?Bir uygulamamam var buna benzer 3Dmax programı kullanmam gerekiyor ama bu program daha kolaymış.
Sitenizi keşfettiğim için mutluyum.Yazarınız olmak isterim ama biraz yoğunum bu aralar,kontrol kaleminde yazıyorum .
Murat Bey ben devreyi yazdığınız kodlar aracılığıyla yaptım öncelikle teşekkür ederim fakat ben diğer arkadaşlar gibi devreyi biraz daha geliştirmek istiyorum bu yüzden radar bir cismi görünce bu şekilde tüm ekranı kaplama yerine yuvarlak halka gibi kalsın ve radar döndükçe o nokta cisim orada ise o noktada orada kalsın daha sonra if komutu ile yapmaya çalıştım ama yapamadım yazılım konusunda iyi değilim maalesef ben arduino lazer modülü aldım farklı bir servo ile şunu yapmak istiyorum benim radarım bir cismi alğıladıgında diger servom o bölgeye dönsün ve lazerim ışık yaksın ve hedef görüldüğünde buzzerdan ses almak istiyorum bunların kodlaması nasıl yapılacak ve bir sorum daha var ben bunu kamera görüntüsü ile de pc ye aktarmak istiyorum bunları nasıl sağlarım kodları benimle paylaşabilirseniz çok memnun kalırım teşekkürler iyi çalışmalar
merhabalar benim sorularım olacakta acaba uzaklıgı nasıl değiştirebilirim programda bide radar nesne yakaladgında nokta koymasını istiyorum ordan engel gidene kadar o nokta kalsın nasıl yapılabılır yardımcı olurmusunuz
murat hocam bnm prosesing de basta yeşil sonra kırmızı ençubuk işaretler olarak çıkıo yardımcı olur musunuz lütfen
Hocam iyi günler Bluetooth üzerinden veriyi pc’ye nasıl aktarabiliriz.
Emeğinize sağlık çok güzel bir uygulama olmuş.
Bu devreyi CCS C de PIC18F4550 kullanarak yapmaya çalışıyorum ama processing programında bir türlü haberleşme sağlayamadım. Aygıt yöneticisinde mikrodenetleyici sorunsuz çalışıyor ancak yapamadım bir türlü. CCS C ile CDC haberleşme yaptım. Ardiuno HID olarak mı tanımlı? İlk denemem diyebiliriz USB portunu ama o da hüsran oldu.
Merhaba murat hocam bu projenin kütüphanelerini nereden bulabilirim.
Projede sadece servo motor kütüphanesi var oda zaten arduino programı içerisinde yüklü geliyor.
murat hocam jumper kabloların türü nedir =?
jumper kablo türünden neyi kastettiğinizi anlamadım , dişi erkek olayınımı diyorsunuz
evet hocam 🙂
4 tane dişi – erkek kablo , 3 tanede erkek-erkek kablo kullanman yeterlidir
Hocam bunu uno r3 de yapsak enerji sıkıntısı olurmu
Hayır hiç bir sıkıntı olmaz
hocam bu ultrasonik radarda usb kablosunu nasıl kablosuz yapalirim
2 adet arduino kullanıp alıcı verici devresi kurmanız gerekiyor.
hocam micro servoyu arduino nun hangi pinine bağlıyoruz bide nasıl kablosuz yapabiliriz *?
servo pini dijital 12 – kablosuz yapmak için 2 tane arduino ve 2 tane bluetooth kullanıp haberleştirmen lazım.
HCSR-04 Ultrasonik Sensörü 400 cm e kadar ölçüm yaptığı yazıyor datasheetde ama videoda 40 cm e kadar demişsiniz ölçümü 400 cm e çıkaramazmıyız
kodlarda düzenleme yaparak 400 cm i ölçebilirsin
hocam illede arduino mega şartmı normal bir arduino uno r3 lede yapılamazmı acaba en kısa zamanda sorumu cevaplarsanız çok memnun olurum benim için çok önemli bir soru cevabınıda acele almam lazım
Hayır mega şart değil uno ile yapabilirsiniz hatta nano ile bile yapabilirsiniz
C:\Users\tugay\Desktop\sketch_apr15a\sketch_apr15a.ino:3:19: warning: extra tokens at end of #include directive [enabled by default]
#include .
^
Çalışmanız programın 5.172 bayt (16 %) saklama alanını kullandı. Maksimum 32.256 bayt.
Global değişkenler belleğin 237 byte kadarını (11%) kullanıyor. Yerel değişkenler için 1.811 byte yer kalıyor. En fazla 2.048 byte kullanılabilir.
lakin bir kaç denemem rağmen bana bu hatayı verdi ne yapmalıyım ve alt kısımda proje dosyasını indir var o dosyayıda indirdim lakin ne yapılıcaını bilmiyorum o dosyalarıda ne yapmalıyım
Programda #include. ilk satırlardaki bu kodda nokta var onu silin yanlışlıkla eklenmiş bende hata vermiyor ama ondan olma ihtimali yüksek
evet hocam çok haklısınız noktayı sildikten sonra hata vermedi
lakin bendeki programda mı sorun var yoksa devre şemasındamı anlamış deilim çünki ben herşeyiyaptım hiç bir hata yoktum com portuna kadar ayarını yatpım tek tek seçtim ama yinede ne servo motor döndü nede sensörde bişeyler oldu yani java uygulamasında java ekranda taradı yanlız önüne bişey ler koyduum halde görmedi ne yapmalıyım
Bağlantıları doğru yaptınızmı ?
hocam kısa zamanda geri dönerseniz sevinirim çünkü benim için çok önemli bir şey bu bunun üzerine ödev tasarımı yapıyorum bilgisayar öğrencisiyim bende
bağlantılar tamamiyen doğru arduno programı htalıdır diye baştan siteden programı bile inddirdim lakin çalışmıyor tektek yaptım bağlantılarını
indirmek için proje dosyaları bırakmıssınız aşada ben onları indirmedim ne yapıcamı bilemedim lütfen yardım edin
hocam en altta bırakmış olduunuz prje dosyaları ne işe yarıyorne yapıcazonlarla
hocam lütfen ilgilenirmisiniz
Proje dosyasındaki kodları kullanın
Hocam pinlerin bağlantılarını yazabilirmisiniz Mobile kullandığım için göremiyorum
Hocam bağlantı şemalarını yazabilirmisiniz birkaç arkadaş gibi malesef bende mobilden yazabiliyorum.
Hocam nano veya pro miniye olurmu
projeyi processing’den çalıştırırken size() cannot be used hatası veriyor. devreyi doğru bağlayıp, arduino’ya yükledikten sonra processingde portu doğru olarak değiştirdim ve çalıştırdım fakat bu hatayı alıyorum.
Bağlantılar doğrumu ?
menzilde cisim olunca uyarı vermek için ne yapmalıyız?
bu radarın menzili ne kadar?
40 cm
hocam bu pojeyi matlab da gerçekleştiremezmiyiz ?
Hocam towerpro nun 3 pinin de arduino nun hangi pinlerine bağlandığını yazarmısınız
su altında da calışırmı
denemedim ama çalışmaz diye tahmin ediyorum
Hocam arduino mega r3 yerine arduino uno kulansak çalışır mı??
evet arduino uno ile çalıştırabilirsiniz
Hocam ben dün denedim uno ve nano nün depolama alanı yeterli olmuyor
çok defa uno kullandık problem başka bişeyden kaynaklı olabilir
hocam bu projeyi satın alma imkanı sağlamışsınız tamamen bağlantıları yapılmış halde mi gönderiyorsunuz yoksa parçalarını mı gönderiyorsunuz? bir de ben mekatronik 2. sınıf öğrencisiyim elektronik ve yazılım düzeyim en alt seviyede bu projeyi yapabilir miyim? veya siz gönderseniz de olur. bir de processing programı ile çalıştırmam kolay olur mu ?
Merhaba projeyi satın aldığınız size kurulu halde gönderiliyoruz.Size gönderdiğimiz CD deki prosesing programını çalıştırıp radarı kullanmaya başlayabilirsiniz.
yani devre kurulmuş arduino programlanmış halde geliyor öyle mi? hocam şahanesiniz benim yapmam gereken tek şey sanırım programı kurup radarı çalıştırmak kalıyor öyle mi? bir problem olursa yardımcı olursanız sevinirim yaklaşık olarak 1 ay içerisinde sipariş edeceğim. umarım ki bir problem olmaz ve bundan sonra tüm projelerde çevremdekileri size yönlendireceğim.
evet devre kurulmuş halde gönderiyoruz.bir problemle karşılaşırsanız müşteri hizmetleri numaramızdan ulaşabilirsiniz.
hocam bu projeyi wifi üzerinden verileri atmasını istiyorum acaba yardımcı olabilirmisiniz
PROJE İÇİN TEŞŞEKKURLER ELİME ULAŞTI GAYET BAŞARILI :))