Blog Detail

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

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

Write a comment