Arduino ve C# MetroFramework ile Ultrasonic Mesafe Sensörü (HC-SR04)

watch_later 1/22/2016
Ultrasonik mesafe sensörlerinde genelde 4 ya da 5 pin bulunmaktadır. 4 pini olan sensörlerde  Vcc , Trig , Echo , Gnd pinleri bulunur.  5 pini olan sensörlerde ise ayrıca bir de OUT çıkışı bulunmaktadır.
 Ultrasonik mesafe sensörlerinin çalışma mantığı ise şu şekildedir:
1. Vcc + 5V’a bağlanır ve GND gerekli topraklama pinine bağlantı yapılarak sensör aktif hale getirilir.
2. Trig pinine 5V’luk digital HIGH çıkışı verilir ve sensörün kulağımızın duymayacağı frekansta ses dalgası üretmesini sağlanır.
3. Trig pinine digital HIGH çıkışı verildiği anda Echo pininden de HIGH çıkışı alınır.
4. Gönderilen ses dalgası herhangi bir cisme çarparak geri yansır ve yansıyan ses sensör tarafından algılandığı anda Echo pininden ikinci bir HIGH çıkışı verilir.


HC-SR04 Zaman Çevrimi 
Ultrasonik Mesafe Sensörü Uygulama Alanları (Utrasonic Distance Sensor Application Areas)
Tüm katı ve sıvı cisimler ultrasonik dalgayı cok iyi oranda yansıtırlar.Hem katı hemde sıvı cisimlerden ultrasonik enerjinin %99u yansıtılır.Çok ufak oranlardaki enerji miktarı cisim tarafından emilir. Bundan dolayı sensörü çok çeşitli uygulamarlda sorunsuz kullanabilmemiz mümkündür.Ayrıca robotlarda da sıkça kullanımlaktadır.
Ultrasonik mesafe sensörleri çarpmalardan koruma sağlamak için kullanılır. Sensör sürekli yakınlık-uzaklık mesafe kontrol verilerini aktarır.  Endüstriyel kullanıcılar şunlardır:
1. Otomotiv
2. Otomasyon
3. Lojistik
4. Metal İşleme

Ultrasonik mesafe sensörleri malzeme ilmeklerin eğimi kontrol  için kullanılır. Esnek malzemeden yapılmış ilmeklerin kesintisiz çalışmasını kontrol eden algılama sistemlerinin bileşenleridir. Endüstriyel kullanıcıları şunlardır:
1. Kağıt ve Baskı
2. Kimyasallar
3. Tekstil
4. Metal İşleme
5. Paketleme

Ultrasonik Mesafe Sensörü Uygulama Alanları
Ultrasonik mesafe sensörleri engebeli yüzeyleri tespit etmek ve doğru mesafe verilerini aktarmak gibi benzersiz bir yeteneği vardır. Sensörler bir kap içindeki bir sıvının seviyesinin algılanması gerektiği pek çok uygulamada kullanılmaktadır. Endüstriyel kullanıcıları şunlardır:
1. Yiyecek ve içecek
2. Kimyasal
3. Su arıtma
4. Güç üretimi

Ultrasonik mesafe sensörleri tozlar, tahıl ve diğer yarı akışkan maddelerin değişen seviyeleri tespit edebilir. Endüstriyel kullanıcıları şunlardır:
1. Tarım
2. Kimyasallar
3. Paketleme
4. Sıvı Taşıma

Sinyal ile Mesafe Hesaplamaları (Signal  and Distance Calculation)
Mikrodenetleyici 4 mhz frekansında
Timer 1 us çözünürlüğünde
Mesafe:

x = V . t (ses hızı 340m/sn)
34000 cm/1000000 us (340000/1000000=1/29) olarak bulunur
x=t/29 olarak bulunur. (Ses gidip-geldiği için 2 ile çarpılır.)
x=t/58 (29*2=58)

Uygulama ile yapılmak istenen C# arayüzünden gönderilen ‘.’ Karakteriyle veri gönderimi başlayacak port üzerinde mesafe değeri DevExpress GaugeCircular kadranına değerler aktarılacaktır.

MetroFramework ile Kullanım Sayfaları

Arduino Sketch:
long zaman, mesafe;
char okunan;
int echoPin = 7,trigPin = 8; // Trig ve Echo pinleri

void setup()
{
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT); //çıktı
  pinMode(echoPin, INPUT);  //girdi
}
void loop()
{
  if (Serial.available() > 0) //Veri varsa
  {
    okunan = Serial.read();
    if (okunan = '.'); // okunan da '.' karakteri ise
    {
      digitalWrite(trigPin, LOW); 
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      mesafe = duration / 58; //hesaplaması yapılan değer  
      Serial.println(mesafe); /*mesafeyi serial port
          üzerinden C# arayüzüne aktar.*/
      delay(100);
    }
  }
}

C# Form Code:
using System;
using System.Windows.Forms;
using MetroFramework;
using MetroFramework.Forms;
using System.IO.Ports; //Önemli port kütüphanesi eklenmeli.

namespace ArduinoProject
{
    public partial class Form1 : MetroForm
    {
        SerialPort serialPort;
        public Form1()
        {
            InitializeComponent();
            serialPort = new SerialPort(); //Serial port nesnesi oluşturuldu.
            serialPort.BaudRate = 9600; //Baud hızı ayarlandı
        }

        private void metroButtonPlay_Click(object sender, EventArgs e)
        {
            timerArduino.Start();
            try
            {
                serialPort.PortName = metroTextBoxPort.Text; //Portu oku
                if (!serialPort.IsOpen) //Açık değilse
                    serialPort.Open();
            }
            catch (Exception ex)
            {
                MetroMessageBox.Show(this, "Birşeyler yanlış gitti.", "Hata aldınız.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void timerArduino_Tick(object sender, EventArgs e)
        {
            try
            {
                serialPort.Write("."); //Seriale '.' yaz gönder 
                int income = Convert.ToInt16(serialPort.ReadExisting()); //gelen değeri oku
                arcScaleNeedleComponent1.Value = income; // scale artar.

            }
            catch (Exception ex)
            {
                //MetroMessageBox.Show(this, "Birşeyler yanlış gitti.", "Hata aldınız.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void metroButtonStop_Click(object sender, EventArgs e)
        {
            timerArduino.Stop(); //Veri almayı bitir.
            serialPort.Close();
        }
    }
}


HC-SR04 Fritzing Şeması





Bir sonraki yazımda görüşmek üzere…



sentiment_satisfied Emoticon