Alışverişlerinizi Robotistan’dan Yapın

Faydalı içerikler oluşturarak size yardımcı olmak istiyoruz. Aynı zamanda uygun fiyat, hızlı teslimat ve kaliteli hizmetle Robotistan.com’da hizmet veriyoruz. Siz de alışverişlerinizi robotistan.com‘dan yaparak bize yardımcı olabilirsiniz 🙂

Arduino ve C# ile Mesafe Ölçer – 4. Ders

Arkadaşlar merhaba, bu dersimizde HC-SR04 sensörü ile ölçtüğümüz mesafeyi seri haberleşme yardımıyla anlık olarak bilgisayar üzerinden takip edebileceğimiz bir proje gerçekleştireceğiz.

Çalışma Diyagramı

Bu dersimizde aynı 2. derste olduğu gibi bir veri alma işlemi gerçekleştireceğiz.

Mesafe Ölçer Uygulaması

Dijital metre projemizdeki uygulamasına benzer bir uygulama yapacağız. Yalnızca uzaklık değerini LCD ekrandan değil de tasarladığımız arayüz üzerinden göreceğiz. Kullanacağımız sensör ile ilgili daha detaylı bilgiye de buraya tıklayarak ulaşabilirsiniz.

İlgili yazı >> Elektronik Metre Nasıl Yapılır? – (Dijital Metreyi Kendin Yap!)

Gerekli bağlantıları yaparak ve kodumuzu yükleyerek işe başlayalım.

Gerekli Malzemeler:

Mesafe Ölçer Bağlantı Şeması

Arduino Kodu:

 const int trigPin = 5, echoPin = 6;
 long uzaklik;
 long sure;
 void setup() {
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
   Serial.begin(9600);
 }
 void loop() {
 digitalWrite(trigPin, LOW);
   delayMicroseconds(5);
   digitalWrite(trigPin, HIGH);
   delayMicroseconds(10);
   digitalWrite(trigPin, LOW);
   sure = pulseIn(echoPin, HIGH);
   uzaklik = sure / 2 / 29.1;
   if(uzaklik > 200)
   uzaklik = 200;
 Serial.println(uzaklik);
   delay(100);
 }

C# Arayüz Tasarımı

C# Form Tasarımı

Bu projede önceki projelerde kullandığımız araçlardan farklı bir araç kullanmayacağız. Her zaman olduğu gibi port isimlerini görüntüleyeceğimiz bir comboBox’ı , seri portu açıp kapamak için kullanacağımız 2 adet butonu ve mesafeyi anlık olarak takip edebileceğimiz bir progressBar’ı form üstüne taşıyorum. Bununla beraber form üzerinde 3 adet de label bulunuyor. Son olarak serialPort nesnesini de ekleyerek tasarımı tamamlıyorum.

Bu projede Arduino’dan veri okuyacağız. Bu yönden 2. dersteki yazımıza oldukça benziyor. Fakat bu sefer veri okumasını farklı bir yöntem kullanarak gerçekleştireceğiz. O yazıda timer kullanarak verileri almıştık. Bu sefer DataReceived eventini kullanarak seri portu devamlı olarak dinleyeceğiz. Bu sayede veri kaybı veya donma gibi sorunların yaşanma ihtimalini azaltmış olacağız. Bu anlamda timer kullanarak yapılacak bir okuma işleminden daha sağlıklı olduğunu söyleyebiliriz.

Bildiğiniz gibi bir olay(event) için kod yazmak istediğimiz zaman tasarım kısmından istediğimiz olaya çift tık yaparak kod kısmına gidiyorduk. Bu sefer bu işlemi kod içinde gerçekleştireceğiz. DataReceived  olayını(eventini) tek satır kod ile tanımlıyoruz:

serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPort1_DataReceived);

Ardından fonksiyonumuzu yazıyoruz. Burada seri port üstünden okuduğumuz değerleri fonksiyon dışında tanımlamış olduğumuz string tipindeki değişkene eşitliyoruz. Sonrasında Invoke() içinde bir event oluşturarak bu event içerisine label ve progressBar’ın gelen değere göre değişmesini sağlayacak fonksiyonları ekliyorum. Bunları Invoke() içerisine yazmamızın sebebi ise kısaca bir çakışma yaşanmasını önlemek diyebiliriz.

Son olarak da önceki derslerden aşina olduğumuz bağlantıyı açıp kapayan butonlar için gerekli kodları yazıyorum.

Arayüzü kapattığımızda seri portun açık kalmasını önleyen kodları da ekleyerek kodu tamamlıyorum. Tüm koda aşağıdan ulaşabilirsiniz.

C# Proje Kodu

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.IO.Ports;   

namespace mesafe_olcer
 {
     public partial class Form1 : Form
     {
 private string data;   //data değişkenini oluştur

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        string[] ports = SerialPort.GetPortNames();  //Seri portları diziye ekleme
        foreach (string port in ports)
            comboBox1.Items.Add(port);               //Seri portları comboBox1'e ekleme


        serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPort1_DataReceived); //DataReceived eventini oluşturma
    }

    private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        data = serialPort1.ReadLine();                     //Gelen veriyi okuma
        this.Invoke(new EventHandler(displayData_event));            
    }

    private void displayData_event(object sender, EventArgs e)
    {
        label2.Text = data;                               //Gelen veriyi label2'ye yaz
        progressBar1.Value = Convert.ToInt32(data);       //Gelen veriyi Int değikene döndürerek progressBar değerine eşitle
    }

    private void baglan_Click(object sender, EventArgs e)
    {
        try
        {
            serialPort1.PortName = comboBox1.Text;       //Port ismini comboBox1'in text'i olarak belirle
            serialPort1.Open();                          //Seri portu aç
            kes.Enabled = true;                          //"Kes" butonunu tıklanabilir yap
            baglan.Enabled = false;                      //"Bağlan" butonunu tıklanamaz yap
            label3.Text = "Bağlantı sağlandı"; 
            label3.ForeColor = Color.Green;              //Label3 yazı rengini yeşil yap
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message, "Hata");  //Hata mesajı
        }
    }

    private void kes_Click(object sender, EventArgs e)
    {
        try
        {
            serialPort1.Close();              //Seri portu kapa
            kes.Enabled = false;              //"Kes" butonunu tıklanamaz yap
            baglan.Enabled = true;            //"BağlanKes" butonunu tıklanabilir yap
            label3.Text = "Bağlantı kesildi"; 
            label3.ForeColor = Color.Red;     //Label3 yazı rengini kırmızı yap
        }
        catch(Exception ex2)
        {
            MessageBox.Show(ex2.Message); //Hata mesajı
        }

    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (serialPort1.IsOpen) serialPort1.Close();    //Seri port açıksa kapat
    }

 }
}
Mesafe Ölçer Projesi C# Arayüzü

4. dersimizin de sonuna gelmiş olduk. Umarım faydalı olmuştur. Sonraki yazıda bir mini hava istasyonu projesi gerçekleştirerek ortamdan aldığımız bazı meteorolojik verileri (sıcaklık, nem, basınç) tasarladığımız arayüzden devamlı olarak takip etmeye çalışacağız. Yorumlarınızı bekliyorum. Bir sonraki yazıda görüşmek dileğiyle, hoşça kalın. 🙂

Paylaş

Yorumları Görüntüle

En Son İçerik

  • Arduino
  • Arduino Programlama ve Dersler

Arduino ile RFID Kart Okuyucu (RC522) Modül Kullanarak Kapı Kilidi Yapımı

< 19. Derse Dön Herkese merhabalar. Eve kim ne zaman girmiş çıkmış, bilmek istemez misiniz? Öyleyse bu proje size göre…

13 saat Önce
  • Arduino
  • Arduino Programlama ve Dersler
  • Arduino Projeleri
  • Genel

Arduino İle MQ Gaz Sensörlerinin Kullanımı – Yanıcı Gaz Alarmı

20. Derse Geç > < 18. Derse Dön Arkadaşlar herkese selamlar ! Daha önce hiç gaz sensörü kullandınız mı? Bu…

3 hafta Önce
  • Arduino
  • Arduino Programlama ve Dersler
  • Arduino Projeleri
  • Genel

Arduino İle Yağmur Sensörü Kullanarak Yağmur Alarmı Yapalım

19. Derse Geç > < 17. Derse Dön Herkese selamlar ! Bu yazımızda ise yağmur sensörü kullanarak Arduino ile Yağmur…

4 hafta Önce
  • Arduino
  • Arduino C# Projeleri ve Uygulamaları

Arduino ve C# Haberleşmesi ile RGB Led Kontrolü – 3. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, Arduino ve C# haberleşmesi serisinin 3. yazısında RGB led kontrolü yapabileceğimiz bir…

1 ay Önce
  • Arduino
  • Arduino Programlama ve Dersler
  • Arduino Projeleri
  • Genel

Arduino İle Toprak Nem Sensörü Kullanarak Nem Ölçer Yapımı

18. Derse Geç > < 16. Derse Dön Merhaba arkadaşlar ! Arduino serimiz boyunca keyifli projeler yaptık ve bu yazımızda…

1 ay Önce
  • Arduino
  • Arduino Programlama ve Dersler

Arduino Bluetooth Modülü Kullanımı ve RGB LED Kontrolü

16. Derse Geç > < 14. Derse Dön Merhabalar. Bugün sizlerle beraber Arduino UNO ile bluetooth modülü kullanacağız. Sonrasında da…

1 ay Önce