C#.NET – Arduino Uygulamaları: Potansiyometre Kontrolü

Merhaba arkadaşlar bugün sizlerle C#.NET ve Arduino kullanarak yapmış olduğum ufak bir uygulamayı paylaşmak istiyorum. Uygulamada kullanılan potansiyometre hakkında detaylı bilgiye bu adresten ulaşabilirsiniz. Öncelikle devremizin kurulumu aşağıdaki gibidir.

devre_semasi

Gerek C# gerekse Arduino kodlarında bir çok açıklama satırı ekledim. Fakat kısaca uygulamayı anlatacak olursam, öncelikle Arduino’yu bilgisayarımıza taktığımız zaman kullanılan port’u öğrenmemiz gerekmektedir. Bu bilgiye aygıt yöneticisinden ulaşabilirsiniz. (Arduino IDE’de sağ altta tarafta da hangi COM portu olduğunu görebilirsiniz.) Uygulamada da olduğu gibi COM4 kullanıldığını varsayarsak bu bilgiyi program üzerinde gerekli textBox’a yazıyoruz. Ardından “Başlat” butonu ile bağlantıyı gerçekleştiriyoruz. Video’da da gösterildiği üzere “Başlat” ve “Durdur” butonlarına bastığımız zaman aşağıda label ile bağlantı durumunu görebiliyoruz. Bağlantı başarılı bir şekilde gerçekleştirildikten sonra pot’un değeri ile oynayarak progressBar’ın doluluk oranını değiştirirken, “Pot Değeri” yazan textBox’ın içerisinde de sayısal olarak değeri görmekteyiz. Form ekranını tasarlarken progressBar’ın maksimum değerini 1023 yapmak görsel olarak daha doğru sonuçlar vermektedir.

Aşağıda C# ve Arduino’ya ait kodları açıklamaları ile birlikte bulabilirsiniz.

calis1

 Arduino Kodları


int pot=A1; //analog giriş pini
int deger=0;
char m;

void setup()
{
  Serial.begin(9600); //seri haberleşmeyi başlatıyoruz
}

void loop()
{
  if(Serial.available()>0) //herhangi bir veri geldi mi?
  {
  m=Serial.read(); //seri port ile gelen veriyi oku ve bir değişkene ata
  }

  if(m=='e') //eğer okunan değer "e" ise
  {
   deger=analogRead(pot); //potun değerini analog olarak oku
   Serial.println(deger); //deger sonuçlarını seri monitörde görüntülüyoruz
   delay(100);
  }
}

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; //IO sınıfını eklemeyi unutmayın

namespace Arduino_Pot_Uygulamasi
{
 public partial class Form1 : Form
 {
  SerialPort sPort; //SerialPort sınıfından sPort adında bir nesne oluşturuyoruz
  public Form1()
 {
  InitializeComponent();

  sPort = new SerialPort(); 
  sPort.BaudRate = 9600; //sPort nesnesinin hızını ayarlıyoruz
 }

  private void btnBaslat_Click(object sender, EventArgs e)
 {
  timer1.Start(); //Başlat butonu ile bağlantıyı ve timer nesnesini çalıştırıyoruz
  try
  {
   sPort.PortName = txtCom.Text; //sPort nesnesinin ismini textbox ile eşitliyoruz
   if (!sPort.IsOpen) //eğer bağlantı açıksa diyerek oluşan durumları yazıyoruz
   {
    sPort.Open();
    label3.Text = "Bağlantı Kuruldu";
    label3.ForeColor = Color.Green; //yazı rengini yeşil yapıyoruz
    label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz
   }
  }
    //oluşabilecek hatalarda programın aksamaması için try/catch kullandık 
    //catch içerisine try bloğu dışında oluşabilecek durumları yazıyoruz
  catch 
  { 
   label3.Text = "Bağlantı Kurulamadı";
   label3.ForeColor = Color.Red; //yazı rengini kırmızı yapıyoruz
   label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz
  }
 }

    //durdur butonu ile timer nesnesini durdurup bağlantıyı kesiyoruz
    //ayrıca programa özel label, textbox gibi toolların özelliklerini değiştiriyoruz
  private void btnDurdur_Click(object sender, EventArgs e)
 {
   timer1.Stop();
   sPort.Close();
   label3.Text = "Bağlantı Kesildi";
   label3.ForeColor = Color.Red; //yazı rengini kırmızı yapıyoruz
   label3.Visible = true; //başlangıçta kapalı olan durum labelını açıyoruz
   txtPot.Text = ""; //COM Port textbox'ın içini silerek sıfırlıyoruz
   progressBar1.Value = 0; //progressbarı sıfırlıyoruz
 }

   private void timer1_Tick(object sender, EventArgs e)
  {
   try
   {
    sPort.Write("e"); //data karşılaştırması için örnek bir değer atıyoruz
    int receiveddate = Convert.ToInt16(sPort.ReadExisting());
    txtPot.Text = receiveddate.ToString(); //gelen sayısal veriyi stringe çevirerek textbox'a atıyoruz
    progressBar1.Value = Convert.ToInt16(txtPot.Text); //gelen değerleri progressbar için tekrar int'e çeviriyoruz
    System.Threading.Thread.Sleep(100);
   }
   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.

Bir Cevap Yazın

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