C#.NET – Arduino Uygulamaları: HC-SR04 Ultrasonik Mesafe Sensörü Uygulaması

Merhaba arkadaşlar, bugün sizlerle Arduino ve benzeri kartlarda sıklıkla kullanılan HC-SR04 ultrasonik sensörü ile ilgili ufak bir uygulama paylaşacağım. Dilerseniz öncelikle HC-SR04 sensörünün çalışma mantığı ile başlayalım.

HC-SR04 Ultrasonik Mesafe Sensörü Çalışma Prensibi

Sensörümüz, 5V DC gerilim ve 15 mA’lik akım ile çalışmaktadır. 40 Hz’lik bir frekans değerine sahip olup, maksimum 4 m ve minimum 2 cm’lik bir menzili vardır.
Çalışma prensibine gelecek olursak, sensörün içerisinde bulunan trandüser (Bkz: Trandüser Nedir?)  ultrasonik sinyali/darbeyi iletir.
Sinyal cisme çarparak geri döner ve trandüser tarafından alınır. Trandüser tarafından gönderilen bu sinyalin cisme gidiş ve dönüş zamanı sensörle cismin mesafesine göre orantılanır. Evet, ultrasonik sensörünün çalışma prensibi temelde bu sisteme dayanmaktadır. (Ayrıntılı açıklama için tıklayınız.
Devreye ait şema ve program içi görüntüler aşağıda verilmiştir. Ayrıca yazı sonunda verilen video ile programın çalışmasını genel olarak göstermeye çalıştım. Yapmış olduğum uygulama bir önceki yazımda anlattığım Potansiyometre Uygulaması ile benzerlik göstermektedir. Sensörün ve Arduino bağlantıları kısaca şöyledir;

Vcc = +5V, Gnd = Gnd, Trig = 11.Pin, Echo = 10.Pin

Untitled Sketch_bb

banlantıVar

Arduino Kodları

long sure;
long mesafe;
char m;
//kullanacağımız değişkenleri tanımlıyoruz

#define echoPin 10 //echo ve trig pinleri istediğimiz pine göre tanımlıyoruz
#define trigPin 11

void setup()
{
 Serial.begin(9600); //haberleşmeyi başlatıyoruz
 pinMode(trigPin,OUTPUT);
 pinMode(echoPin,INPUT);
}

void loop()
{
 if(Serial.available()>0) //seri port ile gelen değişken kontrolü
 {
 m=Serial.read(); //değişken gelmiş ise bu değişkeni okuyoruz
 if(m='e') //bu gelen değişken e ise aşağıdaki işlemleri gerçekleştiriyoruz
 {
 digitalWrite(trigPin,LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin,HIGH);
 delayMicroseconds(10);
 
 digitalWrite(trigPin,LOW);
 sure=pulseIn(echoPin,HIGH); //süreyi hesaplıyoruz
 mesafe=sure/58.2; //mesafeyi hesaplıyoruz
 Serial.println(mesafe);
 delay(200); 
 }
 }
}

C# Kodları (SerialPort’u projenize eklemeyi unutmayınız.)


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports; //ilk eklenmesi gereken kod (: 

namespace Arduino_HCSR04_Uygulamasi
{
 public partial class Form1 : Form
 {
 SerialPort sPort; //SerialPort nesnemizi oluşturuyoruz.
 public Form1()
 {
 InitializeComponent();
 sPort = new SerialPort();
 sPort.BaudRate = 9600; //oluşturulan nesnenin haberleşme hızını ayarlıyoruz
 }

 private void btnBaglan_Click(object sender, EventArgs e)
 {
 timer1.Start(); //timerı başlatıyoruz
 try
 {
 sPort.PortName = txtPort.Text; //txtPort içerisindeki değeri seri port ismimize atıyoruz. İkiside string, convert'e gerek yok.
 if (!sPort.IsOpen) //şart sağlanıyorsa seri port açılarak aşağıdaki işlemler gerçekleşiyor
 {
 sPort.Open();
 lblSonuc.Visible = true;
 lblSonuc.Text = "Bağlantı Kuruldu";
 lblSonuc.ForeColor = Color.Green;
 }
 }
 catch (Exception) //herhangi bir hataya karşı try/catch bloğunu kullanıyoruz
 {
 lblSonuc.Visible = true;
 lblSonuc.Text = "Bağlantı Kurulamadı";
 lblSonuc.ForeColor = Color.Red;
 }
 }

 //durdur butonu için gerekli kodları yazıyoruz
 private void btnDurdur_Click(object sender, EventArgs e)
 {
 timer1.Stop();
 sPort.Close();
 lblSonuc.Visible = true;
 lblSonuc.Text = "Bağlantı Sonlandırıldı";
 lblSonuc.ForeColor = Color.Red;
 txtPort.Text = ""; //durdurma işleminden sonra port ismi, mesafe değeri ve bar oranı sıfırlanıyor
 txtMesafe.Text = "";
 progressBar1.Value = 0;
 }

 private void timer1_Tick(object sender, EventArgs e)
 {
 try
 {
 sPort.Write("e"); //seri port üzerinden veri yazıyoruz
 int bilgi = Convert.ToInt32(sPort.ReadExisting()); //bu veriyi convert edip sayısal değere dönüştürüyoruz
 txtMesafe.Text = bilgi.ToString(); //elde edilen bilgi değeri mesafe textbox'ının içerisine string'e çevrilerek yazılıyor.
 progressBar1.Value = Convert.ToInt32(txtMesafe.Text); //txtMesafe içerisindeki değer progressBar'ın anlayacağı sayısal değere dönüştürülüyor
 System.Threading.Thread.Sleep(60);
 }
 catch (Exception)
 {
 
 }
 }
 }
}

 

Uygulama Videosu

Uygulama hakkındaki sorularınızı konuyu cevaplayarak veya mail atarak sorabilirsiniz arkadaşlar.

Bir sonraki yazımda görüşmek dileğiyle hoşçakalın.

11 Comments

  • faseli Cevapla

    c# ile arduinoyu entegre etmen hoş olmuş , bunun yanında monitörün penceresinin yanında aynı zaman da bir lcd ekranda da görüntü vermen analog ortam için güzel olur . Arduino bir derya içine dalmak sa hoş 🙂 başarılar .

    • Eren Uyanık Cevapla

      Teşekkür ederim Faseli. Dediğin gibi Arduino başka bir dünya. Elimden geldiğince vakit ayırmaya çalışıyorum 🙂

  • faseli Cevapla

    arada vakit bulursam ben de uğraşıyorum şu dersler bir bitsin dahada yoğunlaşacam bunun üzerinde , plc sistemlerinin bile entegre edildiğine şahit oldum arduino ile daha ne kabiliyetleri var Allah bilir 🙂

  • ramazan Cevapla

    merhaba sızı ulasabılcegım bı g mail felan yok mu bseyler sorcam

    • Eren Uyanık Cevapla

      Teşekkürler, yardımcı olabildiysem ne mutlu bana.

  • tarsus haber Cevapla

    Güzel bir anlatım olmuş. Teşekkürler. Size bir soru sormak istiyorum. Dirençler + mı – mi uca bağlanır. Daha ilk ders olan led yakmak da bir çok sitede gördüm ki kimisi – bacağa kimisi + bacağa bağlamış doğru olan hangisi acaba?

    • Eren Uyanık Cevapla

      Merhaba, öncelikle yorumunuz için teşekkür ederim. Sorunuza gelecek olursam;
      Pratik uygulamada bunun tam bir etkisini görmek mümkün değil. Bir devre üzerinde elektronların -‘den +’ya aktığı bilinir. Buna karşılık devre akımının ise +’dan -‘ye aktığı kabul edilir. Direnç gibi bir elemanı akıma karşı kullanabilmek için hangi yol tercih edilmeli açıkçası bende emin olamıyorum. Fakat ben şahsen genelde – uca bağlamayı tercih ediyorum.

  • Yılmaz Cevapla

    ben ultrasonik sensör ve servo motor ile radar projesi yapıcam ama bu projenin c# kodları nasıl olur bilmiyorum bu uygulamayı yapan varsa kodları paylaşabilirmi acaba şimdiden teşekkürler

Bir cevap yazın

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